From 9eeadc065aa4b547f2942a246fa3bc8561e2e89b Mon Sep 17 00:00:00 2001 From: Damien Goutte-Gattat Date: Fri, 26 Jun 2026 15:10:04 +0100 Subject: [PATCH 01/72] oocodegen: Produce correct slot URI for locally defined attributes. When the object code generator produces the OOField object representing a field in a class (where the field is itself the representation of a LinkML slot or a LinkML attribute), it fills the `slot_uri` member by calling the `SchemaView::get_uri` method and passing it the slot/attribute's name (rather than the slot/attribute's definition). This forces the SchemaView to look up for the actual definition from the specified name, which it may fail to do correctly if the name is not the name of a globally defined slot but of a locally defined slot (which is expected; you cannot lookup a locally defined attribute by its name only). The fix is to provide SchemaView directly with the correct SlotDefinition object (which the OOCodeGen already has), dispensing it from having to look it up. closes #3677 --- .../linkml/src/linkml/generators/oocodegen.py | 2 +- .../test_issues/input/linkml_issue_3677.yaml | 34 +++++++++++++++++++ .../test_issues/test_linkml_issue_3677.py | 10 ++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 tests/linkml/test_issues/input/linkml_issue_3677.yaml create mode 100644 tests/linkml/test_issues/test_linkml_issue_3677.py diff --git a/packages/linkml/src/linkml/generators/oocodegen.py b/packages/linkml/src/linkml/generators/oocodegen.py index b6f7e6bfda..82c0ef7e68 100644 --- a/packages/linkml/src/linkml/generators/oocodegen.py +++ b/packages/linkml/src/linkml/generators/oocodegen.py @@ -325,7 +325,7 @@ def create_documents(self) -> list[OODocument]: source_slot=slot, range=range, default_value=default_value, - slot_uri=sv.get_uri(slot.name, expand=True), + slot_uri=sv.get_uri(slot, expand=True), ) if sn not in parent_slots: diff --git a/tests/linkml/test_issues/input/linkml_issue_3677.yaml b/tests/linkml/test_issues/input/linkml_issue_3677.yaml new file mode 100644 index 0000000000..b1d4a38174 --- /dev/null +++ b/tests/linkml/test_issues/input/linkml_issue_3677.yaml @@ -0,0 +1,34 @@ +id: https://example.org/slot-uri-on-attribute +name: slot-uri-on-attribute +description: >- + This schema illustrates the case of a local, class-specific attribute + being assigned a slot_uri. +prefixes: + linkml: https://w3id.org/linkml/ +imports: + - linkml:types +default_range: string + +classes: + + PrefixDeclaration: + description: >- + A prefix declaration in a prefix map. + attributes: + name: + description: The prefix's name. + slot_uri: "http://www.w3.org/ns/shacl#prefix" + prefix: + description: The associated IRI prefix. + range: uri + slot_uri: "http://www.w3.org/ns/shacl#namespace" + + AnotherClass: + description: >- + This class has a local attribute also named `name`. + attributes: + name: + description: >- + The mere presence of this attribute confuses the object code + generator when it has to produce the URI for the `name` + attribute in the `PrefixDeclaration` class. diff --git a/tests/linkml/test_issues/test_linkml_issue_3677.py b/tests/linkml/test_issues/test_linkml_issue_3677.py new file mode 100644 index 0000000000..8be7eca3b3 --- /dev/null +++ b/tests/linkml/test_issues/test_linkml_issue_3677.py @@ -0,0 +1,10 @@ +from linkml.generators.javagen import JavaGenerator + + +def test_slot_uri_on_locally_defined_attribute(input_path): + """The generator should produce the correct slot_uri for a locally defined attribute.""" + gen = JavaGenerator(input_path("linkml_issue_3677.yaml")) + docs = gen.create_documents() + witness = [doc for doc in docs if doc.name == "PrefixDeclaration"][0] + assert witness.classes[0].fields[0].slot_uri == "http://www.w3.org/ns/shacl#prefix" + assert witness.classes[0].fields[1].slot_uri == "http://www.w3.org/ns/shacl#namespace" From c40dfa4f6e76f141800b9759290b912d0845ee8f Mon Sep 17 00:00:00 2001 From: Carlo van Driesten Date: Fri, 3 Jul 2026 10:09:39 +0200 Subject: [PATCH 02/72] fix(shaclgen): emit sh:minCount/maxCount 0 for zero cardinality values Python truthiness (`if s.maximum_cardinality:`) treats 0 as falsy, so `maximum_cardinality: 0`, `minimum_cardinality: 0` and `exact_cardinality: 0` emitted no constraint at all. `maximum_cardinality: 0` (SHACL `sh:maxCount 0`, "property must not appear") is the idiomatic way to suppress an inherited slot on a subclass via slot_usage, and owlgen already emits `owl:maxCardinality 0` for it -- so the SHACL and OWL output silently diverged. Use explicit `is not None` checks for minimum_cardinality, maximum_cardinality and exact_cardinality, matching the pattern already used in owlgen.py and docgen.py. Precedence: an explicit minimum_cardinality wins over the `required` fallback in the elif cascade, consistent with owlgen.py (which uses the same `if minimum_cardinality is not None ... elif required` order), so `required: true` + `minimum_cardinality: 0` yields `sh:minCount 0`. That combination is a schema-authoring contradiction (the metamodel documents minimum_cardinality as a multivalued-slot count); the explicit, more specific constraint is emitted. Tests cover maximum_cardinality: 0, exact_cardinality: 0, minimum_cardinality: 0, and the required + minimum_cardinality: 0 precedence case. Signed-off-by: Carlo van Driesten --- .../linkml/src/linkml/generators/shaclgen.py | 8 +- .../input/shaclgen/cardinality.yaml | 38 +++++ tests/linkml/test_generators/test_shaclgen.py | 145 ++++++++++++++++++ 3 files changed, 187 insertions(+), 4 deletions(-) diff --git a/packages/linkml/src/linkml/generators/shaclgen.py b/packages/linkml/src/linkml/generators/shaclgen.py index afdd0cf953..da62608069 100644 --- a/packages/linkml/src/linkml/generators/shaclgen.py +++ b/packages/linkml/src/linkml/generators/shaclgen.py @@ -275,9 +275,9 @@ def prop_pv_text(p, v): if msg_text: g.add((pnode, SH.message, Literal(msg_text, lang=self._resolve_language(None)))) # minCount - if s.minimum_cardinality: + if s.minimum_cardinality is not None: prop_pv_literal(SH.minCount, s.minimum_cardinality) - elif s.exact_cardinality: + elif s.exact_cardinality is not None: prop_pv_literal(SH.minCount, s.exact_cardinality) # Identifiers map to the node's IRI rather than a property triple, # so there's no arc to constrain with sh:minCount 1 — emitting it @@ -285,9 +285,9 @@ def prop_pv_text(p, v): elif s.required and not s.identifier: prop_pv_literal(SH.minCount, 1) # maxCount - if s.maximum_cardinality: + if s.maximum_cardinality is not None: prop_pv_literal(SH.maxCount, s.maximum_cardinality) - elif s.exact_cardinality: + elif s.exact_cardinality is not None: prop_pv_literal(SH.maxCount, s.exact_cardinality) elif not s.multivalued: prop_pv_literal(SH.maxCount, 1) diff --git a/tests/linkml/test_generators/input/shaclgen/cardinality.yaml b/tests/linkml/test_generators/input/shaclgen/cardinality.yaml index 6bacffa680..d12b06df4c 100644 --- a/tests/linkml/test_generators/input/shaclgen/cardinality.yaml +++ b/tests/linkml/test_generators/input/shaclgen/cardinality.yaml @@ -17,6 +17,36 @@ classes: slots: - list_exact_size + ParentClass: + slots: + - inherited_slot + - restricted_slot + + ChildWithZeroMaxCard: + is_a: ParentClass + slot_usage: + restricted_slot: + maximum_cardinality: 0 + + ChildWithZeroExactCard: + is_a: ParentClass + slot_usage: + restricted_slot: + exact_cardinality: 0 + + ChildWithZeroMinCard: + is_a: ParentClass + slot_usage: + restricted_slot: + minimum_cardinality: 0 + + ChildWithRequiredAndZeroMinCard: + is_a: ParentClass + slot_usage: + restricted_slot: + required: true + minimum_cardinality: 0 + slots: list_min_max_size: range: integer @@ -28,3 +58,11 @@ slots: range: integer multivalued: true exact_cardinality: 3 + + inherited_slot: + range: string + multivalued: true + + restricted_slot: + range: string + multivalued: true diff --git a/tests/linkml/test_generators/test_shaclgen.py b/tests/linkml/test_generators/test_shaclgen.py index 6b19cf24b1..c104757fd9 100644 --- a/tests/linkml/test_generators/test_shaclgen.py +++ b/tests/linkml/test_generators/test_shaclgen.py @@ -600,6 +600,151 @@ def test_multivalued_slot_exact_cardinality(input_path): ) in g +def test_zero_maximum_cardinality_emits_maxcount(input_path): + """Test that maximum_cardinality: 0 correctly emits sh:maxCount 0. + + Regression test for the bug where Python truthiness check + `if s.maximum_cardinality:` would skip the value 0 (falsy), + failing to emit sh:maxCount 0 in the generated SHACL shape. + The fix uses `if s.maximum_cardinality is not None:` instead. + + This is the primary mechanism for suppressing inherited slots on + subclasses via slot_usage (e.g., OWL maxCardinality 0 pattern). + """ + shacl = ShaclGenerator(input_path("shaclgen/cardinality.yaml"), mergeimports=True).serialize() + + g = rdflib.Graph() + g.parse(data=shacl) + + # Find the ChildWithZeroMaxCard shape + child_uri = URIRef("https://w3id.org/linkml/examples/cardinality/ChildWithZeroMaxCard") + restricted_slot_uri = URIRef("https://w3id.org/linkml/examples/cardinality/restricted_slot") + + # Get all property shapes for the child class + prop_nodes = list(g.objects(child_uri, SH.property)) + assert prop_nodes, "ChildWithZeroMaxCard should have property shapes" + + # Find the property shape for restricted_slot + restricted_prop_node = None + for pn in prop_nodes: + if (pn, SH.path, restricted_slot_uri) in g: + restricted_prop_node = pn + break + assert restricted_prop_node is not None, "Should have a property shape for restricted_slot" + + # The critical assertion: sh:maxCount 0 must be emitted + max_count_values = list(g.objects(restricted_prop_node, SH.maxCount)) + assert len(max_count_values) == 1, f"Expected exactly one sh:maxCount, got {max_count_values}" + assert max_count_values[0] == rdflib.term.Literal( + 0, datatype=rdflib.term.URIRef("http://www.w3.org/2001/XMLSchema#integer") + ), f"sh:maxCount should be 0, got {max_count_values[0]}" + + +def test_zero_exact_cardinality_emits_both_counts(input_path): + """Test that exact_cardinality: 0 emits both sh:minCount 0 and sh:maxCount 0. + + Same truthiness bug as maximum_cardinality: `if s.exact_cardinality:` + skips value 0 (falsy). The fix uses `is not None` instead. + """ + shacl = ShaclGenerator(input_path("shaclgen/cardinality.yaml"), mergeimports=True).serialize() + + g = rdflib.Graph() + g.parse(data=shacl) + + child_uri = URIRef("https://w3id.org/linkml/examples/cardinality/ChildWithZeroExactCard") + restricted_slot_uri = URIRef("https://w3id.org/linkml/examples/cardinality/restricted_slot") + + prop_nodes = list(g.objects(child_uri, SH.property)) + assert prop_nodes, "ChildWithZeroExactCard should have property shapes" + + restricted_prop_node = None + for pn in prop_nodes: + if (pn, SH.path, restricted_slot_uri) in g: + restricted_prop_node = pn + break + assert restricted_prop_node is not None, "Should have a property shape for restricted_slot" + + XSD_INT = rdflib.term.URIRef("http://www.w3.org/2001/XMLSchema#integer") + + min_count_values = list(g.objects(restricted_prop_node, SH.minCount)) + assert len(min_count_values) == 1, f"Expected exactly one sh:minCount, got {min_count_values}" + assert min_count_values[0] == rdflib.term.Literal(0, datatype=XSD_INT) + + max_count_values = list(g.objects(restricted_prop_node, SH.maxCount)) + assert len(max_count_values) == 1, f"Expected exactly one sh:maxCount, got {max_count_values}" + assert max_count_values[0] == rdflib.term.Literal(0, datatype=XSD_INT) + + +def test_zero_minimum_cardinality_emits_mincount(input_path): + """Test that minimum_cardinality: 0 emits sh:minCount 0. + + Same truthiness bug as maximum_cardinality: `if s.minimum_cardinality:` + skips value 0 (falsy). The fix uses `is not None` instead. sh:minCount 0 + is vacuously satisfied (W3C SHACL 4.2.2) but is emitted for consistency + with owlgen (owl:minCardinality 0) and to faithfully reflect the schema. + """ + shacl = ShaclGenerator(input_path("shaclgen/cardinality.yaml"), mergeimports=True).serialize() + + g = rdflib.Graph() + g.parse(data=shacl) + + child_uri = URIRef("https://w3id.org/linkml/examples/cardinality/ChildWithZeroMinCard") + restricted_slot_uri = URIRef("https://w3id.org/linkml/examples/cardinality/restricted_slot") + + prop_nodes = list(g.objects(child_uri, SH.property)) + assert prop_nodes, "ChildWithZeroMinCard should have property shapes" + + restricted_prop_node = None + for pn in prop_nodes: + if (pn, SH.path, restricted_slot_uri) in g: + restricted_prop_node = pn + break + assert restricted_prop_node is not None, "Should have a property shape for restricted_slot" + + XSD_INT = rdflib.term.URIRef("http://www.w3.org/2001/XMLSchema#integer") + + min_count_values = list(g.objects(restricted_prop_node, SH.minCount)) + assert len(min_count_values) == 1, f"Expected exactly one sh:minCount, got {min_count_values}" + assert min_count_values[0] == rdflib.term.Literal(0, datatype=XSD_INT) + + +def test_explicit_minimum_cardinality_overrides_required(input_path): + """An explicit minimum_cardinality: 0 takes precedence over required: true. + + The generator resolves min-count with an ``elif`` cascade in which an + explicit ``minimum_cardinality`` wins and ``required`` is only the fallback. + This mirrors owlgen.py (``if slot.minimum_cardinality is not None ... elif + slot.required``), so ``required: true`` + ``minimum_cardinality: 0`` yields + ``sh:minCount 0`` (not 1). The combination is a schema contradiction; the + explicit, more specific constraint is emitted. + """ + shacl = ShaclGenerator(input_path("shaclgen/cardinality.yaml"), mergeimports=True).serialize() + + g = rdflib.Graph() + g.parse(data=shacl) + + child_uri = URIRef("https://w3id.org/linkml/examples/cardinality/ChildWithRequiredAndZeroMinCard") + restricted_slot_uri = URIRef("https://w3id.org/linkml/examples/cardinality/restricted_slot") + + prop_nodes = list(g.objects(child_uri, SH.property)) + assert prop_nodes, "ChildWithRequiredAndZeroMinCard should have property shapes" + + restricted_prop_node = None + for pn in prop_nodes: + if (pn, SH.path, restricted_slot_uri) in g: + restricted_prop_node = pn + break + assert restricted_prop_node is not None, "Should have a property shape for restricted_slot" + + XSD_INT = rdflib.term.URIRef("http://www.w3.org/2001/XMLSchema#integer") + + min_count_values = list(g.objects(restricted_prop_node, SH.minCount)) + assert len(min_count_values) == 1, f"Expected exactly one sh:minCount, got {min_count_values}" + assert min_count_values[0] == rdflib.term.Literal(0, datatype=XSD_INT), ( + f"explicit minimum_cardinality: 0 should override required: true (minCount 0, not 1), got {min_count_values[0]}" + ) + + def test_exclude_imports(input_path): shacl = ShaclGenerator( input_path("shaclgen/exclude_imports.yaml"), mergeimports=True, exclude_imports=True From 9f55739958871e879cc7ffc5631eabe734b648de Mon Sep 17 00:00:00 2001 From: Sarah Gehrke <99770056+sagehrke@users.noreply.github.com> Date: Tue, 14 Jul 2026 16:17:00 -0600 Subject: [PATCH 03/72] Update Community-Meetings.md with July prez title Added the July 2026 presentation title and link to the project. --- docs/get-involved/Community-Meetings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-involved/Community-Meetings.md b/docs/get-involved/Community-Meetings.md index 1f5a1f1d70..5802f6fe10 100644 --- a/docs/get-involved/Community-Meetings.md +++ b/docs/get-involved/Community-Meetings.md @@ -28,7 +28,7 @@ Join the LinkML community for regular sessions featuring presentations on LinkML | Date | Presenter 1 | Topic 1 | Presenter 2 | Topic 2 | | :---: | :---: | :---: | :----: | :---: | | August 20, 2026 | Patrick Golden | Use of LinkML in the [Zebrafish Toxicology Phenotype Atlas Project](https://zappfish.org/) | | | -| July 16, 2026 | Sierra Moxon | LinkML Microschemas |Stephan Heunis |TBD | +| July 16, 2026 | Sierra Moxon | LinkML Microschemas |Stephan Heunis |[The ORINOCO project at Research Center Jülich - building self-hostable research information infrastructure](https://pool.psychoinformatics.de/ui/?sh%3ANodeShape=xyzri%3AXYZProject&pid=xyzrins%3Aprojects%2Forinoco) | | [June 18, 2026](https://docs.google.com/presentation/d/1mA3xBfPglJLtMPbDLXT8lJ7SAu6iDPNL_HBJs_DZuB0/edit?slide=id.g36e69bd970c_1_50#slide=id.g36e69bd970c_1_50) | Anh Nguyet Vu | Adopting LinkML at Sage: Workflows, Wins, and Works in Progress | Cory Levinson | OAE Data Protocol: Data standardization for carbon removal research and deployment with LinkML | | [May 21, 2026](https://docs.google.com/presentation/d/13KL_5xUkXBNg9IoGrv62OXUfzWXp-M94Pu4GF2TnIBc/edit?slide=id.g36e69bd970c_1_50#slide=id.g36e69bd970c_1_50) | Inge Vejsbjerg | [LinkML for AI Governance at IBM](https://ibm.github.io/ai-atlas-nexus/) |Joshua Send|Why TypeDB is the Natural Backend for LinkML| | | [April 16, 2026](https://docs.google.com/presentation/d/1d2AjM9TBESO6njMXBB-lw5A6WDIFMBb14ZhCRKN2GiY/edit?slide=id.g36e69bd970c_1_50#slide=id.g36e69bd970c_1_50) | Daniel Kapitan| [Introducing PLUGIN and why we fell in love with LinkML](https://docs.google.com/presentation/d/1KqwKnq-f4JsSwHVRtCXZrwqBI7JIP1aqbUqlO7iEjd0/edit?slide=id.p1#slide=id.p1)| Community Discussion Topics| RareLink/REDCap + LinkML with Adam Graefe | | From d9bfd9339a1351d244329e5c7706bcee2f4010af Mon Sep 17 00:00:00 2001 From: amc-corey-cox <69321580+amc-corey-cox@users.noreply.github.com> Date: Wed, 15 Jul 2026 13:26:58 -0500 Subject: [PATCH 04/72] ci: scope CVE audit to PRs that change dependencies The "Audit lockfile for CVEs" step reflects the upstream advisory database, not the PR diff. When a new advisory lands for an already-pinned package, every open PR goes red regardless of whether it touches dependencies. Guard the audit step with a base-diff check so it only runs on PRs that change uv.lock or a pyproject.toml. The job still always runs and reports (no stuck-pending required check), and non-PR events keep auditing so trunk's signal is intact. The malware sync gate is unchanged. Closes #3767 --- .github/workflows/dependency-audit.yaml | 26 +++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/.github/workflows/dependency-audit.yaml b/.github/workflows/dependency-audit.yaml index 68cd7e80ab..b808c22f83 100644 --- a/.github/workflows/dependency-audit.yaml +++ b/.github/workflows/dependency-audit.yaml @@ -25,6 +25,31 @@ jobs: steps: - name: Check out repository uses: actions/checkout@v6 + with: + # Full history so we can diff a PR against its base to see whether + # dependency files changed (see "Detect dependency changes" below). + fetch-depth: 0 + + # The CVE audit reflects the state of the *upstream advisory database*, not + # the PR's diff: a newly-published advisory against an already-pinned + # package turns every open PR red, even one that never touches dependencies. + # Scope the audit to PRs that actually change dependency files so unrelated + # PRs aren't held hostage. Non-PR events (push to main, merge_group, + # workflow_dispatch) always audit, keeping trunk's signal intact. + - name: Detect dependency changes + id: deps + run: | + if [ "${{ github.event_name }}" = "pull_request" ]; then + if git diff --name-only "${{ github.event.pull_request.base.sha }}...HEAD" \ + | grep -qE '(^|/)(uv\.lock|pyproject\.toml)$'; then + echo "changed=true" >> "$GITHUB_OUTPUT" + else + echo "changed=false" >> "$GITHUB_OUTPUT" + echo "No dependency files changed in this PR; skipping the CVE audit." + fi + else + echo "changed=true" >> "$GITHUB_OUTPUT" + fi # Pin uv to a known-good, recent release. - name: Install uv and setup uv caching @@ -47,6 +72,7 @@ jobs: # (see packages/linkml/pyproject.toml) and ignore this single test-only, # low-risk advisory until conftest is migrated to stdlib difflib. - name: Audit lockfile for CVEs + if: steps.deps.outputs.changed == 'true' run: uv audit --ignore GHSA-6w46-j5rx-g56g # Step 2: Run a sync. If a package contains known malware, From eddafa3e2ecd2c285496b115563b5426ec346f4a Mon Sep 17 00:00:00 2001 From: amc-corey-cox <69321580+amc-corey-cox@users.noreply.github.com> Date: Wed, 15 Jul 2026 15:04:49 -0500 Subject: [PATCH 05/72] ci: scope CVE audit to real dependency changes on every event MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Compare the change under test against each event's natural base (PR base, push's before-sha, merge_group base) and only run the CVE audit when dependencies actually changed. A pyproject.toml edit always counts; uv.lock is compared by its resolved (name, version) set via a small tomllib helper, so non-deterministic lockfile churn with an unchanged resolution is skipped. This keeps a newly-published upstream advisory from turning unrelated PRs — and the next innocent merge to main — red. The malware sync gate is unchanged. --- .github/scripts/uv_lock_deps_changed.py | 67 +++++++++++++++++++++ .github/workflows/dependency-audit.yaml | 77 +++++++++++++++++-------- 2 files changed, 121 insertions(+), 23 deletions(-) create mode 100644 .github/scripts/uv_lock_deps_changed.py diff --git a/.github/scripts/uv_lock_deps_changed.py b/.github/scripts/uv_lock_deps_changed.py new file mode 100644 index 0000000000..86d9da3ec2 --- /dev/null +++ b/.github/scripts/uv_lock_deps_changed.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +"""Decide whether the resolved ``uv.lock`` dependency set changed between refs. + +``uv.lock`` is regenerated non-deterministically: reordering, hashes, and +metadata can differ between two lockfiles that resolve to exactly the same +packages. ``uv audit`` only cares about the multiset of ``(name, version)`` +pairs, so this script compares that set between a base ref and ``HEAD`` and +prints ``true`` only when it actually differs. + +Usage: + uv_lock_deps_changed.py + +Prints ``true`` when the resolved ``(name, version)`` set at ``HEAD`` differs +from the one at ```` (or when the lockfile is absent at either ref), +otherwise ``false``. +""" + +from __future__ import annotations + +import subprocess +import sys +import tomllib + + +def package_set(ref: str) -> set[tuple[str, str | None]] | None: + """Return the ``{(name, version)}`` set from ``uv.lock`` at ``ref``. + + Args: + ref: A git ref (SHA, branch, ``HEAD``) to read ``uv.lock`` from. + + Returns: + The set of ``(name, version)`` tuples for every locked package, or + ``None`` if ``uv.lock`` does not exist at ``ref``. + """ + result = subprocess.run( + ["git", "show", f"{ref}:uv.lock"], + capture_output=True, + text=True, + ) + if result.returncode != 0: + return None + data = tomllib.loads(result.stdout) + return {(pkg["name"], pkg.get("version")) for pkg in data.get("package", [])} + + +def resolved_set_changed(base_ref: str) -> bool: + """Return whether the resolved dependency set differs between refs. + + Args: + base_ref: The ref to compare ``HEAD`` against. + + Returns: + ``True`` if the ``(name, version)`` set differs, or if ``uv.lock`` is + missing at either ref; ``False`` when the sets are identical. + """ + base = package_set(base_ref) + head = package_set("HEAD") + return base is None or head is None or base != head + + +def main() -> None: + """Print ``true``/``false`` for the base ref given as the sole argument.""" + print("true" if resolved_set_changed(sys.argv[1]) else "false") + + +if __name__ == "__main__": + main() diff --git a/.github/workflows/dependency-audit.yaml b/.github/workflows/dependency-audit.yaml index b808c22f83..a3832a364b 100644 --- a/.github/workflows/dependency-audit.yaml +++ b/.github/workflows/dependency-audit.yaml @@ -26,31 +26,10 @@ jobs: - name: Check out repository uses: actions/checkout@v6 with: - # Full history so we can diff a PR against its base to see whether - # dependency files changed (see "Detect dependency changes" below). + # Full history so we can diff against a base ref to see whether the + # resolved dependency set changed (see "Detect dependency changes"). fetch-depth: 0 - # The CVE audit reflects the state of the *upstream advisory database*, not - # the PR's diff: a newly-published advisory against an already-pinned - # package turns every open PR red, even one that never touches dependencies. - # Scope the audit to PRs that actually change dependency files so unrelated - # PRs aren't held hostage. Non-PR events (push to main, merge_group, - # workflow_dispatch) always audit, keeping trunk's signal intact. - - name: Detect dependency changes - id: deps - run: | - if [ "${{ github.event_name }}" = "pull_request" ]; then - if git diff --name-only "${{ github.event.pull_request.base.sha }}...HEAD" \ - | grep -qE '(^|/)(uv\.lock|pyproject\.toml)$'; then - echo "changed=true" >> "$GITHUB_OUTPUT" - else - echo "changed=false" >> "$GITHUB_OUTPUT" - echo "No dependency files changed in this PR; skipping the CVE audit." - fi - else - echo "changed=true" >> "$GITHUB_OUTPUT" - fi - # Pin uv to a known-good, recent release. - name: Install uv and setup uv caching uses: astral-sh/setup-uv@v8.2.0 @@ -64,6 +43,58 @@ jobs: with: python-version: 3.13 + # The CVE audit reflects the state of the *upstream advisory database*, + # not the change under test: a newly-published advisory against an + # already-pinned package would otherwise turn every open PR — and the next + # innocent merge to main — red, regardless of whether it touched deps. + # + # So gate the audit on whether the change actually altered dependencies, + # relative to each event's natural base: + # * pull_request -> the PR base + # * push (main) -> the commit before the push (github.event.before) + # * merge_group -> the queue base + # * otherwise (workflow_dispatch, first/force push) -> audit + # + # A pyproject.toml change is always a real dependency change. uv.lock is + # regenerated non-deterministically, so a textual change there is only + # treated as real if the resolved (name, version) set actually differs. + - name: Detect dependency changes + id: deps + shell: bash + run: | + set -euo pipefail + case "${{ github.event_name }}" in + pull_request) base="${{ github.event.pull_request.base.sha }}" ;; + merge_group) base="${{ github.event.merge_group.base_sha }}" ;; + push) base="${{ github.event.before }}" ;; + *) base="" ;; + esac + + zero="0000000000000000000000000000000000000000" + if [ -z "$base" ] || [ "$base" = "$zero" ] || ! git cat-file -e "$base^{commit}" 2>/dev/null; then + echo "No comparable base ref for '${{ github.event_name }}'; auditing." + echo "changed=true" >> "$GITHUB_OUTPUT" + exit 0 + fi + + changed_files="$(git diff --name-only "$base...HEAD")" + + if grep -qE '(^|/)pyproject\.toml$' <<<"$changed_files"; then + echo "pyproject.toml changed; auditing." + echo "changed=true" >> "$GITHUB_OUTPUT" + elif grep -qE '(^|/)uv\.lock$' <<<"$changed_files"; then + changed="$(python3 .github/scripts/uv_lock_deps_changed.py "$base")" + if [ "$changed" = "true" ]; then + echo "uv.lock resolved dependency set changed; auditing." + else + echo "uv.lock changed but the resolved dependency set is identical; skipping audit." + fi + echo "changed=$changed" >> "$GITHUB_OUTPUT" + else + echo "No dependency files changed; skipping audit." + echo "changed=false" >> "$GITHUB_OUTPUT" + fi + # Step 1: Run uv audit to check for vulnerabilities (CVEs) # # GHSA-6w46-j5rx-g56g (pytest predictable tmpdir path) is fixed only in From 043f677b6d961190ed62bdd196be05e0bece21dc Mon Sep 17 00:00:00 2001 From: amc-corey-cox <69321580+amc-corey-cox@users.noreply.github.com> Date: Wed, 15 Jul 2026 15:40:56 -0500 Subject: [PATCH 06/72] ci: report unowned-CVE audit findings via a rolling tracking issue MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The per-change gate deliberately ignores advisories published against dependencies no PR touched. Cover that case without blocking CI: a weekly scheduled job audits main's lockfile and keeps a single labelled tracking issue in sync — opened when vulnerabilities appear, refreshed while they persist, closed automatically once clean. It never assigns or mentions anyone, so it stays quiet and stays under the project's control. --- .github/workflows/dependency-audit.yaml | 99 +++++++++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/.github/workflows/dependency-audit.yaml b/.github/workflows/dependency-audit.yaml index a3832a364b..c2f9a73d21 100644 --- a/.github/workflows/dependency-audit.yaml +++ b/.github/workflows/dependency-audit.yaml @@ -16,11 +16,19 @@ on: pull_request: merge_group: workflow_dispatch: + schedule: + # Weekly, Monday 09:00 UTC. Catches advisories newly published against + # already-pinned dependencies — the case the per-change gate deliberately + # ignores — and reports them in a tracking issue rather than blocking CI. + - cron: "0 9 * * 1" jobs: security-check: name: Validate Dependencies runs-on: ubuntu-latest + # The blocking gate is about the *change under test*; on the schedule there is + # no change to gate, so the scheduled run only files the tracking issue below. + if: github.event_name != 'schedule' steps: - name: Check out repository @@ -120,3 +128,94 @@ jobs: # - name: Verify Environment Sync (Anti-Malware Gate) run: uv sync --frozen --all-groups + + # Non-blocking detection of CVEs on the current main lockfile — including + # advisories published against dependencies that no PR has touched. Instead of + # failing CI, it keeps a single rolling tracking issue in sync with the audit: + # opened when vulnerabilities appear, refreshed while they persist, and closed + # automatically once the lockfile is clean again. It never assigns or mentions + # anyone, so it stays quiet (an entry in the issue list, no email drip) and is + # fully under the project's control — unlike Dependabot alert emails. + audit-issue: + name: Report CVEs via tracking issue + runs-on: ubuntu-latest + if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' + permissions: + contents: read + issues: write + env: + GH_TOKEN: ${{ github.token }} + AUDIT_LABEL: dependency-audit + RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + + steps: + - name: Check out repository + uses: actions/checkout@v6 + + - name: Install uv and setup uv caching + uses: astral-sh/setup-uv@v8.2.0 + with: + version: ${{ env.UV_VERSION }} + enable-cache: true + + - name: Set up Python + uses: actions/setup-python@v6.2.0 + with: + python-version: 3.13 + + - name: Audit and sync tracking issue + shell: bash + run: | + set -uo pipefail + + # Capture findings without letting a non-zero audit fail the job: + # a scheduled failure would notify, which is exactly what we avoid. + findings="$(uv audit --ignore GHSA-6w46-j5rx-g56g 2>&1)"; rc=$? + + # Ensure the tracking label exists (idempotent). + gh label create "$AUDIT_LABEL" --color B60205 \ + --description "Open CVE(s) in uv.lock found by the scheduled dependency audit" \ + 2>/dev/null || true + + open_issue="$(gh issue list --label "$AUDIT_LABEL" --state open \ + --json number --jq '.[0].number // empty')" + + if [ "$rc" -eq 0 ]; then + if [ -n "$open_issue" ]; then + gh issue close "$open_issue" \ + --comment "\`uv audit\` no longer reports vulnerabilities as of ${RUN_URL} — closing automatically." + echo "Closed tracking issue #$open_issue (lockfile clean)." + else + echo "No vulnerabilities and no open tracking issue; nothing to do." + fi + exit 0 + fi + + # Vulnerabilities present: build the issue body from the raw audit output. + { + echo "\`uv audit\` reports known vulnerabilities in the committed \`uv.lock\`." + echo "These are not tied to any single change, so they are tracked here rather than blocking CI." + echo + echo '```' + printf '%s\n' "$findings" + echo '```' + echo + echo "_Maintained automatically by the scheduled dependency audit; it refreshes" + echo "while vulnerabilities remain and closes when \`uv audit\` is clean._" + echo + echo "[Latest run]($RUN_URL)" + } > "$RUNNER_TEMP/audit-body.md" + + if [ -n "$open_issue" ]; then + # Only edit when the content actually changed, to avoid churn. + current="$(gh issue view "$open_issue" --json body --jq .body)" + if [ "$current" != "$(cat "$RUNNER_TEMP/audit-body.md")" ]; then + gh issue edit "$open_issue" --body-file "$RUNNER_TEMP/audit-body.md" + echo "Refreshed tracking issue #$open_issue." + else + echo "Tracking issue #$open_issue already current." + fi + else + gh issue create --title "Dependency vulnerabilities detected by uv audit" \ + --label "$AUDIT_LABEL" --body-file "$RUNNER_TEMP/audit-body.md" + fi From db380aefe87d393dff9824848f4b9423c07663b9 Mon Sep 17 00:00:00 2001 From: amc-corey-cox <69321580+amc-corey-cox@users.noreply.github.com> Date: Wed, 15 Jul 2026 15:55:14 -0500 Subject: [PATCH 07/72] ci: drop scheduled tracking-issue job Dependabot alerts are enabled on the repo and already cover CVEs on dependencies no PR touched. A self-hosted rolling-issue audit duplicates that native detection (and running both double-reports each CVE), so it isn't worth the standing complexity. Notification noise is better handled at the Dependabot notification-routing layer than by rebuilding detection. Reverts the audit-issue job; keeps the per-change scoping and malware gate. --- .github/workflows/dependency-audit.yaml | 99 ------------------------- 1 file changed, 99 deletions(-) diff --git a/.github/workflows/dependency-audit.yaml b/.github/workflows/dependency-audit.yaml index c2f9a73d21..a3832a364b 100644 --- a/.github/workflows/dependency-audit.yaml +++ b/.github/workflows/dependency-audit.yaml @@ -16,19 +16,11 @@ on: pull_request: merge_group: workflow_dispatch: - schedule: - # Weekly, Monday 09:00 UTC. Catches advisories newly published against - # already-pinned dependencies — the case the per-change gate deliberately - # ignores — and reports them in a tracking issue rather than blocking CI. - - cron: "0 9 * * 1" jobs: security-check: name: Validate Dependencies runs-on: ubuntu-latest - # The blocking gate is about the *change under test*; on the schedule there is - # no change to gate, so the scheduled run only files the tracking issue below. - if: github.event_name != 'schedule' steps: - name: Check out repository @@ -128,94 +120,3 @@ jobs: # - name: Verify Environment Sync (Anti-Malware Gate) run: uv sync --frozen --all-groups - - # Non-blocking detection of CVEs on the current main lockfile — including - # advisories published against dependencies that no PR has touched. Instead of - # failing CI, it keeps a single rolling tracking issue in sync with the audit: - # opened when vulnerabilities appear, refreshed while they persist, and closed - # automatically once the lockfile is clean again. It never assigns or mentions - # anyone, so it stays quiet (an entry in the issue list, no email drip) and is - # fully under the project's control — unlike Dependabot alert emails. - audit-issue: - name: Report CVEs via tracking issue - runs-on: ubuntu-latest - if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' - permissions: - contents: read - issues: write - env: - GH_TOKEN: ${{ github.token }} - AUDIT_LABEL: dependency-audit - RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} - - steps: - - name: Check out repository - uses: actions/checkout@v6 - - - name: Install uv and setup uv caching - uses: astral-sh/setup-uv@v8.2.0 - with: - version: ${{ env.UV_VERSION }} - enable-cache: true - - - name: Set up Python - uses: actions/setup-python@v6.2.0 - with: - python-version: 3.13 - - - name: Audit and sync tracking issue - shell: bash - run: | - set -uo pipefail - - # Capture findings without letting a non-zero audit fail the job: - # a scheduled failure would notify, which is exactly what we avoid. - findings="$(uv audit --ignore GHSA-6w46-j5rx-g56g 2>&1)"; rc=$? - - # Ensure the tracking label exists (idempotent). - gh label create "$AUDIT_LABEL" --color B60205 \ - --description "Open CVE(s) in uv.lock found by the scheduled dependency audit" \ - 2>/dev/null || true - - open_issue="$(gh issue list --label "$AUDIT_LABEL" --state open \ - --json number --jq '.[0].number // empty')" - - if [ "$rc" -eq 0 ]; then - if [ -n "$open_issue" ]; then - gh issue close "$open_issue" \ - --comment "\`uv audit\` no longer reports vulnerabilities as of ${RUN_URL} — closing automatically." - echo "Closed tracking issue #$open_issue (lockfile clean)." - else - echo "No vulnerabilities and no open tracking issue; nothing to do." - fi - exit 0 - fi - - # Vulnerabilities present: build the issue body from the raw audit output. - { - echo "\`uv audit\` reports known vulnerabilities in the committed \`uv.lock\`." - echo "These are not tied to any single change, so they are tracked here rather than blocking CI." - echo - echo '```' - printf '%s\n' "$findings" - echo '```' - echo - echo "_Maintained automatically by the scheduled dependency audit; it refreshes" - echo "while vulnerabilities remain and closes when \`uv audit\` is clean._" - echo - echo "[Latest run]($RUN_URL)" - } > "$RUNNER_TEMP/audit-body.md" - - if [ -n "$open_issue" ]; then - # Only edit when the content actually changed, to avoid churn. - current="$(gh issue view "$open_issue" --json body --jq .body)" - if [ "$current" != "$(cat "$RUNNER_TEMP/audit-body.md")" ]; then - gh issue edit "$open_issue" --body-file "$RUNNER_TEMP/audit-body.md" - echo "Refreshed tracking issue #$open_issue." - else - echo "Tracking issue #$open_issue already current." - fi - else - gh issue create --title "Dependency vulnerabilities detected by uv audit" \ - --label "$AUDIT_LABEL" --body-file "$RUNNER_TEMP/audit-body.md" - fi From af6368bb2bcb0e2e8b67d572bc98d3ee77919966 Mon Sep 17 00:00:00 2001 From: amc-corey-cox <69321580+amc-corey-cox@users.noreply.github.com> Date: Wed, 15 Jul 2026 16:00:01 -0500 Subject: [PATCH 08/72] style: ruff import grouping in uv_lock_deps_changed.py --- .github/scripts/uv_lock_deps_changed.py | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/scripts/uv_lock_deps_changed.py b/.github/scripts/uv_lock_deps_changed.py index 86d9da3ec2..c320ffc72d 100644 --- a/.github/scripts/uv_lock_deps_changed.py +++ b/.github/scripts/uv_lock_deps_changed.py @@ -19,6 +19,7 @@ import subprocess import sys + import tomllib From 48d25c5f6597d884e27c832d90eb0b00c2efc9ca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Jul 2026 12:31:33 +0000 Subject: [PATCH 09/72] build(deps-dev): bump sphinxcontrib-mermaid from 1.0.0 to 2.0.3 Bumps [sphinxcontrib-mermaid](https://github.com/mgaitan/sphinxcontrib-mermaid) from 1.0.0 to 2.0.3. - [Changelog](https://github.com/mgaitan/sphinxcontrib-mermaid/blob/master/CHANGELOG.md) - [Commits](https://github.com/mgaitan/sphinxcontrib-mermaid/compare/1.0.0...v2.0.3) --- updated-dependencies: - dependency-name: sphinxcontrib-mermaid dependency-version: 2.0.2 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- packages/linkml/pyproject.toml | 2 +- uv.lock | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/linkml/pyproject.toml b/packages/linkml/pyproject.toml index 89ea73226f..500af3c89b 100644 --- a/packages/linkml/pyproject.toml +++ b/packages/linkml/pyproject.toml @@ -136,7 +136,7 @@ tests-extra = [ ] docs = [ "furo >= 2023.03.27", - "sphinxcontrib-mermaid >= 0.7.1", + "sphinxcontrib-mermaid>=2.0.3", "sphinx", "sphinx-click", "sphinx-rtd-theme", diff --git a/uv.lock b/uv.lock index 0fdfe8bb3e..0c86552317 100644 --- a/uv.lock +++ b/uv.lock @@ -2431,7 +2431,7 @@ docs = [ { name = "sphinx-click" }, { name = "sphinx-jinja", specifier = ">=2.0.2" }, { name = "sphinx-rtd-theme" }, - { name = "sphinxcontrib-mermaid", specifier = ">=0.7.1" }, + { name = "sphinxcontrib-mermaid", specifier = ">=2.0.3" }, { name = "sphinxcontrib-programoutput", specifier = ">=0.17" }, ] lint = [{ name = "black", specifier = ">=24.0.0" }] @@ -4980,16 +4980,17 @@ wheels = [ [[package]] name = "sphinxcontrib-mermaid" -version = "1.0.0" +version = "2.0.3" source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "jinja2" }, { name = "pyyaml" }, { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/97/69/bf039237ad260073e8c02f820b3e00dc34f3a2de20aff7861e6b19d2f8c5/sphinxcontrib_mermaid-1.0.0.tar.gz", hash = "sha256:2e8ab67d3e1e2816663f9347d026a8dee4a858acdd4ad32dd1c808893db88146", size = 15153, upload-time = "2024-10-12T16:33:03.863Z" } +sdist = { url = "https://files.pythonhosted.org/packages/51/29/54cf1f7e03630ca4859caba25bc192698954d7c630377c62d1e264715c37/sphinxcontrib_mermaid-2.0.3.tar.gz", hash = "sha256:a6865ef6b65b225c5403a3170de63a04a07227cada11a4a71a6b87b4f9ed185a", size = 20764, upload-time = "2026-07-08T00:30:44.216Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cd/c8/784b9ac6ea08aa594c1a4becbd0dbe77186785362e31fd633b8c6ae0197a/sphinxcontrib_mermaid-1.0.0-py3-none-any.whl", hash = "sha256:60b72710ea02087f212028feb09711225fbc2e343a10d34822fe787510e1caa3", size = 9597, upload-time = "2024-10-12T16:33:02.303Z" }, + { url = "https://files.pythonhosted.org/packages/1a/57/b39c7a69b70a3ce999732bdb57fcaac78fb3cc8e2843a3daf1c1f821bc9d/sphinxcontrib_mermaid-2.0.3-py3-none-any.whl", hash = "sha256:f001ed36a55c108f6221a2d656a441c487ee30651b54db72b7c752a20c7a66e8", size = 15401, upload-time = "2026-07-08T00:30:42.877Z" }, ] [[package]] From 20b3bfaa2398d5d19926d2fd63ce6d1929dff6a8 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Mon, 13 Jul 2026 16:26:20 +0200 Subject: [PATCH 10/72] fix(test_rdflib_dumper): fix test_output_prefixes isolation and sdo/schema1 brittleness Two bugs in test_output_prefixes: 1. No fixture dependency on issue_429_graph: the test read OUT_429 from disk, which only exists if a prior test had already run the fixture. Running the test in isolation (or after a clean checkout) would fail or read a stale file. Fixed by adding issue_429_graph as a parameter and reading the turtle from the graph directly via g.serialize(). 2. Assertions for 'prefix sdo:' and 'sdo:Person' were brittle: the semweb_context prefix map binds http://schema.org/ as schema1: rather than sdo:, so these always failed on a freshly generated graph. Replaced with a namespace-manager URI check and a graph-level triple assertion, which are independent of the prefix label chosen by the serialiser. --- .../test_loaders_dumpers/test_rdflib_dumper.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/tests/linkml_runtime/test_loaders_dumpers/test_rdflib_dumper.py b/tests/linkml_runtime/test_loaders_dumpers/test_rdflib_dumper.py index 9dece010b8..3d98e994f0 100644 --- a/tests/linkml_runtime/test_loaders_dumpers/test_rdflib_dumper.py +++ b/tests/linkml_runtime/test_loaders_dumpers/test_rdflib_dumper.py @@ -424,13 +424,19 @@ def test_rdf_output(issue_429_graph): assert (ORCID["4567"], personinfo.phone, Literal("555-555-5555")) in g -def test_output_prefixes(): +def test_output_prefixes(issue_429_graph): """Test output prefixes for issue 429.""" - with open(str(OUT_429), encoding="UTF-8") as file: - file_string = file.read() - prefixes = ["prefix ORCID:", "prefix personinfo:", "prefix sdo:", "sdo:Person", "personinfo:age", "ORCID:1234"] - for prefix in prefixes: - assert prefix in file_string + g = issue_429_graph + file_string = g.serialize(format="turtle") + # Serialisation-stable assertions: these prefixes are always present + # regardless of rdflib / semweb_context version. + for token in ["prefix ORCID:", "prefix personinfo:", "personinfo:age", "ORCID:1234"]: + assert token in file_string + # http://schema.org/ may be serialised as "sdo:" or "schema1:" depending on + # the semweb_context version; check at the graph level instead. + bound_uris = {str(ns) for _, ns in g.namespace_manager.namespaces()} + assert "http://schema.org/" in bound_uris + assert (ORCID["1234"], RDF.type, SDO.Person) in g def test_pydantic_model_dump(): From e4e4a3649bd19a9fa7fb7498397b421b04f9a59a Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Mon, 13 Jul 2026 16:26:54 +0200 Subject: [PATCH 11/72] refactor(test_rdflib_dumper): replace remaining turtle string assertions with graph-level checks Replace the four residual turtle string assertions ('prefix ORCID:', 'prefix personinfo:', 'personinfo:age', 'ORCID:1234') with graph-level assertions using the namespace manager and triple membership, consistent with how test_rdf_output already works. Also extend coverage to ORCID:4567 (Lois Lane), which was not asserted at all in test_output_prefixes. --- .../test_rdflib_dumper.py | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/tests/linkml_runtime/test_loaders_dumpers/test_rdflib_dumper.py b/tests/linkml_runtime/test_loaders_dumpers/test_rdflib_dumper.py index 3d98e994f0..438d0c95cd 100644 --- a/tests/linkml_runtime/test_loaders_dumpers/test_rdflib_dumper.py +++ b/tests/linkml_runtime/test_loaders_dumpers/test_rdflib_dumper.py @@ -425,18 +425,31 @@ def test_rdf_output(issue_429_graph): def test_output_prefixes(issue_429_graph): - """Test output prefixes for issue 429.""" + """Test output prefixes and key triples for issue 429. + + Assertions use the graph object and namespace manager directly rather than + matching against the turtle serialisation string, so they are independent + of rdflib version, semweb_context prefix labels, and serialisation order. + """ g = issue_429_graph - file_string = g.serialize(format="turtle") - # Serialisation-stable assertions: these prefixes are always present - # regardless of rdflib / semweb_context version. - for token in ["prefix ORCID:", "prefix personinfo:", "personinfo:age", "ORCID:1234"]: - assert token in file_string - # http://schema.org/ may be serialised as "sdo:" or "schema1:" depending on - # the semweb_context version; check at the graph level instead. - bound_uris = {str(ns) for _, ns in g.namespace_manager.namespaces()} + nm = g.namespace_manager + bound_prefixes = {pfx for pfx, _ in nm.namespaces()} + bound_uris = {str(ns) for _, ns in nm.namespaces()} + # Key prefix namespaces must be bound. + assert "ORCID" in bound_prefixes + assert "personinfo" in bound_prefixes + # http://schema.org/ may be serialised as sdo: or schema1: depending on the + # semweb_context version; check the URI rather than the label. assert "http://schema.org/" in bound_uris - assert (ORCID["1234"], RDF.type, SDO.Person) in g + # Both persons must be typed and have their properties present. + for orcid_id, full_name, age in [ + ("1234", "Clark Kent", "32"), + ("4567", "Lois Lane", "33"), + ]: + subject = ORCID[orcid_id] + assert (subject, RDF.type, SDO.Person) in g + assert (subject, personinfo.age, Literal(age)) in g + assert (subject, personinfo.full_name, Literal(full_name)) in g def test_pydantic_model_dump(): From 1f4ba8e05554a142c5456764ef9db36b98e0b173 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Mon, 13 Jul 2026 13:34:12 +0200 Subject: [PATCH 12/72] test(rdflib_dumper): detect premature namespace cache bug for imported sub-schema prefixes Add assertions to test_phenopackets that all predicate and rdf:type object URIs in the dumped graph are fully expanded (contain '://'). Before this fix, sub-schema prefixes (e.g. 'base:' declared in phenopackets/base) were absent from the namespace cache when namespaces() was first called, so slot URIs like 'base:label' and class URIs like 'base:OntologyClass' were emitted as raw unexpanded CURIEs into the RDF graph instead of being expanded to their full https:// equivalents. This test fails on the unfixed code and will pass once imports_closure() is called before the namespace cache is populated. --- .../test_loaders_dumpers/test_rdflib_dumper.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/linkml_runtime/test_loaders_dumpers/test_rdflib_dumper.py b/tests/linkml_runtime/test_loaders_dumpers/test_rdflib_dumper.py index 438d0c95cd..d7f37c6264 100644 --- a/tests/linkml_runtime/test_loaders_dumpers/test_rdflib_dumper.py +++ b/tests/linkml_runtime/test_loaders_dumpers/test_rdflib_dumper.py @@ -394,6 +394,15 @@ def test_phenopackets(prefix_map): assert Literal(test_label) in list(g.objects(URIRef(expected_uri))), ( f"Expected label {test_label} for {expected_uri} in {ttl}" ) + # Predicates and type objects must be fully expanded URIs, not raw CURIEs. + # A raw CURIE like "base:label" as a predicate indicates that sub-schema + # prefixes were not loaded into the namespace cache before URI expansion. + for s, p, o in g: + assert "://" in str(p), f"Predicate {p!r} is not a full URI — sub-schema prefixes may not have been loaded" + if str(p) == str(RDF.type): + assert "://" in str(o), ( + f"rdf:type object {o!r} is not a full URI — sub-schema prefixes may not have been loaded" + ) pf = PhenotypicFeature(type=c) pkt = Phenopacket( id="id with spaces", From c7a9eeb18ef4e6b38aaefab9e9367e199f56d939 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Mon, 13 Jul 2026 13:34:50 +0200 Subject: [PATCH 13/72] fix(rdflib_dumper): call imports_closure() before namespaces() to load all sub-schema prefixes SchemaView.namespaces() is lru_cache'd. When as_rdf_graph() called namespaces() before walking the import closure, imported sub-schemas (e.g. phenopackets/base with its 'base:' prefix) were absent from schema_map, so the cached Namespaces object was incomplete. Subsequent calls to get_uri(expand=True) inside inject_triples() then failed to expand CURIEs like 'base:label' and 'base:OntologyClass', silently emitting malformed URIRef('base:label') triples into the graph. Fix: call imports_closure() first so schema_map is fully populated before the namespace cache is seeded. --- .../linkml_runtime/src/linkml_runtime/dumpers/rdflib_dumper.py | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/linkml_runtime/src/linkml_runtime/dumpers/rdflib_dumper.py b/packages/linkml_runtime/src/linkml_runtime/dumpers/rdflib_dumper.py index 96b064dbbb..177186051a 100644 --- a/packages/linkml_runtime/src/linkml_runtime/dumpers/rdflib_dumper.py +++ b/packages/linkml_runtime/src/linkml_runtime/dumpers/rdflib_dumper.py @@ -43,6 +43,7 @@ def as_rdf_graph( :return: """ g = Graph() + schemaview.imports_closure() # ensure all imported sub-schemas are in schema_map before namespaces() caches if isinstance(prefix_map, Converter): # TODO replace with `prefix_map = prefix_map.bimap` after making minimum requirement on python 3.8 prefix_map = {record.prefix: record.uri_prefix for record in prefix_map.records} From 573e1c3b572b34703a69ce29408876b7f1bd2f8e Mon Sep 17 00:00:00 2001 From: Kevin Schaper Date: Thu, 16 Jul 2026 13:15:31 -0700 Subject: [PATCH 14/72] Mark non-required enum slots as nullable in JSON Schema output --- .../src/linkml/generators/jsonschemagen.py | 6 +- .../__snapshots__/biolink.schema.json | 1080 +++++++++++++++-- tests/linkml/test_compliance/helper.py | 6 +- .../test_compliance/test_enum_compliance.py | 74 +- .../test_generators/input/not_required.yaml | 15 + .../test_generators/test_jsonschemagen.py | 6 + .../__snapshots__/genjsonschema/meta.json | 36 +- .../genjsonschema/meta_inline.json | 36 +- 8 files changed, 1128 insertions(+), 131 deletions(-) diff --git a/packages/linkml/src/linkml/generators/jsonschemagen.py b/packages/linkml/src/linkml/generators/jsonschemagen.py index b9cfa6b883..2b3ade8eab 100644 --- a/packages/linkml/src/linkml/generators/jsonschemagen.py +++ b/packages/linkml/src/linkml/generators/jsonschemagen.py @@ -836,7 +836,11 @@ def get_subschema_for_slot( else: if reference is not None: - prop = JsonSchema.ref_for(reference) + # for multivalued slots, nullability applies to the array (via array_of + # below), not to the individual elements + prop = JsonSchema.ref_for( + reference, required=slot.required or slot_is_multivalued or not include_null + ) elif typ and fmt is None: prop = JsonSchema({"type": typ}) elif typ: diff --git a/tests/linkml/test_biolink_model/__snapshots__/biolink.schema.json b/tests/linkml/test_biolink_model/__snapshots__/biolink.schema.json index 98581ec002..0cbae5182d 100644 --- a/tests/linkml/test_biolink_model/__snapshots__/biolink.schema.json +++ b/tests/linkml/test_biolink_model/__snapshots__/biolink.schema.json @@ -3031,7 +3031,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -3210,7 +3217,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -5064,7 +5078,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -5243,7 +5264,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -5555,7 +5583,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -5701,7 +5736,14 @@ ] }, "subject_aspect_qualifier": { - "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum", + "anyOf": [ + { + "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept. The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association. This qualifier specifies a change in the subject of an association (aka: statement).", "examples": [ "stability", @@ -5746,7 +5788,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -6299,7 +6348,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -6467,7 +6523,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -7234,7 +7297,14 @@ ] }, "causal_mechanism_qualifier": { - "$ref": "#/$defs/CausalMechanismQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/CausalMechanismQualifierEnum" + }, + { + "type": "null" + } + ], "description": "A statement qualifier representing a type of molecular control mechanism through which an effect of a chemical on a gene or gene product is mediated (e.g. 'agonism', 'inhibition', 'allosteric modulation', 'channel blocker')" }, "deprecated": { @@ -7327,7 +7397,14 @@ "description": "connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object." }, "object_aspect_qualifier": { - "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum", + "anyOf": [ + { + "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept. The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association. This qualifier specifies a change in the object of an association (aka: statement).", "examples": [ "stability", @@ -7384,11 +7461,25 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_form_or_variant_qualifier": { - "$ref": "#/$defs/ChemicalOrGeneOrGeneProductFormOrVariantEnum", + "anyOf": [ + { + "$ref": "#/$defs/ChemicalOrGeneOrGeneProductFormOrVariantEnum" + }, + { + "type": "null" + } + ], "description": "A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier \u2018mutation\u2019 combines with the core concept \u2018Gene X\u2019 to express the compose concept \u2018a mutation of Gene X\u2019. This qualifier specifies a change in the object of an association (aka: statement).", "examples": [ "mutation", @@ -7425,7 +7516,14 @@ ] }, "object_part_qualifier": { - "$ref": "#/$defs/GeneOrGeneProductOrChemicalPartQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/GeneOrGeneProductOrChemicalPartQualifierEnum" + }, + { + "type": "null" + } + ], "description": "defines a specific part/component of the core concept (used in cases there this specific part has no IRI we can use to directly represent it, e.g. 'ESR1 transcript' q: polyA tail). This qualifier is for the object of an association (or statement)." }, "original_object": { @@ -7542,7 +7640,14 @@ "type": "string" }, "subject_aspect_qualifier": { - "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum", + "anyOf": [ + { + "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept. The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association. This qualifier specifies a change in the subject of an association (aka: statement).", "examples": [ "stability", @@ -7593,18 +7698,39 @@ ] }, "subject_derivative_qualifier": { - "$ref": "#/$defs/ChemicalEntityDerivativeEnum", + "anyOf": [ + { + "$ref": "#/$defs/ChemicalEntityDerivativeEnum" + }, + { + "type": "null" + } + ], "description": "A qualifier that composes with a core subject/object concept to describe something that is derived from the core concept. For example, the qualifier \u2018metabolite\u2019 combines with a \u2018Chemical X\u2019 core concept to express the composed concept \u2018a metabolite of Chemical X\u2019. This qualifier is for the subject of an association (or statement).", "examples": [ "metabolite" ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_form_or_variant_qualifier": { - "$ref": "#/$defs/ChemicalOrGeneOrGeneProductFormOrVariantEnum", + "anyOf": [ + { + "$ref": "#/$defs/ChemicalOrGeneOrGeneProductFormOrVariantEnum" + }, + { + "type": "null" + } + ], "description": "A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier \u2018mutation\u2019 combines with the core concept \u2018Gene X\u2019 to express the compose concept \u2018a mutation of Gene X\u2019. This qualifier specifies a change in the subject of an association (aka: statement).", "examples": [ "mutation", @@ -7640,7 +7766,14 @@ ] }, "subject_part_qualifier": { - "$ref": "#/$defs/GeneOrGeneProductOrChemicalPartQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/GeneOrGeneProductOrChemicalPartQualifierEnum" + }, + { + "type": "null" + } + ], "description": "defines a specific part/component of the core concept (used in cases there this specific part has no IRI we can use to directly represent it, e.g. 'ESR1 transcript' q: polyA tail). This qualifier is for the subject of an association (or statement)." }, "timepoint": { @@ -8386,7 +8519,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -8951,7 +9091,14 @@ ] }, "object_form_or_variant_qualifier": { - "$ref": "#/$defs/ChemicalOrGeneOrGeneProductFormOrVariantEnum", + "anyOf": [ + { + "$ref": "#/$defs/ChemicalOrGeneOrGeneProductFormOrVariantEnum" + }, + { + "type": "null" + } + ], "description": "A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier \u2018mutation\u2019 combines with the core concept \u2018Gene X\u2019 to express the compose concept \u2018a mutation of Gene X\u2019. This qualifier specifies a change in the object of an association (aka: statement).", "examples": [ "mutation", @@ -8988,7 +9135,14 @@ ] }, "object_part_qualifier": { - "$ref": "#/$defs/GeneOrGeneProductOrChemicalPartQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/GeneOrGeneProductOrChemicalPartQualifierEnum" + }, + { + "type": "null" + } + ], "description": "defines a specific part/component of the core concept (used in cases there this specific part has no IRI we can use to directly represent it, e.g. 'ESR1 transcript' q: polyA tail). This qualifier is for the object of an association (or statement)." }, "original_object": { @@ -9119,14 +9273,28 @@ ] }, "subject_derivative_qualifier": { - "$ref": "#/$defs/ChemicalEntityDerivativeEnum", + "anyOf": [ + { + "$ref": "#/$defs/ChemicalEntityDerivativeEnum" + }, + { + "type": "null" + } + ], "description": "A qualifier that composes with a core subject/object concept to describe something that is derived from the core concept. For example, the qualifier \u2018metabolite\u2019 combines with a \u2018Chemical X\u2019 core concept to express the composed concept \u2018a metabolite of Chemical X\u2019. This qualifier is for the subject of an association (or statement).", "examples": [ "metabolite" ] }, "subject_form_or_variant_qualifier": { - "$ref": "#/$defs/ChemicalOrGeneOrGeneProductFormOrVariantEnum", + "anyOf": [ + { + "$ref": "#/$defs/ChemicalOrGeneOrGeneProductFormOrVariantEnum" + }, + { + "type": "null" + } + ], "description": "A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier \u2018mutation\u2019 combines with the core concept \u2018Gene X\u2019 to express the compose concept \u2018a mutation of Gene X\u2019. This qualifier specifies a change in the subject of an association (aka: statement).", "examples": [ "mutation", @@ -9162,7 +9330,14 @@ ] }, "subject_part_qualifier": { - "$ref": "#/$defs/GeneOrGeneProductOrChemicalPartQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/GeneOrGeneProductOrChemicalPartQualifierEnum" + }, + { + "type": "null" + } + ], "description": "defines a specific part/component of the core concept (used in cases there this specific part has no IRI we can use to directly represent it, e.g. 'ESR1 transcript' q: polyA tail). This qualifier is for the subject of an association (or statement)." }, "timepoint": { @@ -9234,7 +9409,14 @@ ] }, "drug_regulatory_status_world_wide": { - "$ref": "#/$defs/ApprovalStatusEnum", + "anyOf": [ + { + "$ref": "#/$defs/ApprovalStatusEnum" + }, + { + "type": "null" + } + ], "description": "An agglomeration of drug regulatory status worldwide. Not specific to FDA." }, "full_name": { @@ -9265,7 +9447,14 @@ ] }, "highest_FDA_approval_status": { - "$ref": "#/$defs/ApprovalStatusEnum", + "anyOf": [ + { + "$ref": "#/$defs/ApprovalStatusEnum" + }, + { + "type": "null" + } + ], "description": "Should be the highest level of FDA approval this chemical entity or device has, regardless of which disease, condition or phenotype it is currently being reviewed to treat. For specific levels of FDA approval for a specific condition, disease, phenotype, etc., see the association slot, 'clinical approval status.'" }, "id": { @@ -9382,7 +9571,14 @@ "description": "This association defines a relationship between a chemical or treatment (or procedure) and a disease or phenotypic feature where the disesae or phenotypic feature is a secondary, typically (but not always) undesirable effect.", "properties": { "FDA_adverse_event_level": { - "$ref": "#/$defs/FDAIDAAdverseEventEnum", + "anyOf": [ + { + "$ref": "#/$defs/FDAIDAAdverseEventEnum" + }, + { + "type": "null" + } + ], "description": "" }, "adjusted_p_value": { @@ -9591,7 +9787,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -9759,7 +9962,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -9822,7 +10032,14 @@ "description": "This association defines a relationship between a chemical or treatment (or procedure) and a disease or phenotypic feature where the disease or phenotypic feature is a secondary undesirable effect.", "properties": { "FDA_adverse_event_level": { - "$ref": "#/$defs/FDAIDAAdverseEventEnum", + "anyOf": [ + { + "$ref": "#/$defs/FDAIDAAdverseEventEnum" + }, + { + "type": "null" + } + ], "description": "" }, "adjusted_p_value": { @@ -10031,7 +10248,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -10199,7 +10423,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -13631,7 +13862,14 @@ ] }, "drug_regulatory_status_world_wide": { - "$ref": "#/$defs/ApprovalStatusEnum", + "anyOf": [ + { + "$ref": "#/$defs/ApprovalStatusEnum" + }, + { + "type": "null" + } + ], "description": "An agglomeration of drug regulatory status worldwide. Not specific to FDA." }, "full_name": { @@ -13662,7 +13900,14 @@ ] }, "highest_FDA_approval_status": { - "$ref": "#/$defs/ApprovalStatusEnum", + "anyOf": [ + { + "$ref": "#/$defs/ApprovalStatusEnum" + }, + { + "type": "null" + } + ], "description": "Should be the highest level of FDA approval this chemical entity or device has, regardless of which disease, condition or phenotype it is currently being reviewed to treat. For specific levels of FDA approval for a specific condition, disease, phenotype, etc., see the association slot, 'clinical approval status.'" }, "id": { @@ -14664,7 +14909,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -14810,7 +15062,14 @@ ] }, "subject_aspect_qualifier": { - "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum", + "anyOf": [ + { + "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept. The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association. This qualifier specifies a change in the subject of an association (aka: statement).", "examples": [ "stability", @@ -14855,7 +15114,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -17567,7 +17833,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -17756,7 +18029,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -17860,7 +18140,14 @@ ] }, "drug_regulatory_status_world_wide": { - "$ref": "#/$defs/ApprovalStatusEnum", + "anyOf": [ + { + "$ref": "#/$defs/ApprovalStatusEnum" + }, + { + "type": "null" + } + ], "description": "An agglomeration of drug regulatory status worldwide. Not specific to FDA." }, "full_name": { @@ -17891,7 +18178,14 @@ ] }, "highest_FDA_approval_status": { - "$ref": "#/$defs/ApprovalStatusEnum", + "anyOf": [ + { + "$ref": "#/$defs/ApprovalStatusEnum" + }, + { + "type": "null" + } + ], "description": "Should be the highest level of FDA approval this chemical entity or device has, regardless of which disease, condition or phenotype it is currently being reviewed to treat. For specific levels of FDA approval for a specific condition, disease, phenotype, etc., see the association slot, 'clinical approval status.'" }, "id": { @@ -19151,7 +19445,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -19288,7 +19589,14 @@ ] }, "subject_aspect_qualifier": { - "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum", + "anyOf": [ + { + "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept. The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association. This qualifier specifies a change in the subject of an association (aka: statement).", "examples": [ "stability", @@ -19333,7 +19641,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -19518,7 +19833,14 @@ ] }, "clinical_approval_status": { - "$ref": "#/$defs/ClinicalApprovalStatusEnum", + "anyOf": [ + { + "$ref": "#/$defs/ClinicalApprovalStatusEnum" + }, + { + "type": "null" + } + ], "description": "" }, "deprecated": { @@ -19593,7 +19915,14 @@ ] }, "max_research_phase": { - "$ref": "#/$defs/ResearchPhaseEnum" + "anyOf": [ + { + "$ref": "#/$defs/ResearchPhaseEnum" + }, + { + "type": "null" + } + ] }, "name": { "description": "A human-readable name for an attribute or entity.", @@ -19893,7 +20222,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "predicate": { @@ -19925,7 +20261,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." } }, @@ -20031,7 +20374,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "predicate": { @@ -20063,7 +20413,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." } }, @@ -20145,7 +20502,14 @@ ] }, "clinical_approval_status": { - "$ref": "#/$defs/ClinicalApprovalStatusEnum", + "anyOf": [ + { + "$ref": "#/$defs/ClinicalApprovalStatusEnum" + }, + { + "type": "null" + } + ], "description": "" }, "deprecated": { @@ -20220,7 +20584,14 @@ ] }, "max_research_phase": { - "$ref": "#/$defs/ResearchPhaseEnum" + "anyOf": [ + { + "$ref": "#/$defs/ResearchPhaseEnum" + }, + { + "type": "null" + } + ] }, "name": { "description": "A human-readable name for an attribute or entity.", @@ -20560,7 +20931,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_specialization_qualifier": { @@ -20606,7 +20984,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_specialization_qualifier": { @@ -22557,7 +22942,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -22736,7 +23128,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -22841,7 +23240,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "predicate": { @@ -22873,7 +23279,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." } }, @@ -22924,7 +23337,14 @@ ] }, "drug_regulatory_status_world_wide": { - "$ref": "#/$defs/ApprovalStatusEnum", + "anyOf": [ + { + "$ref": "#/$defs/ApprovalStatusEnum" + }, + { + "type": "null" + } + ], "description": "An agglomeration of drug regulatory status worldwide. Not specific to FDA." }, "full_name": { @@ -22955,7 +23375,14 @@ ] }, "highest_FDA_approval_status": { - "$ref": "#/$defs/ApprovalStatusEnum", + "anyOf": [ + { + "$ref": "#/$defs/ApprovalStatusEnum" + }, + { + "type": "null" + } + ], "description": "Should be the highest level of FDA approval this chemical entity or device has, regardless of which disease, condition or phenotype it is currently being reviewed to treat. For specific levels of FDA approval for a specific condition, disease, phenotype, etc., see the association slot, 'clinical approval status.'" }, "id": { @@ -23983,7 +24410,14 @@ ] }, "causal_mechanism_qualifier": { - "$ref": "#/$defs/CausalMechanismQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/CausalMechanismQualifierEnum" + }, + { + "type": "null" + } + ], "description": "A statement qualifier representing a type of molecular control mechanism through which an effect of a chemical on a gene or gene product is mediated (e.g. 'agonism', 'inhibition', 'allosteric modulation', 'channel blocker')" }, "deprecated": { @@ -24076,7 +24510,14 @@ "type": "string" }, "object_aspect_qualifier": { - "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum", + "anyOf": [ + { + "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept. The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association. This qualifier specifies a change in the object of an association (aka: statement).", "examples": [ "stability", @@ -24133,18 +24574,39 @@ ] }, "object_derivative_qualifier": { - "$ref": "#/$defs/ChemicalEntityDerivativeEnum", + "anyOf": [ + { + "$ref": "#/$defs/ChemicalEntityDerivativeEnum" + }, + { + "type": "null" + } + ], "description": "A qualifier that composes with a core subject/object concept to describe something that is derived from the core concept. For example, the qualifier \u2018metabolite\u2019 combines with a \u2018Chemical X\u2019 core concept to express the composed concept \u2018a metabolite of Chemical X\u2019. This qualifier is for the object of an association (or statement).", "examples": [ "metabolite" ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_form_or_variant_qualifier": { - "$ref": "#/$defs/ChemicalOrGeneOrGeneProductFormOrVariantEnum", + "anyOf": [ + { + "$ref": "#/$defs/ChemicalOrGeneOrGeneProductFormOrVariantEnum" + }, + { + "type": "null" + } + ], "description": "A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier \u2018mutation\u2019 combines with the core concept \u2018Gene X\u2019 to express the compose concept \u2018a mutation of Gene X\u2019. This qualifier specifies a change in the object of an association (aka: statement).", "examples": [ "mutation", @@ -24181,7 +24643,14 @@ ] }, "object_part_qualifier": { - "$ref": "#/$defs/GeneOrGeneProductOrChemicalPartQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/GeneOrGeneProductOrChemicalPartQualifierEnum" + }, + { + "type": "null" + } + ], "description": "defines a specific part/component of the core concept (used in cases there this specific part has no IRI we can use to directly represent it, e.g. 'ESR1 transcript' q: polyA tail). This qualifier is for the object of an association (or statement)." }, "original_object": { @@ -24298,7 +24767,14 @@ "description": "connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object." }, "subject_aspect_qualifier": { - "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum", + "anyOf": [ + { + "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept. The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association. This qualifier specifies a change in the subject of an association (aka: statement).", "examples": [ "stability", @@ -24359,11 +24835,25 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_form_or_variant_qualifier": { - "$ref": "#/$defs/ChemicalOrGeneOrGeneProductFormOrVariantEnum", + "anyOf": [ + { + "$ref": "#/$defs/ChemicalOrGeneOrGeneProductFormOrVariantEnum" + }, + { + "type": "null" + } + ], "description": "A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier \u2018mutation\u2019 combines with the core concept \u2018Gene X\u2019 to express the compose concept \u2018a mutation of Gene X\u2019. This qualifier specifies a change in the subject of an association (aka: statement).", "examples": [ "mutation", @@ -24399,7 +24889,14 @@ ] }, "subject_part_qualifier": { - "$ref": "#/$defs/GeneOrGeneProductOrChemicalPartQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/GeneOrGeneProductOrChemicalPartQualifierEnum" + }, + { + "type": "null" + } + ], "description": "defines a specific part/component of the core concept (used in cases there this specific part has no IRI we can use to directly represent it, e.g. 'ESR1 transcript' q: polyA tail). This qualifier is for the subject of an association (or statement)." }, "timepoint": { @@ -24679,7 +25176,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -24816,7 +25320,14 @@ ] }, "subject_aspect_qualifier": { - "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum", + "anyOf": [ + { + "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept. The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association. This qualifier specifies a change in the subject of an association (aka: statement).", "examples": [ "stability", @@ -24861,7 +25372,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -25370,7 +25888,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -25508,7 +26033,14 @@ ] }, "subject_aspect_qualifier": { - "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum", + "anyOf": [ + { + "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept. The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association. This qualifier specifies a change in the subject of an association (aka: statement).", "examples": [ "stability", @@ -25553,7 +26085,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_form_or_variant_qualifier": { @@ -26447,7 +26986,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -26593,7 +27139,14 @@ ] }, "subject_aspect_qualifier": { - "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum", + "anyOf": [ + { + "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept. The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association. This qualifier specifies a change in the subject of an association (aka: statement).", "examples": [ "stability", @@ -26638,7 +27191,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -26952,7 +27512,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -27098,7 +27665,14 @@ ] }, "subject_aspect_qualifier": { - "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum", + "anyOf": [ + { + "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept. The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association. This qualifier specifies a change in the subject of an association (aka: statement).", "examples": [ "stability", @@ -27143,7 +27717,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -30520,7 +31101,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -30666,7 +31254,14 @@ ] }, "subject_aspect_qualifier": { - "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum", + "anyOf": [ + { + "$ref": "#/$defs/GeneOrGeneProductOrChemicalEntityAspectEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept. The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association. This qualifier specifies a change in the subject of an association (aka: statement).", "examples": [ "stability", @@ -30711,7 +31306,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -31292,7 +31894,14 @@ ] }, "genome_build": { - "$ref": "#/$defs/StrandEnum", + "anyOf": [ + { + "$ref": "#/$defs/StrandEnum" + }, + { + "type": "null" + } + ], "description": "The version of the genome on which a feature is located. For example, GRCh38 for Homo sapiens." }, "has_attribute": { @@ -31466,7 +32075,14 @@ ] }, "phase": { - "$ref": "#/$defs/PhaseEnum", + "anyOf": [ + { + "$ref": "#/$defs/PhaseEnum" + }, + { + "type": "null" + } + ], "description": "The phase for a coding sequence entity. For example, phase of a CDS as represented in a GFF3 with a value of 0, 1 or 2." }, "predicate": { @@ -31528,7 +32144,14 @@ ] }, "strand": { - "$ref": "#/$defs/StrandEnum", + "anyOf": [ + { + "$ref": "#/$defs/StrandEnum" + }, + { + "type": "null" + } + ], "description": "The strand on which a feature is located. Has a value of '+' (sense strand or forward strand) or '-' (anti-sense strand or reverse strand)." }, "subject": { @@ -31974,7 +32597,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -32142,7 +32772,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -32409,7 +33046,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -32577,7 +33221,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -33652,7 +34303,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -33834,7 +34492,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -40565,7 +41230,14 @@ ] }, "drug_regulatory_status_world_wide": { - "$ref": "#/$defs/ApprovalStatusEnum", + "anyOf": [ + { + "$ref": "#/$defs/ApprovalStatusEnum" + }, + { + "type": "null" + } + ], "description": "An agglomeration of drug regulatory status worldwide. Not specific to FDA." }, "full_name": { @@ -40596,7 +41268,14 @@ ] }, "highest_FDA_approval_status": { - "$ref": "#/$defs/ApprovalStatusEnum", + "anyOf": [ + { + "$ref": "#/$defs/ApprovalStatusEnum" + }, + { + "type": "null" + } + ], "description": "Should be the highest level of FDA approval this chemical entity or device has, regardless of which disease, condition or phenotype it is currently being reviewed to treat. For specific levels of FDA approval for a specific condition, disease, phenotype, etc., see the association slot, 'clinical approval status.'" }, "id": { @@ -44599,7 +45278,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -44767,7 +45453,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -47030,7 +47723,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -47231,7 +47931,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -47345,7 +48052,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "predicate": { @@ -47389,7 +48103,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." } }, @@ -47650,7 +48371,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -47834,7 +48562,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -49459,7 +50194,14 @@ ] }, "causal_mechanism_qualifier": { - "$ref": "#/$defs/CausalMechanismQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/CausalMechanismQualifierEnum" + }, + { + "type": "null" + } + ], "description": "A statement qualifier representing a type of molecular control mechanism through which an effect of a chemical on a gene or gene product is mediated (e.g. 'agonism', 'inhibition', 'allosteric modulation', 'channel blocker')" }, "exact_match": { @@ -49519,7 +50261,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_form_or_variant_qualifier": { @@ -49595,7 +50344,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_form_or_variant_qualifier": { @@ -50339,7 +51095,14 @@ ] }, "drug_regulatory_status_world_wide": { - "$ref": "#/$defs/ApprovalStatusEnum", + "anyOf": [ + { + "$ref": "#/$defs/ApprovalStatusEnum" + }, + { + "type": "null" + } + ], "description": "An agglomeration of drug regulatory status worldwide. Not specific to FDA." }, "full_name": { @@ -50370,7 +51133,14 @@ ] }, "highest_FDA_approval_status": { - "$ref": "#/$defs/ApprovalStatusEnum", + "anyOf": [ + { + "$ref": "#/$defs/ApprovalStatusEnum" + }, + { + "type": "null" + } + ], "description": "Should be the highest level of FDA approval this chemical entity or device has, regardless of which disease, condition or phenotype it is currently being reviewed to treat. For specific levels of FDA approval for a specific condition, disease, phenotype, etc., see the association slot, 'clinical approval status.'" }, "id": { @@ -51758,11 +52528,25 @@ ] }, "reaction_direction": { - "$ref": "#/$defs/ReactionDirectionEnum", + "anyOf": [ + { + "$ref": "#/$defs/ReactionDirectionEnum" + }, + { + "type": "null" + } + ], "description": "the direction of a reaction as constrained by the direction enum (ie: left_to_right, neutral, etc.)" }, "reaction_side": { - "$ref": "#/$defs/ReactionSideEnum", + "anyOf": [ + { + "$ref": "#/$defs/ReactionSideEnum" + }, + { + "type": "null" + } + ], "description": "the side of a reaction being modeled (ie: left or right)" }, "retrieval_source_ids": { @@ -52143,11 +52927,25 @@ ] }, "reaction_direction": { - "$ref": "#/$defs/ReactionDirectionEnum", + "anyOf": [ + { + "$ref": "#/$defs/ReactionDirectionEnum" + }, + { + "type": "null" + } + ], "description": "the direction of a reaction as constrained by the direction enum (ie: left_to_right, neutral, etc.)" }, "reaction_side": { - "$ref": "#/$defs/ReactionSideEnum", + "anyOf": [ + { + "$ref": "#/$defs/ReactionSideEnum" + }, + { + "type": "null" + } + ], "description": "the side of a reaction being modeled (ie: left or right)" }, "retrieval_source_ids": { @@ -57256,7 +58054,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -57427,7 +58232,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -57694,7 +58506,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -57865,7 +58684,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { @@ -59000,7 +59826,14 @@ ] }, "object_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement)." }, "object_label_closure": { @@ -59183,7 +60016,14 @@ ] }, "subject_direction_qualifier": { - "$ref": "#/$defs/DirectionQualifierEnum", + "anyOf": [ + { + "$ref": "#/$defs/DirectionQualifierEnum" + }, + { + "type": "null" + } + ], "description": "Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement)." }, "subject_label_closure": { diff --git a/tests/linkml/test_compliance/helper.py b/tests/linkml/test_compliance/helper.py index 3d069d8843..f3a8da29bc 100644 --- a/tests/linkml/test_compliance/helper.py +++ b/tests/linkml/test_compliance/helper.py @@ -752,6 +752,7 @@ def check_data( description: str = None, coerced: dict = None, exclude_rdf=False, + strip_nulls: bool = True, ): """ Validate the given object against the given schema using the given framework. @@ -771,6 +772,8 @@ def check_data( :param target_class: the type of the object :param description: description of this particular test combination :param coerced: Dict representation of repaired/coerced form of object + :param strip_nulls: if True (default), remove null-valued keys before plugin-based + validation (jsonschema, shacl); set to False to test explicit null handling :return: """ out_dir = _schema_out_path(schema) @@ -937,7 +940,8 @@ def check_data( # errors = list(validator.iter_validate_dict(_clean_dict(object_to_validate), target_class, closed=True)) try: - errors = list(validator.iter_results(clean_null_terms(object_to_validate), target_class)) + cleaned_object = clean_null_terms(object_to_validate) if strip_nulls else object_to_validate + errors = list(validator.iter_results(cleaned_object, target_class)) except Exception as e: errors = [e] logger.info(f"Expecting {valid}, Validating {object_to_validate} against {target_class}, errors: {errors}") diff --git a/tests/linkml/test_compliance/test_enum_compliance.py b/tests/linkml/test_compliance/test_enum_compliance.py index cd582b9f90..be6eebeb46 100644 --- a/tests/linkml/test_compliance/test_enum_compliance.py +++ b/tests/linkml/test_compliance/test_enum_compliance.py @@ -24,7 +24,15 @@ generate_tree, validated_schema, ) -from tests.linkml.test_compliance.test_compliance import CLASS_C, CORE_FRAMEWORKS, ENUM_E, EXAMPLE_NS, SLOT_S1 +from tests.linkml.test_compliance.test_compliance import ( + CLASS_C, + CORE_FRAMEWORKS, + ENUM_E, + EXAMPLE_NS, + PV_1, + PV_2, + SLOT_S1, +) @feature_category("Enumerations", "Static enums") @@ -454,3 +462,67 @@ def _make_pv(_pv_name, pv_meaning=None, pv_description=None): expected_behavior=expected_behavior, description=data_name, ) + + +@feature_category("Enumerations", "Optional enum nullability") +@pytest.mark.parametrize( + "data_name,data,is_valid", + [ + ("present", {SLOT_S1: PV_1}, True), + ("absent", {}, True), + ("explicit_null", {SLOT_S1: None}, True), + ("invalid_value", {SLOT_S1: "not_a_pv"}, False), + ], +) +@pytest.mark.parametrize("framework", CORE_FRAMEWORKS) +def test_optional_enum_slot_nullability(framework, data_name, data, is_valid): + """ + Tests that an optional (required: false) enum slot accepts an absent key or an explicit null value. + + Non-required slots of other ranges (types, classes) already accept explicit nulls; enum + ranges should behave consistently. + + References: + - https://github.com/linkml/linkml/issues/3736 + - https://github.com/linkml/linkml/issues/2155 + + :param framework: generator framework to check + :param data_name: unique label for the data case + :param data: object to validate + :param is_valid: whether the object is expected to be valid + """ + classes = { + CLASS_C: { + "attributes": { + SLOT_S1: { + "range": ENUM_E, + "required": False, + }, + } + }, + } + enums = { + ENUM_E: { + "permissible_values": {PV_1: {}, PV_2: {}}, + } + } + schema = validated_schema( + test_optional_enum_slot_nullability, + "optional_enum", + framework, + classes=classes, + enums=enums, + core_elements=["enum_definitions", "permissible_values", "required"], + ) + expected_behavior = ValidationBehavior.IMPLEMENTS + check_data( + schema, + data_name, + framework, + data, + is_valid, + target_class=CLASS_C, + expected_behavior=expected_behavior, + description=data_name, + strip_nulls=False, + ) diff --git a/tests/linkml/test_generators/input/not_required.yaml b/tests/linkml/test_generators/input/not_required.yaml index 8c489e74d9..8f4c9b467f 100644 --- a/tests/linkml/test_generators/input/not_required.yaml +++ b/tests/linkml/test_generators/input/not_required.yaml @@ -15,6 +15,8 @@ classes: slots: - scalar - multi + - enum_range + - enum_range_multivalued - is_inlined_as_list - is_inlined_as_dict - is_any_of @@ -49,6 +51,12 @@ classes: range: string required: true +enums: + StatusEnum: + permissible_values: + active: + inactive: + slots: scalar: range: string @@ -57,6 +65,13 @@ slots: range: integer multivalued: true required: false + enum_range: + range: StatusEnum + required: false + enum_range_multivalued: + range: StatusEnum + multivalued: true + required: false is_inlined_as_list: range: string inlined: true diff --git a/tests/linkml/test_generators/test_jsonschemagen.py b/tests/linkml/test_generators/test_jsonschemagen.py index 04ee3dbfd9..1cd039a96e 100644 --- a/tests/linkml/test_generators/test_jsonschemagen.py +++ b/tests/linkml/test_generators/test_jsonschemagen.py @@ -381,6 +381,7 @@ def test_slot_not_required_nullability(input_path, not_closed): References: - https://github.com/linkml/linkml/issues/2155 + - https://github.com/linkml/linkml/issues/3736 """ schema = input_path("not_required.yaml") generator = JsonSchemaGenerator(schema, mergeimports=True, top_class="Optionals", not_closed=not_closed) @@ -391,6 +392,11 @@ def test_slot_not_required_nullability(input_path, not_closed): assert "null" in prop["type"], f"{key} does not allow null" elif "anyOf" in prop: assert {"type": "null"} in prop["anyOf"], f"{key} does not allow null" + else: + pytest.fail(f"{key} has neither 'type' nor 'anyOf', so it cannot allow null: {prop}") + + # nullability of an optional multivalued enum slot applies to the array, not its elements + assert properties["enum_range_multivalued"]["items"] == {"$ref": "#/$defs/StatusEnum"} def test_lifecycle_classes(kitchen_sink_path): diff --git a/tests/linkml/test_scripts/__snapshots__/genjsonschema/meta.json b/tests/linkml/test_scripts/__snapshots__/genjsonschema/meta.json index b115f96bca..44664f2e1c 100644 --- a/tests/linkml/test_scripts/__snapshots__/genjsonschema/meta.json +++ b/tests/linkml/test_scripts/__snapshots__/genjsonschema/meta.json @@ -271,7 +271,14 @@ "type": "string" }, "long_id": { - "$ref": "#/$defs/LongEnum" + "anyOf": [ + { + "$ref": "#/$defs/LongEnum" + }, + { + "type": "null" + } + ] }, "name": { "type": [ @@ -607,7 +614,14 @@ "description": "", "properties": { "cordialness": { - "$ref": "#/$defs/CordialnessEnum" + "anyOf": [ + { + "$ref": "#/$defs/CordialnessEnum" + }, + { + "type": "null" + } + ] }, "ended_at_time": { "format": "date", @@ -946,7 +960,14 @@ "type": "string" }, "is_living": { - "$ref": "#/$defs/LifeStatusEnum" + "anyOf": [ + { + "$ref": "#/$defs/LifeStatusEnum" + }, + { + "type": "null" + } + ] }, "name": { "pattern": "^\\S+ \\S+$", @@ -1037,7 +1058,14 @@ "description": "", "properties": { "cordialness": { - "$ref": "#/$defs/CordialnessEnum" + "anyOf": [ + { + "$ref": "#/$defs/CordialnessEnum" + }, + { + "type": "null" + } + ] }, "ended_at_time": { "format": "date", diff --git a/tests/linkml/test_scripts/__snapshots__/genjsonschema/meta_inline.json b/tests/linkml/test_scripts/__snapshots__/genjsonschema/meta_inline.json index b115f96bca..44664f2e1c 100644 --- a/tests/linkml/test_scripts/__snapshots__/genjsonschema/meta_inline.json +++ b/tests/linkml/test_scripts/__snapshots__/genjsonschema/meta_inline.json @@ -271,7 +271,14 @@ "type": "string" }, "long_id": { - "$ref": "#/$defs/LongEnum" + "anyOf": [ + { + "$ref": "#/$defs/LongEnum" + }, + { + "type": "null" + } + ] }, "name": { "type": [ @@ -607,7 +614,14 @@ "description": "", "properties": { "cordialness": { - "$ref": "#/$defs/CordialnessEnum" + "anyOf": [ + { + "$ref": "#/$defs/CordialnessEnum" + }, + { + "type": "null" + } + ] }, "ended_at_time": { "format": "date", @@ -946,7 +960,14 @@ "type": "string" }, "is_living": { - "$ref": "#/$defs/LifeStatusEnum" + "anyOf": [ + { + "$ref": "#/$defs/LifeStatusEnum" + }, + { + "type": "null" + } + ] }, "name": { "pattern": "^\\S+ \\S+$", @@ -1037,7 +1058,14 @@ "description": "", "properties": { "cordialness": { - "$ref": "#/$defs/CordialnessEnum" + "anyOf": [ + { + "$ref": "#/$defs/CordialnessEnum" + }, + { + "type": "null" + } + ] }, "ended_at_time": { "format": "date", From c6f87a5afeef2a7780755f647bb016e80dfa3d10 Mon Sep 17 00:00:00 2001 From: N <13322818+noelmcloughlin@users.noreply.github.com> Date: Fri, 17 Jul 2026 12:06:57 +0100 Subject: [PATCH 15/72] fix(oogen): update abstract signature (#3775) --- packages/linkml/src/linkml/generators/oocodegen.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/linkml/src/linkml/generators/oocodegen.py b/packages/linkml/src/linkml/generators/oocodegen.py index 050c58f7a7..120fb3131b 100644 --- a/packages/linkml/src/linkml/generators/oocodegen.py +++ b/packages/linkml/src/linkml/generators/oocodegen.py @@ -128,7 +128,13 @@ def __post_init__(self): super().__post_init__() @abc.abstractmethod - def serialize(self, directory: str) -> None: + def serialize(self, directory: str | None = None, **kwargs) -> str | None: + """Serialize the schema to generated code. + + Single-file generators return the generated code as a ``str``; + multi-file generators (e.g. javagen) write one file per class + into ``directory`` and return ``None``. + """ raise NotImplementedError("Not implemented.") @abc.abstractmethod From 7a60df7e2b1c324a4f3aee9afdc31b2c9e91b3f3 Mon Sep 17 00:00:00 2001 From: N <13322818+noelmcloughlin@users.noreply.github.com> Date: Fri, 17 Jul 2026 12:22:31 +0100 Subject: [PATCH 16/72] feat(javagen): add javabundle dataclass, serialize and render (#3756) * feat(javagen): add javabundle, render, then serialize * chore(javagen): tidyup generator.serialize -> none contract --- .../linkml/src/linkml/generators/javagen.py | 84 +++++++++++++++++-- tests/linkml/test_generators/test_javagen.py | 72 +++++++++++++++- 2 files changed, 146 insertions(+), 10 deletions(-) diff --git a/packages/linkml/src/linkml/generators/javagen.py b/packages/linkml/src/linkml/generators/javagen.py index 068c9e0a04..56a56b0d52 100644 --- a/packages/linkml/src/linkml/generators/javagen.py +++ b/packages/linkml/src/linkml/generators/javagen.py @@ -101,6 +101,25 @@ def __post_init__(self): self.type = "_visitor" +@dataclass +class JavaBundle: + """In-memory result of rendering a LinkML schema to Java source. + + A ``JavaBundle`` is the output of :meth:`JavaGenerator.render`. It carries + the rendered Java source for every file that would be written to disk by + :meth:`JavaGenerator.serialize`, keyed by filename. + + Mirrors render/serialize split used by `rustgen.RustGenerator` (FileResult / + CrateResult) and `pydanticgen.PydanticGenerator` (PydanticModule). + """ + + files: dict[str, str] = field(default_factory=dict) + """Rendered Java source, keyed by filename (e.g. ``"Address.java"``).""" + + package: str = "" + """Java package name the rendered files belong to (informational).""" + + class TemplateCache: """Cache for template objects. @@ -242,17 +261,17 @@ def map_type(self, t: TypeDefinition, required: bool = False) -> str: else: raise ValueError(f"{t} cannot be mapped to a type") - def serialize( + def render( self, - directory: str, template_variant: str | None = None, extra_templates: list[str] | None = None, visitors: list[str] | None = None, - **kwargs, - ) -> None: - """Generate and write the Java code to files. + ) -> JavaBundle: + """Render the schema to an in-memory :class:`JavaBundle`. + + Pure counterpart of :meth:`serialize`: returns the rendered Java + source for every file without touching the filesystem. - :param directory: The directory where to write the code files. :param template_variant: The name of the template variant to use, if any. :param extra_templates: A list of additional templates from which to generate additional code files. For example, if set to `[Foo,Bar]`, this will @@ -266,6 +285,8 @@ def serialize( `IFooVisitor` interface, and the generated code for both the `Foo` class and all its descendants will include a `accept(IFooVisitor)` method. + :return: A :class:`JavaBundle` whose ``files`` maps each output filename + (e.g. ``"Address.java"``) to its rendered source. """ oodocs = self.create_documents() # Create additional documents for additional templates and visitors @@ -279,7 +300,8 @@ class and all its descendants will include a `accept(IFooVisitor)` oodocs.append(OOVisitorDocument(name=visitor_name, package=self.package, visited_object=visited_name)) else: visitors = [] - self.directory = directory + + files: dict[str, str] = {} for oodoc in oodocs: cls = None enum = None @@ -306,8 +328,52 @@ class and all its descendants will include a `accept(IFooVisitor)` model_version=self.schema.version, ) - os.makedirs(directory, exist_ok=True) - filename = f"{oodoc.name}.java" + files[f"{oodoc.name}.java"] = code + + return JavaBundle(files=files, package=self.package) + + def serialize( + self, + directory: str | Path, + template_variant: str | None = None, + extra_templates: list[str] | None = None, + visitors: list[str] | None = None, + rendered_module: JavaBundle | None = None, + **kwargs, + ) -> None: + """Generate the Java code and write it to ``directory``, one file per class. + + Java requires one public class per file, so there is no meaningful + single-string serialization of a schema; callers that want the + generated code in memory should use :meth:`render` and work from the + returned :class:`JavaBundle` instead. + + :param directory: The directory where to write the code files. + :param template_variant: The name of the template variant to use, if any. + Ignored when ``rendered_module`` is provided. + :param extra_templates: A list of additional templates from which to generate + additional code files. See :meth:`render` for details. Ignored when + ``rendered_module`` is provided. + :param visitors: A list of class names for which to generate a visitor + interface. See :meth:`render` for details. Ignored when + ``rendered_module`` is provided. + :param rendered_module: Optional pre-computed :class:`JavaBundle` to + write instead of calling :meth:`render` afresh. Allows caller to + render once and inspect/write multiple times. When supplied, + ``template_variant``, ``extra_templates``, and ``visitors`` + are ignored (the bundle is used as-is). + """ + bundle = ( + rendered_module + if rendered_module is not None + else self.render( + template_variant=template_variant, + extra_templates=extra_templates, + visitors=visitors, + ) + ) + os.makedirs(directory, exist_ok=True) + for filename, code in bundle.files.items(): path = os.path.join(directory, filename) with open(path, "w", encoding="UTF-8") as stream: stream.write(code) diff --git a/tests/linkml/test_generators/test_javagen.py b/tests/linkml/test_generators/test_javagen.py index 1620212066..e09ac34036 100644 --- a/tests/linkml/test_generators/test_javagen.py +++ b/tests/linkml/test_generators/test_javagen.py @@ -1,4 +1,6 @@ -from linkml.generators.javagen import JavaGenerator +import pytest + +from linkml.generators.javagen import JavaBundle, JavaGenerator from linkml.generators.oocodegen import OOEnum, OOEnumValue from tests.linkml.utils.fileutils import assert_file_contains @@ -228,3 +230,71 @@ def test_refined_ranges(input_path): # - ThirdDerivedFoo refines the slot compared to its parent SecondDerivedFoo; # this is the second refinement in the hierarchy since the defining class assert gen.get_refined_ranges("bar", "ThirdDerivedFoo", upwards=True) == ["FirstDerivedBar", "Bar"] + + +def test_render_returns_bundle(kitchen_sink_path, tmp_path): + """`render()` returns a `JavaBundle` with rendered files but touches no disk.""" + gen = JavaGenerator(kitchen_sink_path, package=PACKAGE) + bundle = gen.render() + + assert isinstance(bundle, JavaBundle) + assert bundle.package == PACKAGE + assert "Address.java" in bundle.files + address_code = bundle.files["Address.java"] + assert "public class Address" in address_code + assert f"package {PACKAGE}" in address_code + + # render() must not write anything to disk. + assert list(tmp_path.iterdir()) == [] + + +def test_render_template_variant(kitchen_sink_path): + """`render(template_variant=...)` is honoured (records variant here).""" + gen = JavaGenerator(kitchen_sink_path, package=PACKAGE) + bundle = gen.render(template_variant="records") + + assert "Address.java" in bundle.files + assert "public record Address(String street, String city, BigDecimal altitude)" in bundle.files["Address.java"] + + +def test_render_visitors(kitchen_sink_path): + """`render(visitors=[...])` emits the visitor interface and adds `accept()` to visited classes.""" + gen = JavaGenerator(kitchen_sink_path, package=PACKAGE) + bundle = gen.render(visitors=["Concept"]) + + assert "IConceptVisitor.java" in bundle.files + assert "public void visit(DiagnosisConcept visited);" in bundle.files["IConceptVisitor.java"] + # A class in the visited hierarchy carries the accept() method. + assert "ProcedureConcept.java" in bundle.files + assert "public void accept(IConceptVisitor visitor)" in bundle.files["ProcedureConcept.java"] + + +def test_render_true_enums(kitchen_sink_path): + """With `true_enums=True`, enum-typed files appear in the bundle.""" + gen = JavaGenerator(kitchen_sink_path, package=PACKAGE, true_enums=True) + bundle = gen.render() + + assert "CordialnessEnum.java" in bundle.files + assert "public enum CordialnessEnum" in bundle.files["CordialnessEnum.java"] + + +def test_serialize_accepts_rendered_module(kitchen_sink_path, tmp_path): + """Passing `rendered_module=` writes the given bundle as-is.""" + gen = JavaGenerator(kitchen_sink_path, package=PACKAGE) + bundle = gen.render() + bundle.files["Address.java"] = "// sentinel: pre-rendered bundle content" + + gen.serialize(directory=str(tmp_path), rendered_module=bundle) + + assert_file_contains(tmp_path / "Address.java", "// sentinel: pre-rendered bundle content") + + +@pytest.mark.parametrize("as_path", [False, True], ids=["str", "Path"]) +def test_serialize_accepts_str_or_path_directory(kitchen_sink_path, tmp_path, as_path): + """`directory` accepts both a ``str`` and a :class:`pathlib.Path`.""" + gen = JavaGenerator(kitchen_sink_path, package=PACKAGE) + directory = tmp_path if as_path else str(tmp_path) + + gen.serialize(directory=directory) + + assert_file_contains(tmp_path / "Address.java", "public class Address", after=f"package {PACKAGE}") From 977890bc3f97a6dbe2a00fbf5b585c63d8367389 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Fri, 17 Jul 2026 18:51:43 +0200 Subject: [PATCH 17/72] test(rdflib_loader): add dump-load round-trip test rdflib_loader had the same issue as rdflib_dumper. Fixing only the dumper creates RDF that cannot be loaded by the loader. This test reproduces the issue. Signed-off-by: Silvano Cirujano Cuesta --- .../test_rdflib_dumper.py | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/tests/linkml_runtime/test_loaders_dumpers/test_rdflib_dumper.py b/tests/linkml_runtime/test_loaders_dumpers/test_rdflib_dumper.py index d7f37c6264..2df96c656a 100644 --- a/tests/linkml_runtime/test_loaders_dumpers/test_rdflib_dumper.py +++ b/tests/linkml_runtime/test_loaders_dumpers/test_rdflib_dumper.py @@ -420,6 +420,26 @@ def test_phenopackets(prefix_map): assert len(list(g.objects(resource_uri))) == 1 +def test_rdflib_phenopackets_roundtrip(): + """Round-trip a phenopackets OntologyClass through dump then load. + + Uses a fresh SchemaView for the load (cold namespace cache) to verify + that the loader also resolves sub-schema prefixes after imports_closure(). + """ + schema_path = str(INPUT_PATH / "phenopackets" / "phenopackets.yaml") + view = SchemaView(schema_path) + c = OntologyClass(id="HP:1", label="test label") + ttl = rdflib_dumper.dumps(c, view) + g = Graph() + g.parse(data=ttl, format="ttl") + view2 = SchemaView(schema_path) + objs = rdflib_loader.from_rdf_graph(g, target_class=OntologyClass, schemaview=view2) + assert len(objs) == 1 + loaded = objs[0] + assert loaded.id == "HP:1" + assert loaded.label == "test label" + + def test_rdf_output(issue_429_graph): """Test RDF output for issue 429.""" g = issue_429_graph @@ -434,7 +454,7 @@ def test_rdf_output(issue_429_graph): def test_output_prefixes(issue_429_graph): - """Test output prefixes and key triples for issue 429. + """Test output namespace binding for issue 429. Assertions use the graph object and namespace manager directly rather than matching against the turtle serialisation string, so they are independent @@ -450,15 +470,6 @@ def test_output_prefixes(issue_429_graph): # http://schema.org/ may be serialised as sdo: or schema1: depending on the # semweb_context version; check the URI rather than the label. assert "http://schema.org/" in bound_uris - # Both persons must be typed and have their properties present. - for orcid_id, full_name, age in [ - ("1234", "Clark Kent", "32"), - ("4567", "Lois Lane", "33"), - ]: - subject = ORCID[orcid_id] - assert (subject, RDF.type, SDO.Person) in g - assert (subject, personinfo.age, Literal(age)) in g - assert (subject, personinfo.full_name, Literal(full_name)) in g def test_pydantic_model_dump(): From 31676d80ab25b3cdd30558d474af8e3add8bdf6d Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Fri, 17 Jul 2026 18:53:17 +0200 Subject: [PATCH 18/72] fix(rdflib_loader): fix symmetric to previous dumper fix rdflib_loader had the same issue as rdflib_dumper. Fixing only the dumper creates RDF that cannot be loaded by the loader. This patch fixes the loader. Signed-off-by: Silvano Cirujano Cuesta --- .../src/linkml_runtime/loaders/rdflib_loader.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/linkml_runtime/src/linkml_runtime/loaders/rdflib_loader.py b/packages/linkml_runtime/src/linkml_runtime/loaders/rdflib_loader.py index 90e39e7c2c..1f0c653fd8 100644 --- a/packages/linkml_runtime/src/linkml_runtime/loaders/rdflib_loader.py +++ b/packages/linkml_runtime/src/linkml_runtime/loaders/rdflib_loader.py @@ -64,6 +64,7 @@ def from_rdf_graph( :param ignore_unmapped_predicates: if True then a predicate that has no mapping to a slot does not raise an error :return: all instances of target class type """ + schemaview.imports_closure() # ensure all imported sub-schemas are in schema_map before namespaces() caches namespaces = schemaview.namespaces() uri_to_class_map = {} for cn, c in schemaview.all_classes().items(): @@ -81,8 +82,11 @@ def from_rdf_graph( prefix_map = {record.prefix: record.uri_prefix for record in prefix_map.records} if prefix_map: for k, v in prefix_map.items(): - namespaces[k] = v - graph.namespace_manager.bind(k, URIRef(v)) + if k == "@base": + namespaces._base = v + else: + namespaces[k] = v + graph.namespace_manager.bind(k, URIRef(v)) # Step 1: Create stub root dict-objects target_class_uriref: URIRef = target_class.class_class_uri root_dicts: list[ANYDICT] = [] From c9a164f36e0adf2b3385293ea2b901b32035a1ae Mon Sep 17 00:00:00 2001 From: amc-corey-cox <69321580+amc-corey-cox@users.noreply.github.com> Date: Mon, 20 Jul 2026 11:47:42 +0000 Subject: [PATCH 19/72] Update metamodel test fixtures from linkml-model --- .../input/metamodel/meta.yaml | 50 +++++++++++++------ 1 file changed, 36 insertions(+), 14 deletions(-) diff --git a/tests/linkml/test_metamodel_compat/input/metamodel/meta.yaml b/tests/linkml/test_metamodel_compat/input/metamodel/meta.yaml index f80f21922b..6d0dfca471 100644 --- a/tests/linkml/test_metamodel_compat/input/metamodel/meta.yaml +++ b/tests/linkml/test_metamodel_compat/input/metamodel/meta.yaml @@ -1308,7 +1308,15 @@ slots: range: unique_key multivalued: true inlined: true - description: A collection of named unique keys for this class. Unique keys may be singular or compound. + description: >- + A collection of named unique keys for this class. Such unique keys may be spread over several slots, which is why there + are also called "compound keys". A unique key uniquely identifies instances of the class within a given container, meaning + there cannot be two (or more) instances of the class with the same values for all the slots that make up the unique key. + comments: + - > + Not to be confused with a "singular unique key", which is defined by means of the `key` slot, or with an "identifier", + which is defined by means of the "identifier" slot. Compound keys, singular unique keys, and identifiers all create a + unicity constraint, but singular unique keys and identifiers have additional effects that compound keys do not have. exact_mappings: - owl:hasKey in_subset: @@ -1316,7 +1324,9 @@ slots: - BasicSubset - RelationalModelProfile see_also: - - https://linkml.io/linkml/schemas/constraints.html#unique-key + - https://linkml.io/linkml/schemas/constraints.html#unique-keys + - key + - identifier unique_key_name: domain: unique_key @@ -1859,18 +1869,24 @@ slots: range: boolean inherited: true description: >- - True means that the key slot(s) uniquely identify the elements within a single container + True means that the slot is the "singular unique key" (also known more simply as the "key slot") of its class. Such a slot + uniquely identifies instances of the class within a single container, meaning there cannot be two (or more) instances of + the class (or instances of any of its descendants) with the same value for the key slot within the container. comments: - - key is inherited - - a given domain can have at most one key slot (restriction to be removed in the future) - - identifiers and keys are mutually exclusive. A given domain cannot have both - - a key slot is automatically required. Keys cannot be optional + - The key slot is inherited. + - A domain can have at most one key slot OR one identifier slot. However a domain can have both a key slot and any number + of compound keys. + - A key slot is automatically required. Singular unique keys cannot be optional. + - The presence of a key slot makes a class eligible for inlining as a dictionary. in_subset: - SpecificationSubset - BasicSubset - RelationalModelProfile see_also: + - https://linkml.io/linkml/schemas/constraints.html#singular-unique-keys + - https://linkml.io/linkml/schemas/inlining.html - unique_keys + - identifier identifier: rank: 5 @@ -1878,8 +1894,16 @@ slots: range: boolean inherited: true description: >- - True means that the key slot(s) uniquely identifies the elements. There can be at most one identifier or key per - container + True means that the slot is the identifier slot of its class. Such a slot uniquely identifies instances of the class + throughout an entire document, meaning there cannot be two (or more) instances of the class (or instances of any of its + descendants) with the same value for the identifier slot anywhere in the document. + comments: + - The identifier slot is inherited. + - A domain can have at most one identifier slot OR a key slot. However a domain can have both an identifier slot and any + number of compound keys. + - An identifier slot is automatically required. Identifiers cannot be optional. + - The presence of an identifier slot makes a class eligible for inlining as a dictionary. + - The presence of an identifier slot makes a class eligible for being referenced rather than inlined. aliases: - primary key - ID @@ -1887,12 +1911,10 @@ slots: - code see_also: - https://en.wikipedia.org/wiki/Identifier + - https://linkml.io/linkml/schemas/constraints.html#unique-keys + - https://linkml.io/linkml/schemas/inlining.html - unique_keys - comments: - - identifier is inherited - - a key slot is automatically required. Identifiers cannot be optional - - a given domain can have at most one identifier - - identifiers and keys are mutually exclusive. A given domain cannot have both + - key in_subset: - SpecificationSubset - MinimalSubset From 860586b448dc0e6510af8df6f188026d9d8dabbd Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Tue, 9 Jun 2026 17:14:28 +0200 Subject: [PATCH 20/72] fix(jsonschema): ignore default_schema if boolean constraint A slot with [boolean constraints][1] in a schema with default_range is getting `type` information in two different ways (a `type` array and an `anyOf` list of `type`s). The dupplication is not needed, additionally they are not even compatible, since the `type` array does not include nullable slots. This patch fixes it. If a [boolean constraint][1] has been provided in the schema, then `default_range` is ignored for the generation of JSON-Schema `type` constraint in the slot. [1]: https://linkml.io/linkml/schemas/advanced.html#boolean-constraints Signed-off-by: Silvano Cirujano Cuesta --- .../src/linkml/generators/jsonschemagen.py | 26 ++++++++++++------- .../test_boolean_slot_compliance.py | 5 ---- .../__snapshots__/genjsonschema/meta.json | 15 ++++------- .../genjsonschema/meta_inline.json | 15 ++++------- 4 files changed, 26 insertions(+), 35 deletions(-) diff --git a/packages/linkml/src/linkml/generators/jsonschemagen.py b/packages/linkml/src/linkml/generators/jsonschemagen.py index 2b3ade8eab..0b3821c27f 100644 --- a/packages/linkml/src/linkml/generators/jsonschemagen.py +++ b/packages/linkml/src/linkml/generators/jsonschemagen.py @@ -835,16 +835,22 @@ def get_subschema_for_slot( prop = JsonSchema.ref_for(reference, required=slot.required or not include_null) else: - if reference is not None: - # for multivalued slots, nullability applies to the array (via array_of - # below), not to the individual elements - prop = JsonSchema.ref_for( - reference, required=slot.required or slot_is_multivalued or not include_null - ) - elif typ and fmt is None: - prop = JsonSchema({"type": typ}) - elif typ: - prop = JsonSchema({"type": typ, "format": fmt}) + if not slot_is_boolean or slot.range != self.schemaview.schema.default_range: + # When a slot uses boolean constraints (any_of, all_of, etc.) AND its range + # was not set explicitly but inherited from the schema's default_range, the + # boolean constraints already fully describe the type. Emitting prop["type"] + # from the default_range would duplicate that constraint. Skip it. + # An explicit range on a boolean slot is intentional and is kept. + if reference is not None: + # for multivalued slots, nullability applies to the array (via array_of + # below), not to the individual elements + prop = JsonSchema.ref_for( + reference, required=slot.required or slot_is_multivalued or not include_null + ) + elif typ and fmt is None: + prop = JsonSchema({"type": typ}) + elif typ: + prop = JsonSchema({"type": typ, "format": fmt}) if slot_is_multivalued: prop = JsonSchema.array_of(prop, include_null, required=slot.required) diff --git a/tests/linkml/test_compliance/test_boolean_slot_compliance.py b/tests/linkml/test_compliance/test_boolean_slot_compliance.py index bb572822c4..486176a980 100644 --- a/tests/linkml/test_compliance/test_boolean_slot_compliance.py +++ b/tests/linkml/test_compliance/test_boolean_slot_compliance.py @@ -93,11 +93,6 @@ def test_slot_any_of(framework, data_name, value, is_valid, use_any_type, use_de :return: """ expected_json_schema = {"s1": {"anyOf": [{"$ref": "#/$defs/D"}, {"type": "integer"}, {"type": "null"}]}} - if use_default_range and not use_any_type: - # default_range is set to string, any no explicit range set. - # in this case the schema is violating monotonicity. - # TODO: undesired behavior, see https://github.com/linkml/linkml/issues/1483 - expected_json_schema["s1"]["type"] = "string" classes = { CLASS_D: { diff --git a/tests/linkml/test_scripts/__snapshots__/genjsonschema/meta.json b/tests/linkml/test_scripts/__snapshots__/genjsonschema/meta.json index 44664f2e1c..7879b587a7 100644 --- a/tests/linkml/test_scripts/__snapshots__/genjsonschema/meta.json +++ b/tests/linkml/test_scripts/__snapshots__/genjsonschema/meta.json @@ -128,8 +128,7 @@ { "type": "null" } - ], - "type": "string" + ] } }, "title": "AnyOfClasses", @@ -150,8 +149,7 @@ { "type": "null" } - ], - "type": "string" + ] } }, "title": "AnyOfEnums", @@ -175,8 +173,7 @@ { "type": "null" } - ], - "type": "string" + ] } }, "title": "AnyOfMix", @@ -197,8 +194,7 @@ { "type": "null" } - ], - "type": "string" + ] } }, "title": "AnyOfSimpleType", @@ -505,8 +501,7 @@ { "type": "null" } - ], - "type": "string" + ] } }, "title": "EmploymentEvent", diff --git a/tests/linkml/test_scripts/__snapshots__/genjsonschema/meta_inline.json b/tests/linkml/test_scripts/__snapshots__/genjsonschema/meta_inline.json index 44664f2e1c..7879b587a7 100644 --- a/tests/linkml/test_scripts/__snapshots__/genjsonschema/meta_inline.json +++ b/tests/linkml/test_scripts/__snapshots__/genjsonschema/meta_inline.json @@ -128,8 +128,7 @@ { "type": "null" } - ], - "type": "string" + ] } }, "title": "AnyOfClasses", @@ -150,8 +149,7 @@ { "type": "null" } - ], - "type": "string" + ] } }, "title": "AnyOfEnums", @@ -175,8 +173,7 @@ { "type": "null" } - ], - "type": "string" + ] } }, "title": "AnyOfMix", @@ -197,8 +194,7 @@ { "type": "null" } - ], - "type": "string" + ] } }, "title": "AnyOfSimpleType", @@ -505,8 +501,7 @@ { "type": "null" } - ], - "type": "string" + ] } }, "title": "EmploymentEvent", From 6128e2155bc7c030861318267db16e6d3b1271a5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Jul 2026 19:42:05 +0000 Subject: [PATCH 21/72] build(deps): bump pyasn1 from 0.6.3 to 0.6.4 Bumps [pyasn1](https://github.com/pyasn1/pyasn1) from 0.6.3 to 0.6.4. - [Release notes](https://github.com/pyasn1/pyasn1/releases) - [Changelog](https://github.com/pyasn1/pyasn1/blob/main/CHANGES.rst) - [Commits](https://github.com/pyasn1/pyasn1/compare/v0.6.3...v0.6.4) --- updated-dependencies: - dependency-name: pyasn1 dependency-version: 0.6.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- uv.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/uv.lock b/uv.lock index 0fdfe8bb3e..1f18fa5467 100644 --- a/uv.lock +++ b/uv.lock @@ -3806,11 +3806,11 @@ wheels = [ [[package]] name = "pyasn1" -version = "0.6.3" +version = "0.6.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5c/5f/6583902b6f79b399c9c40674ac384fd9cd77805f9e6205075f828ef11fb2/pyasn1-0.6.3.tar.gz", hash = "sha256:697a8ecd6d98891189184ca1fa05d1bb00e2f84b5977c481452050549c8a72cf", size = 148685, upload-time = "2026-03-17T01:06:53.382Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a4/9a/23310166d960def5897e91fe20e5b724601b02a22e84ba1f94232c0b7f67/pyasn1-0.6.4.tar.gz", hash = "sha256:9c447d8431c947fe4c8febc4ed9e760bc29011a5b01e5c74b67025bd9fb8ce81", size = 151262, upload-time = "2026-07-09T01:12:33.988Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/a0/7d793dce3fa811fe047d6ae2431c672364b462850c6235ae306c0efd025f/pyasn1-0.6.3-py3-none-any.whl", hash = "sha256:a80184d120f0864a52a073acc6fc642847d0be408e7c7252f31390c0f4eadcde", size = 83997, upload-time = "2026-03-17T01:06:52.036Z" }, + { url = "https://files.pythonhosted.org/packages/9a/3b/6163796d69c3977d1e4287bea4a6979161cbbdd170ebb430511e8e1999ce/pyasn1-0.6.4-py3-none-any.whl", hash = "sha256:deda9277cfd454080ec40b207fb6df82206a3a2688735233cdcd8d3d565f088b", size = 84410, upload-time = "2026-07-09T01:12:32.92Z" }, ] [[package]] From 8e443f15faa4673acc3345923ea84199f73e7f50 Mon Sep 17 00:00:00 2001 From: colinrsmall Date: Thu, 23 Jul 2026 15:26:40 -0700 Subject: [PATCH 22/72] Update get_class_slot_range() in pydanticgen to exclude abstract classes when generating inlined type unions (#3344) * Update get_class_slot_range() in pydanticgen to exclude abstract classes when generating inlined type unions * Fix formatting of packages/linkml/src/linkml/generators/pydanticgen/pydanticgen.py after resolving merge conflict * PydanticGenerator raises ValueError when generating a type union if a slot range is abstract and has no concrete descendants Co-authored-by: Kevin Schaper * Expand PydanticGenerator test coverage Tests: * A positive assertion that concrete sub-types of `Foo` `Bar` and `Baz` are in the generated type union * Nested abstract classes are correctly filtered and nested conrete classes of abstract classes are correctly flattened in the type union * Mixins targeting abstract class that define concrete subclass are correctly included in generated type union * An abstract class with no concrete descendants raises a ValueError Co-authored-by: Kevin Schaper * Ruff reformat for test_linkml_issue_3196.py --------- Co-authored-by: Colin Small Co-authored-by: Kevin Schaper --- .../generators/pydanticgen/pydanticgen.py | 11 +- .../test_issues/test_linkml_issue_3196.py | 149 ++++++++++++++++++ 2 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 tests/linkml/test_issues/test_linkml_issue_3196.py diff --git a/packages/linkml/src/linkml/generators/pydanticgen/pydanticgen.py b/packages/linkml/src/linkml/generators/pydanticgen/pydanticgen.py index 0bc98458bc..175aa4d871 100644 --- a/packages/linkml/src/linkml/generators/pydanticgen/pydanticgen.py +++ b/packages/linkml/src/linkml/generators/pydanticgen/pydanticgen.py @@ -769,7 +769,16 @@ def get_class_slot_range(self, slot_range: str, inlined: bool, inlined_as_list: len([x for x in sv.class_induced_slots(slot_range) if x.designates_type]) > 0 and len(sv.class_descendants(slot_range)) > 1 ): - descendants = [self._get_class_python_name(c) for c in sv.class_descendants(slot_range)] + descendants = [ + self._get_class_python_name(c) + for c in sv.class_descendants(slot_range) + if not sv.get_class(c).abstract + ] + if not descendants: + raise ValueError( + f"Slot range '{slot_range}' is abstract and has no concrete descendants; " + f"cannot generate a valid Pydantic type." + ) return "Union[" + ",".join(descendants) + "]" else: return f"{self._get_class_python_name(slot_range)}" diff --git a/tests/linkml/test_issues/test_linkml_issue_3196.py b/tests/linkml/test_issues/test_linkml_issue_3196.py new file mode 100644 index 0000000000..a307fd48e3 --- /dev/null +++ b/tests/linkml/test_issues/test_linkml_issue_3196.py @@ -0,0 +1,149 @@ +import typing + +from linkml.generators.pydanticgen import PydanticGenerator + +test_schema = """ +id: https://w3id.org/test +name: Test + +imports: + - linkml:types + +classes: + Foo: + abstract: true + attributes: + foo_field: + range: string + required: true + type: + range: string + designates_type: true + + Bar: + is_a: Foo + attributes: + bar_field: + range: string + required: true + Baz: + is_a: Foo + attributes: + baz_field: + range: string + required: true + + Qux: + attributes: + foo_object: + range: Foo + required: true +""" + + +def test_pydantic_abstract_class_not_in_range_union(): + mod = PydanticGenerator(test_schema).compile_module() + annotation = mod.Qux.model_fields["foo_object"].annotation + + # Assert that our abstract class is not in the type union for the Qux.foo_object slot + # Assert that our abstract class is not in the type union for the Qux.foo_object slot + assert mod.Foo not in typing.get_args(annotation) + + +def test_concrete_descendants_are_in_range_union(): + mod = PydanticGenerator(test_schema).compile_module() + annotation = mod.Qux.model_fields["foo_object"].annotation + args = typing.get_args(annotation) + assert mod.Bar in args + assert mod.Baz in args + + +nested_abstract_schema = """ +id: https://w3id.org/test +name: TestNested +imports: + - linkml:types +classes: + Foo: + abstract: true + attributes: + type: {range: string, designates_type: true} + Mid: + is_a: Foo + abstract: true + Leaf1: + is_a: Mid + attributes: {f1: {range: string}} + Leaf2: + is_a: Foo + attributes: {f2: {range: string}} + Qux: + attributes: + foo_object: {range: Foo, required: true} +""" + + +def test_nested_abstract_intermediates_excluded(): + mod = PydanticGenerator(nested_abstract_schema).compile_module() + args = typing.get_args(mod.Qux.model_fields["foo_object"].annotation) + assert mod.Foo not in args + assert mod.Mid not in args + assert mod.Leaf1 in args + assert mod.Leaf2 in args + + +mixin_schema = """ +id: https://w3id.org/test +name: TestMixin +imports: + - linkml:types +classes: + Foo: + abstract: true + attributes: + type: {range: string, designates_type: true} + Bar: + is_a: Foo + attributes: {bar_field: {range: string}} + MixinChild: + mixins: [Foo] + attributes: {mc_field: {range: string}} + Qux: + attributes: + foo_object: {range: Foo, required: true} +""" + + +def test_mixin_descendant_included_in_union(): + mod = PydanticGenerator(mixin_schema).compile_module() + args = typing.get_args(mod.Qux.model_fields["foo_object"].annotation) + assert mod.Foo not in args + assert mod.Bar in args + assert mod.MixinChild in args + + +all_abstract_schema = """ +id: https://w3id.org/test +name: TestAllAbstract +imports: + - linkml:types +classes: + Foo: + abstract: true + attributes: + type: {range: string, designates_type: true} + MidAbstract: + is_a: Foo + abstract: true + Qux: + attributes: + foo_object: {range: Foo, required: true} +""" + + +def test_all_descendants_abstract_raises(): + """Abstract range with no concrete descendants is a schema error.""" + import pytest + + with pytest.raises(ValueError, match="no concrete descendants"): + PydanticGenerator(all_abstract_schema).compile_module() From acd1e7786080a69ab34b023fba2fb5c5943abf78 Mon Sep 17 00:00:00 2001 From: noelmcloughlin Date: Tue, 28 Jul 2026 00:05:11 +0100 Subject: [PATCH 23/72] test: update 'biolink modeling langage' strings --- notebooks/DistributedModels.ipynb | 2 +- tests/input/ImportMaps.md | 2 +- tests/linkml/test_notebooks/input/distributedmodels.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/notebooks/DistributedModels.ipynb b/notebooks/DistributedModels.ipynb index 404ae17249..1ca02b087e 100644 --- a/notebooks/DistributedModels.ipynb +++ b/notebooks/DistributedModels.ipynb @@ -168,7 +168,7 @@ "# (biolink:model), or relative (includes/myfile) file names. Note, however, that this latter form is being deprecated.\n", "# The location of imported files can now be specified in an accompanying mapping file. The imports below reference:\n", "# https://w3id.org/biolink/biolink-model -- the biolink model\n", - "# https://w3id.org/linkml/types -- the biolink modeling language types definitions\n", + "# https://w3id.org/linkml/types -- linked open data modeling language, types definitions\n", "imports:\n", " - https://w3id.org/biolink/biolink-model\n", " - linkml:types\n", diff --git a/tests/input/ImportMaps.md b/tests/input/ImportMaps.md index b7db4ff662..397329b458 100644 --- a/tests/input/ImportMaps.md +++ b/tests/input/ImportMaps.md @@ -1,5 +1,5 @@ # Import Maps -The Biolink Modeling Language includes the ability to import one or more model files. Syntax: +Linkml includes the ability to import one or more model files. Syntax: ```yaml prefixes: linkml: https://w3id.org/linkml/ diff --git a/tests/linkml/test_notebooks/input/distributedmodels.py b/tests/linkml/test_notebooks/input/distributedmodels.py index 3eee75559e..f27d5f78f8 100644 --- a/tests/linkml/test_notebooks/input/distributedmodels.py +++ b/tests/linkml/test_notebooks/input/distributedmodels.py @@ -51,7 +51,7 @@ # imported files can now be specified in an accompanying mapping file. The imports below # reference: # https://w3id.org/biolink/biolink-model -- the biolink model -# https://w3id.org/linkml/types -- the biolink modeling language types definitions +# https://w3id.org/linkml/types -- linked open data modeling language, types definitions imports: - https://w3id.org/biolink/biolink-model - linkml:types From 8ad0f7cd030aeeba822d167dfbf97e146cf5c873 Mon Sep 17 00:00:00 2001 From: N <13322818+noelmcloughlin@users.noreply.github.com> Date: Tue, 28 Jul 2026 13:54:17 +0100 Subject: [PATCH 24/72] Update tests/input/ImportMaps.md Co-authored-by: Nico Matentzoglu --- tests/input/ImportMaps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/input/ImportMaps.md b/tests/input/ImportMaps.md index 397329b458..53c96a4d91 100644 --- a/tests/input/ImportMaps.md +++ b/tests/input/ImportMaps.md @@ -1,5 +1,5 @@ # Import Maps -Linkml includes the ability to import one or more model files. Syntax: +LinkML includes the ability to import one or more model files. Syntax: ```yaml prefixes: linkml: https://w3id.org/linkml/ From 20a146587af59fbd4143144ec0bf1f626464fbe7 Mon Sep 17 00:00:00 2001 From: Florian Kotthoff <74312290+FlorianK13@users.noreply.github.com> Date: Wed, 29 Jul 2026 19:42:20 +0200 Subject: [PATCH 25/72] Extend sqlvalidation generator to process rules from schema (#3325) * Add initial version of rule validations #3262 * Add standardized function for select query #3262 * Reuse standardized select function #3262 * Remove usage of literal_column #3262 * Improve logs and docstrings #3262 * Reuse standardized select function (again) #3262 * Raise warning for empty postcondition #3262 * Remove unused enumerate #3262 * Add two missing 'disabled' tests #3262 * Run generator with new regexp #3262 * Repair non working test #3262 * Use seperate column concat function #3262 * Refactor code for WHERE conditions #3262 * Cast all invalid values to text #3262 Needed for postgres, since postgres needs same data type within a column * Log warning for unsupported dialects #3262 * Improve code coverage #3262 * Reuse RelationalModelTransformer #3262 * Fix failing test #3262 _items is not the right method here * Add type hints to helper function #3262 * Fix failing test #3262 This Fix was already introduced at the main repo, but my changes overwrote it. So I change it back now so that the tests run successful. * Use actual induced slots for rules #3262 Fixes a bug where induced_slots was used from a previous loop. * Use cast instead of func.cast #3262 * Move inline import to top #3262 * Correct wrong docstring #3262 * Reorder functions for better readability #3262 * Restore notNull in pattern checks #3262 * Equal type cond. treats Null as violation #3262 * Fix bug of empty precondition #3262 Empty preconditions that are only empty because the method is not yet supported resulted in the postcondition being applied to all entries. * Resolve attribute names to underscore/alias #3262 * Fix handling of renamed slots in unique key #3262 Now alias and underscored names are handled correctly. * Add type hints #3262 * Use pytest parametrize for rule testing #3262 * Remove default identifier in sql queries #3262 The record_id column now correctly falls back to NULL for classes that have neither an identifier nor a key slot, instead of hardcoding a phantom "id" column that does not exist in the DDL. A warning is logged when this occurs. --------- Co-authored-by: Kevin Schaper --- .../personinfo/sqlvalidation/personinfo.sql | 14 +- .../src/linkml/generators/sqlvalidationgen.py | 735 ++++++++++++----- .../test_generators/test_sqlvalidationgen.py | 751 +++++++++++++++++- 3 files changed, 1308 insertions(+), 192 deletions(-) diff --git a/examples/PersonSchema/personinfo/sqlvalidation/personinfo.sql b/examples/PersonSchema/personinfo/sqlvalidation/personinfo.sql index b7e25da9b2..c13f099010 100644 --- a/examples/PersonSchema/personinfo/sqlvalidation/personinfo.sql +++ b/examples/PersonSchema/personinfo/sqlvalidation/personinfo.sql @@ -1,7 +1,7 @@ -- ==================================================================== -- SQL Validation Queries -- Generated from LinkML schema --- LinkML v0.0.0.post3958.dev0+0979fc25 +-- LinkML v0.0.0.post4237.dev0+893c1568 -- Generator: sqlvalidationgen.py v0.1.0 -- Dialect: sqlite -- ==================================================================== @@ -28,7 +28,7 @@ UNION ALL SELECT 'Person' AS table_name, 'primary_email' AS column_name, 'pattern' AS constraint_type, id AS record_id, primary_email AS invalid_value FROM "Person" -WHERE "Person".primary_email IS NOT NULL AND NOT (REGEXP('^\S+@[\S+\.]+\S+', primary_email) = 1) +WHERE "Person".primary_email NOT REGEXP '^\S+@[\S+\.]+\S+' UNION ALL @@ -46,7 +46,7 @@ UNION ALL SELECT 'Person' AS table_name, 'telephone' AS column_name, 'pattern' AS constraint_type, id AS record_id, telephone AS invalid_value FROM "Person" -WHERE "Person".telephone IS NOT NULL AND NOT (REGEXP('^[\d\(\)\-]+$', telephone) = 1) +WHERE "Person".telephone NOT REGEXP '^[\d\(\)\-]+$' UNION ALL @@ -270,4 +270,10 @@ UNION ALL SELECT 'InterPersonalRelationship' AS table_name, 'type' AS column_name, 'required' AS constraint_type, id AS record_id, NULL AS invalid_value FROM "InterPersonalRelationship" -WHERE "InterPersonalRelationship".type IS NULL; +WHERE "InterPersonalRelationship".type IS NULL + +UNION ALL + +SELECT 'Organization' AS table_name, 'score' AS column_name, 'rule' AS constraint_type, id AS record_id, score AS invalid_value +FROM "Organization" +WHERE "Organization".min_salary <= 80000.0 AND "Organization".score > 0; diff --git a/packages/linkml/src/linkml/generators/sqlvalidationgen.py b/packages/linkml/src/linkml/generators/sqlvalidationgen.py index 024e485589..caead4dab4 100644 --- a/packages/linkml/src/linkml/generators/sqlvalidationgen.py +++ b/packages/linkml/src/linkml/generators/sqlvalidationgen.py @@ -1,25 +1,39 @@ from __future__ import annotations +import copy import logging import os from dataclasses import dataclass from typing import Any import click -from sqlalchemy import and_, column, func, literal_column, or_, select, table, union_all +from sqlalchemy import and_, cast, column, func, literal, null, or_, select, table, tuple_, union_all from sqlalchemy.dialects import postgresql from sqlalchemy.dialects import sqlite as sqlite_dialect -from sqlalchemy.types import Text +from sqlalchemy.sql.elements import ColumnElement +from sqlalchemy.sql.selectable import Select, TableClause +from sqlalchemy.types import Float, Integer, Text from linkml._version import __version__ from linkml.transformers.relmodel_transformer import ForeignKeyPolicy, RelationalModelTransformer from linkml.utils.generator import Generator, shared_arguments -from linkml_runtime.linkml_model.meta import ClassDefinition, SlotDefinition +from linkml_runtime.linkml_model.meta import ( + AnonymousClassExpression, + AnonymousSlotExpression, + ClassRule, + SlotDefinition, +) +from linkml_runtime.utils.formatutils import underscore from linkml_runtime.utils.schemaview import SchemaView logger = logging.getLogger(__name__) +def _literal_num(val): + """Return a typed SQLAlchemy literal for a numeric value.""" + return literal(val, type_=Integer() if isinstance(val, int) else Float()) + + @dataclass class SQLValidationGenerator(Generator): """ @@ -66,29 +80,7 @@ class SQLValidationGenerator(Generator): check_patterns: bool = True check_enums: bool = True check_unique_keys: bool = True - - def _get_dialect(self): - """ - Get the SQLAlchemy dialect object for the configured dialect. - - :return: SQLAlchemy dialect instance - """ - dialect_map = { - "postgresql": postgresql.dialect(), - "sqlite": sqlite_dialect.dialect(), - } - return dialect_map.get(self.dialect, sqlite_dialect.dialect()) - - def _compile_query(self, query) -> str: - """ - Compile a SQLAlchemy query to SQL string for the configured dialect. - - :param query: SQLAlchemy selectable object - :return: Compiled SQL string - """ - dialect = self._get_dialect() - compiled = query.compile(dialect=dialect, compile_kwargs={"literal_binds": True}) - return str(compiled) + check_rules: bool = True def serialize(self, **kwargs: dict[str, Any]) -> str: """ @@ -122,38 +114,46 @@ def generate_validation_queries(self, **kwargs: dict[str, Any]) -> str: """ query_objects = [] - # Transform schema to relational model - sqltr = RelationalModelTransformer(SchemaView(self.schema)) + # Transform schema to relational model. The untransformed view is kept around: + # the transformer renames attributes to their alias and drops rules, so both + # unique_keys and rules need it to map schema slot names onto SQL column names. + source_sv = SchemaView(self.schema) + sqltr = RelationalModelTransformer(source_sv) sqltr.foreign_key_policy = ForeignKeyPolicy.NO_FOREIGN_KEYS tr_result = sqltr.transform(tgt_schema_name=kwargs.get("tgt_schema_name"), top_class=kwargs.get("top_class")) schema = tr_result.schema sv = SchemaView(schema) # Iterate through all classes - for class_name, class_def in schema.classes.items(): - if class_def.abstract: + for class_name in sv.all_classes(): + class_def = sv.get_class(class_name) + if class_def.abstract or class_def.mixin: continue - if not class_def.attributes: - # skip if no attributes are present + raw_induced_slots = sv.class_induced_slots(class_name) + if not raw_induced_slots: continue - # Find the identifier slot for this class - identifier_slot_name = "id" # default fallback - for slot_name, _ in class_def.attributes.items(): - induced = sv.induced_slot(slot_name, class_name) - if induced.identifier: - identifier_slot_name = slot_name - break - - for slot_name, _ in class_def.attributes.items(): - # Get induced slot to capture inherited constraints - induced = sv.induced_slot(slot_name, class_name) + induced_slots = [] + for slot in raw_induced_slots: + slot = copy.copy(slot) + slot.name = underscore(slot.alias or slot.name) + if slot.identifier or slot.key: + slot.required = True + induced_slots.append(slot) + # Find the identifier slot for this class + identifier_slot_name = self._identifier_slot_name(induced_slots) + if identifier_slot_name is None: + logger.warning( + f"Class '{class_name}' has no identifier or key slot: there is no column to point at, " + "so its violations are reported with a NULL record_id." + ) + + for induced in induced_slots: # Generate validation queries for each constraint type if self.check_required and induced.required: query = self._generate_required_violations(class_name, induced, identifier_slot_name) - if query is not None: query_objects.append(query) @@ -182,8 +182,41 @@ def generate_validation_queries(self, **kwargs: dict[str, Any]) -> str: # Check unique_keys constraints (multi-column uniqueness) if self.check_unique_keys and class_def.unique_keys: + slot_names = {s.name for s in induced_slots} + column_name_map = self._column_name_map(source_sv, class_name) for _, uk in class_def.unique_keys.items(): - query = self._generate_unique_key_violations(class_name, class_def, uk, identifier_slot_name) + query = self._generate_unique_key_violations( + class_name, slot_names, uk, identifier_slot_name, column_name_map + ) + if query is not None: + query_objects.append(query) + + # Check rules (precondition/postcondition constraints) + if self.check_rules: + # We need to iterate over the source schema, since the + # RelationalModelTransformer removes rules + for class_name in source_sv.all_classes(): + class_def = source_sv.get_class(class_name) + if not class_def.rules: + continue + if class_def.abstract or class_def.mixin: + continue + identifier_slot_name = self._identifier_slot_name(source_sv.class_induced_slots(class_name)) + # Rules reference slots by schema name (or alias); map them to the SQL + # column names. + column_name_map = self._column_name_map(source_sv, class_name) + for rule in class_def.rules: + if rule.deactivated: + continue + rule = copy.deepcopy(rule) + for expr in (rule.preconditions, rule.postconditions): + if expr and expr.slot_conditions: + renamed = { + column_name_map.get(n, underscore(n)): c for n, c in expr.slot_conditions.items() + } + expr.slot_conditions.clear() + expr.slot_conditions.update(renamed) + query = self._generate_rule_violations(class_name, rule, identifier_slot_name) if query is not None: query_objects.append(query) @@ -210,6 +243,39 @@ def generate_validation_queries(self, **kwargs: dict[str, Any]) -> str: result += "\n" return result + def _get_dialect(self): + """ + Get the SQLAlchemy dialect object for the configured dialect. + + Only ``sqlite`` and ``postgresql`` are supported. Any other value is + rejected: a warning is logged and the dialect is reset to ``sqlite``. + + :return: SQLAlchemy dialect instance + """ + supported = {"postgresql", "sqlite"} + if self.dialect not in supported: + logger.warning( + f"Dialect '{self.dialect}' is not supported. " + "Only 'sqlite' and 'postgresql' are supported. Falling back to 'sqlite'." + ) + self.dialect = "sqlite" + dialect_map = { + "postgresql": postgresql.dialect(), + "sqlite": sqlite_dialect.dialect(), + } + return dialect_map[self.dialect] + + def _compile_query(self, query) -> str: + """ + Compile a SQLAlchemy query to SQL string for the configured dialect. + + :param query: SQLAlchemy selectable object + :return: Compiled SQL string + """ + dialect = self._get_dialect() + compiled = query.compile(dialect=dialect, compile_kwargs={"literal_binds": True}) + return str(compiled) + def _generate_header(self) -> str: """Generate a header comment for the SQL output.""" header = ( @@ -223,111 +289,203 @@ def _generate_header(self) -> str: ) return header - def _generate_required_violations(self, class_name: str, slot: SlotDefinition, identifier_slot_name: str): + @staticmethod + def _identifier_slot_name(slots: list[SlotDefinition]) -> str | None: """ - Generate query to find NULL values in required fields. + Determine the column that identifies a record, for use as ``record_id``. + + An ``identifier`` slot is preferred, falling back to a ``key`` slot. Both are + optional in LinkML, so a class may have neither, in which case there is no column + to point at. + + :param slots: Induced slots of a class + :return: SQL column name of the identifying slot, or None if the class has none + """ + key_slot_name = None + for slot in slots: + if slot.identifier: + return underscore(slot.alias or slot.name) + if slot.key and key_slot_name is None: + key_slot_name = underscore(slot.alias or slot.name) + return key_slot_name + + @staticmethod + def _table(class_name: str, identifier_slot_name: str | None, *col_names: str) -> TableClause: + """ + Build a table clause over the identifying column (if any) plus the given columns. :param class_name: Name of the class/table - :param slot: Slot definition with required=True - :param identifier_slot_name: Name of the identifier slot + :param identifier_slot_name: Name of the identifying slot, or None if the class has none + :param col_names: Names of the other columns referenced by the query + :return: SQLAlchemy table object + """ + names = [identifier_slot_name, *col_names] if identifier_slot_name else list(col_names) + # dict.fromkeys de-duplicates while preserving order: a constraint may be checked on the + # identifying column itself + return table(class_name, *[column(n) for n in dict.fromkeys(names)]) + + def _build_violation_query( + self, + class_name: str, + column_name: str, + constraint_type: str, + identifier_slot_name: str | None, + invalid_value, + tbl: TableClause, + where_condition=None, + ): + """ + Build a standardized violation query SELECT statement. + + :param class_name: Name of the class/table + :param column_name: Name of the slot/constraint for column_name label + :param constraint_type: Type of constraint violated + :param identifier_slot_name: Name of the identifier slot, or None if the class has none + :param invalid_value: Expression for invalid_value column (literal or column) + :param where_condition: SQLAlchemy WHERE condition + :param tbl: SQLAlchemy table object :return: SQLAlchemy select object """ - tbl = table(class_name, column(identifier_slot_name), column(slot.name)) + # for postgres, all values in a column need to be of same type so we need to CAST them to text + _invalid_value = cast(invalid_value, Text()) if self.dialect == "postgresql" else invalid_value - query = ( - select( - literal_column(f"'{class_name}'").label("table_name"), - literal_column(f"'{slot.name}'").label("column_name"), - literal_column("'required'").label("constraint_type"), - column(identifier_slot_name).label("record_id"), - literal_column("NULL").label("invalid_value"), - ) - .select_from(tbl) - .where(tbl.c[slot.name].is_(None)) - ) + if identifier_slot_name: + record_id = column(identifier_slot_name) + else: + record_id = cast(null(), Text()) if self.dialect == "postgresql" else null() + + query = select( + literal(class_name, type_=Text()).label("table_name"), + literal(column_name, type_=Text()).label("column_name"), + literal(constraint_type, type_=Text()).label("constraint_type"), + record_id.label("record_id"), + _invalid_value.label("invalid_value"), + ).select_from(tbl) + + if where_condition is not None: + query = query.where(where_condition) return query - def _generate_range_violations(self, class_name: str, slot: SlotDefinition, identifier_slot_name: str): + @staticmethod + def _required_condition(col, negate: bool = False): """ - Generate query to find minimum_value/maximum_value violations. + Build a SQLAlchemy condition for a required (non-null) constraint. - :param class_name: Name of the class/table - :param slot: Slot definition with min/max constraints - :param identifier_slot_name: Name of the identifier slot - :return: SQLAlchemy select object or None + :param col: SQLAlchemy column expression + :param negate: If True, return the violation condition (IS NULL); + if False, the conformance condition (IS NOT NULL) + :return: SQLAlchemy condition """ - conditions = [] + return col.is_(None) if negate else col.isnot(None) - tbl = table(class_name, column(identifier_slot_name), column(slot.name)) - - if slot.minimum_value is not None: - conditions.append(tbl.c[slot.name] < literal_column(str(slot.minimum_value))) - - if slot.maximum_value is not None: - conditions.append(tbl.c[slot.name] > literal_column(str(slot.maximum_value))) + @staticmethod + def _range_condition(col, min_val, max_val, negate: bool = False): + """ + Build a SQLAlchemy condition for a range (minimum_value/maximum_value) constraint. + :param col: SQLAlchemy column expression + :param min_val: Minimum value (inclusive), or None + :param max_val: Maximum value (inclusive), or None + :param negate: If True, return the violation condition; if False, the conformance condition + :return: SQLAlchemy condition, or None if both bounds are None + """ + conditions = [] + if min_val is not None: + conditions.append(col < _literal_num(min_val) if negate else col >= _literal_num(min_val)) + if max_val is not None: + conditions.append(col > _literal_num(max_val) if negate else col <= _literal_num(max_val)) if not conditions: return None + return or_(*conditions) if negate else and_(*conditions) - query = ( - select( - literal_column(f"'{class_name}'").label("table_name"), - literal_column(f"'{slot.name}'").label("column_name"), - literal_column("'range'").label("constraint_type"), - column(identifier_slot_name).label("record_id"), - column(slot.name).label("invalid_value"), - ) - .select_from(tbl) - .where(or_(*conditions)) - ) + @staticmethod + def _pattern_condition(col, pattern: str, negate: bool = False): + """ + Build a SQLAlchemy condition for a pattern (regex) constraint. - return query + Uses SQLAlchemy's ``regexp_match`` which compiles to the dialect-specific + syntax (PostgreSQL: ``~``, SQLite: ``REGEXP``). - def _generate_pattern_violations(self, class_name: str, slot: SlotDefinition, identifier_slot_name: str): + NULL values are excluded regardless of ``negate``, since a NULL is not a pattern + violation but a required violation. This is needed since native sqlite has no + regexp implementation and some registered functions might fail if null is not excluded. + + :param col: SQLAlchemy column expression + :param pattern: Regular expression pattern string + :param negate: If True, return the violation condition; if False, the conformance condition + :return: SQLAlchemy condition """ - Generate query to find pattern (regex) violations. + match = col.regexp_match(literal(pattern, type_=Text())) + return and_(col.isnot(None), ~match if negate else match) - Handles dialect-specific regex syntax: - - PostgreSQL: ~ operator - - SQLite: REGEXP function (requires extension) + def _generate_required_violations(self, class_name: str, slot: SlotDefinition, identifier_slot_name: str | None): + """ + Generate query to find NULL values in required fields. :param class_name: Name of the class/table - :param slot: Slot definition with pattern constraint - :param identifier_slot_name: Name of the identifier slot + :param slot: Slot definition with required=True + :param identifier_slot_name: Name of the identifier slot, or None if the class has none :return: SQLAlchemy select object """ - tbl = table(class_name, column(identifier_slot_name), column(slot.name)) + tbl = self._table(class_name, identifier_slot_name, slot.name) + + return self._build_violation_query( + class_name=class_name, + column_name=slot.name, + constraint_type="required", + identifier_slot_name=identifier_slot_name, + invalid_value=null(), + tbl=tbl, + where_condition=self._required_condition(tbl.c[slot.name], negate=True), + ) - pattern = slot.pattern + def _generate_range_violations(self, class_name: str, slot: SlotDefinition, identifier_slot_name: str | None): + """ + Generate query to find minimum_value/maximum_value violations. - # Generate dialect-specific pattern matching using SQLAlchemy - # We need to use literal_column for dialect-specific operators - if self.dialect == "postgresql": - pattern_check = ~literal_column(f"{slot.name} ~ '{pattern}'") - elif self.dialect == "sqlite": - # SQLite REGEXP requires extension - pattern_check = ~literal_column(f"(REGEXP('{pattern}', {slot.name}) = 1)") + :param class_name: Name of the class/table + :param slot: Slot definition with min/max constraints + :param identifier_slot_name: Name of the identifier slot, or None if the class has none + :return: SQLAlchemy select object or None + """ + tbl = self._table(class_name, identifier_slot_name, slot.name) + where_condition = self._range_condition(tbl.c[slot.name], slot.minimum_value, slot.maximum_value, negate=True) + if where_condition is None: + return None - else: - # Default to PostgreSQL syntax - pattern_check = ~literal_column(f"{slot.name} ~ '{pattern}'") - - query = ( - select( - literal_column(f"'{class_name}'").label("table_name"), - literal_column(f"'{slot.name}'").label("column_name"), - literal_column("'pattern'").label("constraint_type"), - column(identifier_slot_name).label("record_id"), - column(slot.name).label("invalid_value"), - ) - .select_from(tbl) - .where(and_(tbl.c[slot.name].isnot(None), pattern_check)) + return self._build_violation_query( + class_name=class_name, + column_name=slot.name, + constraint_type="range", + identifier_slot_name=identifier_slot_name, + invalid_value=column(slot.name), + tbl=tbl, + where_condition=where_condition, ) - return query + def _generate_pattern_violations(self, class_name: str, slot: SlotDefinition, identifier_slot_name: str | None): + """ + Generate query to find pattern (regex) violations. + + :param class_name: Name of the class/table + :param slot: Slot definition with pattern constraint + :param identifier_slot_name: Name of the identifier slot, or None if the class has none + :return: SQLAlchemy select object + """ + tbl = self._table(class_name, identifier_slot_name, slot.name) + + return self._build_violation_query( + class_name=class_name, + column_name=slot.name, + constraint_type="pattern", + identifier_slot_name=identifier_slot_name, + invalid_value=column(slot.name), + tbl=tbl, + where_condition=self._pattern_condition(tbl.c[slot.name], slot.pattern, negate=True), + ) - def _generate_identifier_violations(self, class_name: str, slot: SlotDefinition, identifier_slot_name: str): + def _generate_identifier_violations(self, class_name: str, slot: SlotDefinition, identifier_slot_name: str | None): """ Generate query to find identifier/key uniqueness violations. @@ -335,10 +493,10 @@ def _generate_identifier_violations(self, class_name: str, slot: SlotDefinition, :param class_name: Name of the class/table :param slot: Slot definition with identifier=True or key=True - :param identifier_slot_name: Name of the identifier slot + :param identifier_slot_name: Name of the identifier slot, or None if the class has none :return: SQLAlchemy select object """ - tbl = table(class_name, column(identifier_slot_name), column(slot.name)) + tbl = self._table(class_name, identifier_slot_name, slot.name) constraint_type = "identifier" if slot.identifier else "key" @@ -350,23 +508,18 @@ def _generate_identifier_violations(self, class_name: str, slot: SlotDefinition, .having(func.count() > 1) ) - # Main query to find all records with those duplicate values - query = ( - select( - literal_column(f"'{class_name}'").label("table_name"), - literal_column(f"'{slot.name}'").label("column_name"), - literal_column(f"'{constraint_type}'").label("constraint_type"), - column(identifier_slot_name).label("record_id"), - column(slot.name).label("invalid_value"), - ) - .select_from(tbl) - .where(tbl.c[slot.name].in_(duplicate_subquery)) + return self._build_violation_query( + class_name=class_name, + column_name=slot.name, + constraint_type=constraint_type, + identifier_slot_name=identifier_slot_name, + invalid_value=column(slot.name), + where_condition=tbl.c[slot.name].in_(duplicate_subquery), + tbl=tbl, ) - return query - def _generate_enum_violations( - self, class_name: str, slot: SlotDefinition, sv: SchemaView, identifier_slot_name: str + self, class_name: str, slot: SlotDefinition, sv: SchemaView, identifier_slot_name: str | None ): """ Generate query to find enum constraint violations. @@ -376,7 +529,7 @@ def _generate_enum_violations( :param class_name: Name of the class/table :param slot: Slot definition with enum range :param sv: SchemaView for looking up enum values - :param identifier_slot_name: Name of the identifier slot + :param identifier_slot_name: Name of the identifier slot, or None if the class has none :return: SQLAlchemy select object or None """ # Get the enum definition @@ -384,26 +537,84 @@ def _generate_enum_violations( if not enum or not enum.permissible_values: return None - permissible_values = [str(v) for v in enum.permissible_values.keys()] + permissible_values = [literal(str(v), type_=Text()) for v in enum.permissible_values.keys()] - tbl = table(class_name, column(identifier_slot_name), column(slot.name)) + tbl = self._table(class_name, identifier_slot_name, slot.name) - query = ( - select( - literal_column(f"'{class_name}'").label("table_name"), - literal_column(f"'{slot.name}'").label("column_name"), - literal_column("'enum'").label("constraint_type"), - column(identifier_slot_name).label("record_id"), - column(slot.name).label("invalid_value"), - ) - .select_from(tbl) - .where(and_(tbl.c[slot.name].isnot(None), tbl.c[slot.name].notin_(permissible_values))) + return self._build_violation_query( + class_name=class_name, + column_name=slot.name, + constraint_type="enum", + identifier_slot_name=identifier_slot_name, + invalid_value=column(slot.name), + tbl=tbl, + where_condition=and_(tbl.c[slot.name].isnot(None), tbl.c[slot.name].notin_(permissible_values)), ) - return query + def _concat_columns(self, col_names: list[str]): + """Build a pipe-separated SQLAlchemy concatenation expression for the given column names + and casts these columns as TEXT. + This is necessary if several postconditions apply to different data types. + + Example: + precondition -> human has drivers license + postcondition -> 1. human age > 18, 2. human is "adult" + + Data that does not conform then returns the following `invalid_value`: + 16 | adult + 22 | teenager + + Here we need both the number and the adult/teenager status to be of type TEXT + to concat them. + + :param col_names: list of column names to concatenate + :return: SQLAlchemy expression + """ + + if len(col_names) == 1: + return column(col_names[0]) + concat_parts = [] + # Build concatenation: CAST(col1 AS TEXT) || '|' || CAST(col2 AS TEXT) || ... + for i, col_name in enumerate(col_names): + concat_parts.append(cast(column(col_name), Text())) + if i < len(col_names) - 1: + concat_parts.append(literal("|", type_=Text())) + expr = concat_parts[0] + for part in concat_parts[1:]: + expr = expr + part + return expr + + @staticmethod + def _column_name_map(sv: SchemaView, class_name: str) -> dict[str, str]: + """ + Map the slot names of a class onto the column names the relational transform gives them. + + The RelationalModelTransformer names each column after ``underscore(alias or name)``, while + unique_keys and rules reference slots by either their schema name or their alias, so both + are accepted as keys. + + :param sv: SchemaView over the *untransformed* schema + :param class_name: Name of the class whose slots are mapped + :return: Mapping of slot name and alias onto SQL column name; empty if the class is not in + the schema (the transform may introduce classes of its own, e.g. linking tables) + """ + if class_name not in sv.all_classes(): + return {} + name_map = {} + for slot in sv.class_induced_slots(class_name): + sql_name = underscore(slot.alias or slot.name) + name_map[slot.name] = sql_name + if slot.alias: + name_map[slot.alias] = sql_name + return name_map def _generate_unique_key_violations( - self, class_name: str, class_def: ClassDefinition, uk, identifier_slot_name: str + self, + class_name: str, + slot_names: set[str], + uk, + identifier_slot_name: str | None, + column_name_map: dict[str, str], ): """ Generate query to find unique_keys violations (multi-column uniqueness). @@ -411,39 +622,36 @@ def _generate_unique_key_violations( Finds individual records with duplicate combinations of values across multiple columns. :param class_name: Name of the class/table - :param class_def: Class definition + :param slot_names: Set of valid slot names for this class :param uk: UniqueKey definition - :param identifier_slot_name: Name of the identifier slot + :param identifier_slot_name: Name of the identifier slot, or None if the class has none + :param column_name_map: Mapping of schema slot names and aliases onto SQL column names :return: SQLAlchemy select object or None """ - # Get column names from unique key slots + # Get column names from unique key slots (underscored for SQL) columns = [] + unresolved = [] for slot_name in uk.unique_key_slots: - if slot_name in class_def.attributes: - columns.append(slot_name) + sql_name = column_name_map.get(slot_name, underscore(slot_name)) + if sql_name in slot_names: + columns.append(sql_name) + else: + unresolved.append(slot_name) + + if unresolved: + logger.warning( + f"Skipping uniqueness constraint '{uk.unique_key_name}' on class '{class_name}': " + f"no column found for slots {unresolved}." + ) + return None if not columns: return None # Main table with identifier and all columns - tbl = table(class_name, column(identifier_slot_name), *[column(col) for col in columns]) + tbl = self._table(class_name, identifier_slot_name, *columns) - # Build concatenated value expression (pipe-separated) - # Use CAST to ensure all values are strings before concatenation - if len(columns) == 1: - concat_expr = func.cast(column(columns[0]), Text) - else: - # Build concatenation: CAST(col1 AS TEXT) || '|' || CAST(col2 AS TEXT) || ... - concat_parts = [] - for i, col in enumerate(columns): - concat_parts.append(func.cast(column(col), Text)) - if i < len(columns) - 1: - concat_parts.append(literal_column("'|'")) - - # Chain concatenation operations - concat_expr = concat_parts[0] - for part in concat_parts[1:]: - concat_expr = concat_expr.op("||")(part) + concat_expr = self._concat_columns(columns) # Subquery to find duplicate combinations subquery_tbl = table(class_name, *[column(col) for col in columns]) @@ -460,24 +668,173 @@ def _generate_unique_key_violations( else: # For multiple columns, use tuple IN syntax # SQLAlchemy's tuple_() function handles this properly across dialects - from sqlalchemy import tuple_ - where_clause = tuple_(*[tbl.c[col] for col in columns]).in_(duplicate_subquery) - # Main query to find all records with duplicate combinations - query = ( - select( - literal_column(f"'{class_name}'").label("table_name"), - literal_column(f"'{uk.unique_key_name}'").label("column_name"), - literal_column("'unique_key'").label("constraint_type"), - column(identifier_slot_name).label("record_id"), - concat_expr.label("invalid_value"), - ) - .select_from(tbl) - .where(where_clause) + return self._build_violation_query( + class_name=class_name, + column_name=uk.unique_key_name, + constraint_type="unique_key", + identifier_slot_name=identifier_slot_name, + invalid_value=concat_expr, + tbl=tbl, + where_condition=where_clause, ) - return query + def _slot_condition_to_sqlalchemy( + self, + tbl: TableClause, + slot_name: str, + slot_condition: AnonymousSlotExpression, + negate: bool = False, + ) -> list[ColumnElement[bool]]: + """ + Convert a single slot condition to SQLAlchemy WHERE clause(s). + + :param tbl: SQLAlchemy table object + :param slot_name: Name of the slot/column + :param slot_condition: SlotDefinition with constraint properties + :param negate: If True, negate the condition (for postcondition violation detection) + :return: list of SQLAlchemy conditions + """ + conditions = [] + col = tbl.c[slot_name] + + if slot_condition.equals_string is not None: + lit = literal(slot_condition.equals_string, type_=Text()) + conditions.append(or_(col != lit, col.is_(None)) if negate else col == lit) + + if slot_condition.equals_number is not None: + lit_num = _literal_num(slot_condition.equals_number) + conditions.append(or_(col != lit_num, col.is_(None)) if negate else col == lit_num) + + if slot_condition.equals_string_in: + lit_vals = [literal(v, type_=Text()) for v in slot_condition.equals_string_in] + conditions.append(or_(col.notin_(lit_vals), col.is_(None)) if negate else col.in_(lit_vals)) + + range_cond = self._range_condition( + col, slot_condition.minimum_value, slot_condition.maximum_value, negate=negate + ) + if range_cond is not None: + conditions.append(range_cond) + + if slot_condition.pattern is not None: + conditions.append(self._pattern_condition(col, slot_condition.pattern, negate=negate)) + + if slot_condition.required: + conditions.append(self._required_condition(col, negate=negate)) + + return conditions + + def _class_expression_to_sqlalchemy( + self, + tbl: TableClause, + expression: AnonymousClassExpression | None, + negate: bool = False, + ) -> ColumnElement[bool] | None: + """ + Convert an AnonymousClassExpression to a composite WHERE clause. + + :param tbl: SQLAlchemy table object + :param expression: AnonymousClassExpression with slot_conditions + :param negate: If True, negate the expression (for postcondition violation detection). Note that negated + conditions are concatenated with OR -> De Morgan's law. + :return: SQLAlchemy condition or None + """ + if not expression: + return None + + # Warn about unsupported features + for attr in ("any_of", "all_of", "none_of", "exactly_one_of"): + if getattr(expression, attr, None): + logger.warning(f"Rule class expression '{attr}' is not yet supported in SQL validation") + + if not expression.slot_conditions: + return None + + all_conditions = [] + for slot_name, slot_condition in expression.slot_conditions.items(): + conds = self._slot_condition_to_sqlalchemy(tbl, slot_name, slot_condition, negate=negate) + all_conditions.extend(conds) + + if not all_conditions: + return None + + if negate: + # De Morgan's law: negating AND → OR + return or_(*all_conditions) + else: + return and_(*all_conditions) + + def _generate_rule_violations( + self, class_name: str, rule: ClassRule, identifier_slot_name: str | None + ) -> Select | None: + """ + Generate query to find rows violating a rule's postconditions. + + A violation occurs when the precondition is met but the postcondition is not. + + Preconditions are concatenated with AND. Postconditions are concatenated with OR. + Postcondition is required, precondition is not required. If no precondition is given, + the postcondition applies to all entries. + + :param class_name: Name of the class/table + :param rule: ClassRule with preconditions/postconditions + :param identifier_slot_name: Name of the identifier slot, or None if the class has none + :return: SQLAlchemy select object or None + """ + if not rule.postconditions: + logger.warning( + f"Could not generate rule-based query for class '{class_name}': a rule needs 'postconditions'." + ) + return None + + # Collect all referenced column names + col_names = [] + if rule.preconditions and rule.preconditions.slot_conditions: + col_names.extend(rule.preconditions.slot_conditions.keys()) + col_names.extend(rule.postconditions.slot_conditions.keys()) + + postcondition_slot_names = list(rule.postconditions.slot_conditions.keys()) + column_name_label = ",".join(postcondition_slot_names) + + tbl = self._table(class_name, identifier_slot_name, *col_names) + + # Build WHERE: precondition AND (negated postcondition) + where_parts = [] + if rule.preconditions: + pre = self._class_expression_to_sqlalchemy(tbl, rule.preconditions, negate=False) + if pre is None: + # Fail closed: dropping an untranslatable precondition would apply the + # postcondition check to every row, producing false-positive violations. + logger.warning( + f"Could not generate rule-based query for class '{class_name}': preconditions exist " + "but produced no SQL conditions (unsupported class expression or slot condition " + "types?). Skipping the rule." + ) + return None + where_parts.append(pre) + + post = self._class_expression_to_sqlalchemy(tbl, rule.postconditions, negate=True) + if post is None: + logger.warning( + f"Could not generate rule-based query for class '{class_name}': postconditions exist but " + "produced no SQL conditions (unsupported class expression or slot condition types?). " + "Skipping the rule." + ) + return None + where_parts.append(post) + + where_clause = and_(*where_parts) if len(where_parts) > 1 else where_parts[0] + + return self._build_violation_query( + class_name=class_name, + column_name=column_name_label, + constraint_type="rule", + identifier_slot_name=identifier_slot_name, + invalid_value=self._concat_columns(postcondition_slot_names), + tbl=tbl, + where_condition=where_clause, + ) @shared_arguments(SQLValidationGenerator) @@ -518,6 +875,12 @@ def _generate_unique_key_violations( show_default=True, help="Generate queries for unique key violations", ) +@click.option( + "--check-rules/--no-check-rules", + default=True, + show_default=True, + help="Generate queries for rule (precondition/postcondition) violations", +) @click.option( "--include-comments/--no-include-comments", default=True, diff --git a/tests/linkml/test_generators/test_sqlvalidationgen.py b/tests/linkml/test_generators/test_sqlvalidationgen.py index 78e49106a2..02e969746f 100644 --- a/tests/linkml/test_generators/test_sqlvalidationgen.py +++ b/tests/linkml/test_generators/test_sqlvalidationgen.py @@ -1,5 +1,7 @@ """Tests for SQL Validation Generator.""" +import logging +import re import sqlite3 import pytest @@ -8,7 +10,13 @@ from linkml.generators.sqltablegen import SQLTableGenerator from linkml.generators.sqlvalidationgen import SQLValidationGenerator, cli -from linkml_runtime.linkml_model.meta import SlotDefinition, UniqueKey +from linkml_runtime.linkml_model import SchemaDefinition +from linkml_runtime.linkml_model.meta import ( + AnonymousClassExpression, + ClassRule, + SlotDefinition, + UniqueKey, +) from linkml_runtime.utils.schema_builder import SchemaBuilder @@ -95,7 +103,29 @@ def test_identifier_uniqueness(minimal_schema_queries): assert "count(*) > 1" in minimal_schema_queries -def test_unique_key_constraint(): +def test_single_column_unique_key(): + """Single-column unique key should use simple IN subquery, not tuple syntax.""" + b = SchemaBuilder() + b.add_slot(SlotDefinition("id", identifier=True)) + b.add_slot(SlotDefinition("code")) + b.add_class( + "Item", + slots=["id", "code"], + unique_keys={"code_key": UniqueKey(unique_key_name="code_key", unique_key_slots=["code"])}, + ) + b.add_defaults() + + gen = SQLValidationGenerator(b.schema) + queries = gen.generate_validation_queries() + + assert "unique_key" in queries + assert "code" in queries + assert "GROUP BY" in queries + # Single-column path does not use tuple syntax + assert "ROW(" not in queries + + +def test_multi_column_unique_key(): """Test generation of unique key validation query.""" b = SchemaBuilder() b.add_slot(SlotDefinition("id", identifier=True)) @@ -119,6 +149,28 @@ def test_unique_key_constraint(): assert "||" in queries or "CONCAT" in queries +def test_unique_key_with_aliased_slot(): + """Unique key slots are given as slot names, but the columns are named after the alias.""" + b = SchemaBuilder() + b.add_slot(SlotDefinition("id", identifier=True)) + b.add_slot(SlotDefinition("first name")) + b.add_slot(SlotDefinition("last name")) + b.add_class( + "Person", + slots=["id", "first name", "last name"], + slot_usage={"first name": SlotDefinition("first name", alias="given_name")}, + unique_keys={"name_key": UniqueKey(unique_key_name="name_key", unique_key_slots=["first name", "last name"])}, + ) + b.add_defaults() + + gen = SQLValidationGenerator(b.schema) + queries = gen.generate_validation_queries() + + assert "unique_key" in queries + assert "GROUP BY given_name, last_name" in queries + assert "first_name" not in queries + + def test_enum_constraint(): """Test generation of enum validation query.""" b = SchemaBuilder() @@ -154,6 +206,21 @@ def test_dialect_specific_pattern(minimal_schema, dialect, pattern_syntax): assert pattern_syntax in queries +@pytest.mark.parametrize("dialect", ["postgresql", "sqlite"]) +def test_pattern_check_guards_against_null(minimal_schema, dialect): + """Pattern checks must exclude NULLs: absence of a value is the required constraint's concern. + + On SQLite the guard is also what keeps NULLs out of the user-registered REGEXP + function, see test_pattern_check_ignores_nulls_sqlite. + """ + gen = SQLValidationGenerator(minimal_schema, dialect=dialect) + queries = gen.generate_validation_queries() + + pattern_query = next(q for q in queries.split("UNION ALL") if "'pattern'" in q) + + assert "email IS NOT NULL" in pattern_query + + def test_with_kitchen_sink_schema(input_path): """Test with the kitchen_sink.yaml schema.""" schema = str(input_path("kitchen_sink.yaml")) @@ -214,6 +281,38 @@ def test_check_patterns_disabled(minimal_schema): assert "REGEXP" not in queries +def test_check_enums_disabled(): + """Test disabling enum constraint checks.""" + b = SchemaBuilder() + b.add_slot(SlotDefinition("id", identifier=True)) + b.add_slot(SlotDefinition("status", range="StatusEnum")) + b.add_enum("StatusEnum", permissible_values=["active", "inactive", "pending"]) + b.add_class("Record", slots=["id", "status"]) + b.add_defaults() + gen = SQLValidationGenerator(b.schema, check_enums=False) + queries = gen.generate_validation_queries() + + assert "enum" not in queries + assert " NOT IN " not in queries + + +def test_check_unique_keys_disabled(): + """Test disabling unique_keys constraint checks.""" + b = SchemaBuilder() + b.add_slot(SlotDefinition("id", identifier=True)) + b.add_slot(SlotDefinition("first_name")) + b.add_slot(SlotDefinition("last_name")) + b.add_class( + "Person", + slots=["id", "first_name", "last_name"], + unique_keys={"name_key": UniqueKey(unique_key_name="name_key", unique_key_slots=["first_name", "last_name"])}, + ) + b.add_defaults() + gen = SQLValidationGenerator(b.schema, check_unique_keys=False) + queries = gen.generate_validation_queries() + assert "unique_key" not in queries + + def test_include_comments_disabled(minimal_schema): """Test disabling comments in output.""" gen = SQLValidationGenerator(minimal_schema, include_comments=False) @@ -501,3 +600,651 @@ def test_validation_interop_with_invalid_data(input_path, tmp_path): ) conn.close() + + +@pytest.mark.slow +def test_pattern_check_ignores_nulls_sqlite(tmp_path): + """Executing pattern checks against SQLite must survive NULLs in the constrained column. + + SQLite has no built-in REGEXP: the operator dispatches to a scalar function the + application registers, and SQLite hands that function a NULL argument rather than + short-circuiting the way a native operator would. The function registered here is + deliberately NULL-intolerant (the idiomatic implementation), so an unguarded pattern + check surfaces as sqlite3.OperationalError and takes down the entire UNION ALL query. + + Unlike the other interop tests, this one leaves check_patterns enabled. + """ + b = SchemaBuilder() + b.add_slot(SlotDefinition("id", identifier=True)) + # optional, so NULL is a legal value despite the pattern + b.add_slot(SlotDefinition("email", pattern=r"^\S+@\S+$")) + b.add_class("Person", slots=["id", "email"]) + b.add_defaults() + schema = b.schema + + ddl = SQLTableGenerator(schema, dialect="sqlite").generate_ddl() + validation_sql = SQLValidationGenerator(schema, dialect="sqlite").generate_validation_queries() + + conn = sqlite3.connect(str(tmp_path / "pattern_null_test.db")) + conn.create_function("regexp", 2, lambda pattern, value: re.search(pattern, value) is not None) + cursor = conn.cursor() + cursor.executescript(ddl) + + cursor.execute('INSERT INTO "Person" (id, email) VALUES (?, ?)', ("P:001", "jane@example.com")) + cursor.execute('INSERT INTO "Person" (id, email) VALUES (?, ?)', ("P:002", None)) + cursor.execute('INSERT INTO "Person" (id, email) VALUES (?, ?)', ("P:003", "not-an-email")) + conn.commit() + + cursor.execute(validation_sql) + violations = cursor.fetchall() + conn.close() + + pattern_violations = [v for v in violations if v[2] == "pattern"] + assert [v[3] for v in pattern_violations] == ["P:003"], ( + f"Only the malformed email should be a pattern violation, got: {pattern_violations}" + ) + + +def _schema_with_rules( + rules: list[ClassRule], + slots: list[SlotDefinition] | None = None, + class_name: str = "LivingThings", +) -> SchemaDefinition: + """Helper to build a schema with rules on a class. + + :param rules: list of ClassRule objects + :param slots: list of SlotDefinition objects (defaults to id/type/age) + :param class_name: class name to apply rules to + :return: schema object + """ + b = SchemaBuilder() + if slots is None: + slots = [ + SlotDefinition("id", identifier=True), + SlotDefinition("type"), + SlotDefinition("age", range="integer"), + ] + for s in slots: + b.add_slot(s) + b.add_class(class_name, slots=[s.name for s in slots]) + b.add_defaults() + # Attach rules directly + b.schema.classes[class_name].rules = rules + return b.schema + + +def test_simple_rule_equals_string_and_maximum_value(): + """Precondition equals_string + postcondition maximum_value.""" + schema = _schema_with_rules( + [ + ClassRule( + preconditions=AnonymousClassExpression( + slot_conditions={"type": SlotDefinition("type", equals_string="Human")}, + ), + postconditions=AnonymousClassExpression( + slot_conditions={"age": SlotDefinition("age", maximum_value=150)}, + ), + ) + ] + ) + gen = SQLValidationGenerator(schema) + sql = gen.generate_validation_queries() + + # Precondition positive: type = 'Human' + assert "type" in sql + assert "'Human'" in sql + # Postcondition negated: age > 150 + assert "age > 150" in sql + assert "'rule'" in sql + + +@pytest.mark.parametrize( + "preconditions,postconditions,expected_sql,unexpected_sql", + [ + pytest.param( + {"type": SlotDefinition("type", equals_string_in=["Human", "Elf"])}, + {"age": SlotDefinition("age", maximum_value=500)}, + ["IN", "'Human'", "'Elf'", "age > 500"], + [], + id="equals_string_in-precondition_maximum_value-postcondition", + ), + pytest.param( + {"type": SlotDefinition("type", equals_string="Adult")}, + {"age": SlotDefinition("age", minimum_value=18)}, + ["age < 18"], + [], + id="minimum_value-postcondition", + ), + pytest.param( + None, + {"age": SlotDefinition("age", maximum_value=200)}, + ["age > 200"], + ["'Human'"], # no preconditions → no precondition clause + id="postcondition-only", + ), + pytest.param( + {"type": SlotDefinition("type", equals_string="Human")}, + { + "age": SlotDefinition("age", maximum_value=150), + "weight": SlotDefinition("weight", maximum_value=500), + }, + ["age > 150", "weight > 500", " OR "], + [], + id="multiple-postcondition-slots", + ), + pytest.param( + {"type": SlotDefinition("type", equals_string="Human")}, + {"name": SlotDefinition("name", required=True)}, + ["name IS NULL"], + [], + id="required-postcondition", + ), + pytest.param( + {"age": SlotDefinition("age", equals_number=0)}, + {"type": SlotDefinition("type", equals_string="Newborn")}, + ["age = 0"], + [], + id="equals_number-precondition", + ), + ], +) +def test_rule_slot_condition_types( + preconditions: dict[str, SlotDefinition] | None, + postconditions: dict[str, SlotDefinition], + expected_sql: list[str], + unexpected_sql: list[str], +) -> None: + """Various slot condition types in rule pre/postconditions. + + :param preconditions: slot_conditions for the rule preconditions, or None for no preconditions + :param postconditions: slot_conditions for the rule postconditions + :param expected_sql: SQL fragments that must appear in the generated queries + :param unexpected_sql: SQL fragments that must not appear in the generated queries + """ + slots = [ + SlotDefinition("id", identifier=True), + SlotDefinition("type"), + SlotDefinition("age", range="integer"), + SlotDefinition("weight", range="integer"), + SlotDefinition("name"), + ] + rule = ClassRule(postconditions=AnonymousClassExpression(slot_conditions=postconditions)) + if preconditions is not None: + rule.preconditions = AnonymousClassExpression(slot_conditions=preconditions) + + schema = _schema_with_rules([rule], slots=slots) + gen = SQLValidationGenerator(schema) + sql = gen.generate_validation_queries() + + for fragment in expected_sql: + assert fragment in sql + for fragment in unexpected_sql: + assert fragment not in sql + + +def test_check_rules_disabled(): + """check_rules=False should suppress all rule SQL.""" + schema = _schema_with_rules( + [ + ClassRule( + preconditions=AnonymousClassExpression( + slot_conditions={"type": SlotDefinition("type", equals_string="Human")}, + ), + postconditions=AnonymousClassExpression( + slot_conditions={"age": SlotDefinition("age", maximum_value=150)}, + ), + ) + ] + ) + gen = SQLValidationGenerator(schema, check_rules=False) + sql = gen.generate_validation_queries() + + assert "'rule'" not in sql + + +def test_rule_deactivated(): + """Deactivated rules should be skipped.""" + schema = _schema_with_rules( + [ + ClassRule( + preconditions=AnonymousClassExpression( + slot_conditions={"type": SlotDefinition("type", equals_string="Human")}, + ), + postconditions=AnonymousClassExpression( + slot_conditions={"age": SlotDefinition("age", maximum_value=150)}, + ), + deactivated=True, + ) + ] + ) + gen = SQLValidationGenerator(schema) + sql = gen.generate_validation_queries() + + assert "'rule'" not in sql + + +def test_cli_check_rules_option(tmp_path): + """CLI --no-check-rules suppresses rule queries.""" + schema = _schema_with_rules( + [ + ClassRule( + postconditions=AnonymousClassExpression( + slot_conditions={"age": SlotDefinition("age", maximum_value=150)}, + ), + ) + ] + ) + schema_path = tmp_path / "rules_schema.yaml" + from linkml_runtime.dumpers import yaml_dumper + + with open(schema_path, "w") as f: + f.write(yaml_dumper.dumps(schema)) + + runner = CliRunner() + result = runner.invoke(cli, [str(schema_path), "--no-check-rules"]) + assert result.exit_code == 0 + assert "'rule'" not in result.output + + +@pytest.mark.parametrize( + "slot_condition_kwargs", + [ + {"equals_string": "Alive"}, + {"equals_number": 1}, + {"equals_string_in": ["Alive", "Dormant"]}, + ], +) +def test_rule_equals_postcondition_null_safe(slot_condition_kwargs): + """Negated equals-type postcondition checks must treat NULL as a violation. + + SQL's three-valued logic makes `col != lit` and `col NOT IN (...)` evaluate to + NULL (not TRUE) when col is NULL, silently dropping the row from the WHERE + clause. The generated SQL must explicitly OR in an `IS NULL` check so that a + NULL value in a postcondition column is treated as failing the postcondition. + """ + schema = _schema_with_rules( + [ + ClassRule( + preconditions=AnonymousClassExpression( + slot_conditions={"type": SlotDefinition("type", equals_string="Human")}, + ), + postconditions=AnonymousClassExpression( + slot_conditions={"status": SlotDefinition("status", **slot_condition_kwargs)}, + ), + ) + ], + slots=[ + SlotDefinition("id", identifier=True), + SlotDefinition("type"), + SlotDefinition("status"), + ], + ) + gen = SQLValidationGenerator(schema) + sql = gen.generate_validation_queries() + + rule_query = next(q for q in sql.split("UNION ALL") if "'rule'" in q) + assert "status IS NULL" in rule_query + + +@pytest.mark.slow +def test_rule_interop_equals_string_null_is_violation(tmp_path): + """A NULL value in a postcondition equals_string column must be detected as a violation.""" + schema = _schema_with_rules( + [ + ClassRule( + preconditions=AnonymousClassExpression( + slot_conditions={"type": SlotDefinition("type", equals_string="Human")}, + ), + postconditions=AnonymousClassExpression( + slot_conditions={"status": SlotDefinition("status", equals_string="Alive")}, + ), + ) + ], + slots=[ + SlotDefinition("id", identifier=True), + SlotDefinition("type"), + SlotDefinition("status"), + ], + ) + table_gen = SQLTableGenerator(schema, dialect="sqlite") + ddl = table_gen.generate_ddl() + val_gen = SQLValidationGenerator(schema, dialect="sqlite", check_patterns=False) + validation_sql = val_gen.generate_validation_queries() + + db_path = tmp_path / "rule_null_test.db" + conn = sqlite3.connect(str(db_path)) + cursor = conn.cursor() + cursor.executescript(ddl) + + cursor.execute('INSERT INTO "LivingThings" (id, type, status) VALUES (?, ?, ?)', ("1", "Human", "Alive")) + cursor.execute('INSERT INTO "LivingThings" (id, type, status) VALUES (?, ?, ?)', ("2", "Elf", None)) + cursor.execute('INSERT INTO "LivingThings" (id, type, status) VALUES (?, ?, ?)', ("3", "Human", None)) + conn.commit() + + cursor.execute(validation_sql) + violations = cursor.fetchall() + conn.close() + + rule_violations = [v for v in violations if v[2] == "rule"] + violating_ids = {v[3] for v in rule_violations} + assert "3" in violating_ids, f"Expected record 3 (NULL status) to violate rule. Violations: {rule_violations}" + assert "2" not in violating_ids, f"Record 2 should not violate (precondition unmet). Violations: {rule_violations}" + + +def test_rule_slot_names_resolved_to_sql_columns(): + """Rule slot names must be resolved through alias/underscore.""" + schema = _schema_with_rules( + [ + ClassRule( + preconditions=AnonymousClassExpression( + slot_conditions={"driver status": SlotDefinition("driver status", equals_string="licensed")}, + ), + postconditions=AnonymousClassExpression( + slot_conditions={"age value": SlotDefinition("age value", minimum_value=18)}, + ), + ) + ], + slots=[ + SlotDefinition("id", identifier=True), + SlotDefinition("driver status"), + SlotDefinition("age value", alias="personAge", range="integer"), + ], + ) + validation_sql = SQLValidationGenerator(schema, dialect="sqlite").generate_validation_queries() + + rule_query = next(q for q in validation_sql.split("UNION ALL") if "'rule'" in q) + assert "driver_status" in rule_query, f"Spaced slot name not underscored: {rule_query}" + assert "driver status" not in rule_query, f"Raw schema slot name leaked into SQL: {rule_query}" + assert "personAge" in rule_query, f"Alias not resolved: {rule_query}" + assert "age value" not in rule_query, f"Raw schema slot name leaked into SQL: {rule_query}" + + +@pytest.mark.slow +def test_rule_interop_sqlite(tmp_path): + """End-to-end: create DB, insert violating data, run validation, verify detection.""" + schema = _schema_with_rules( + [ + ClassRule( + preconditions=AnonymousClassExpression( + slot_conditions={"type": SlotDefinition("type", equals_string="Human")}, + ), + postconditions=AnonymousClassExpression( + slot_conditions={"age": SlotDefinition("age", maximum_value=150)}, + ), + ) + ] + ) + # Generate DDL and validation + table_gen = SQLTableGenerator(schema, dialect="sqlite") + ddl = table_gen.generate_ddl() + val_gen = SQLValidationGenerator(schema, dialect="sqlite", check_patterns=False) + validation_sql = val_gen.generate_validation_queries() + + db_path = tmp_path / "rules_test.db" + conn = sqlite3.connect(str(db_path)) + cursor = conn.cursor() + cursor.executescript(ddl) + + # Valid: Human with age <= 150 + cursor.execute('INSERT INTO "LivingThings" (id, type, age) VALUES (?, ?, ?)', ("1", "Human", 30)) + # Valid: non-Human with age > 150 (precondition not met) + cursor.execute('INSERT INTO "LivingThings" (id, type, age) VALUES (?, ?, ?)', ("2", "Elf", 500)) + # INVALID: Human with age > 150 + cursor.execute('INSERT INTO "LivingThings" (id, type, age) VALUES (?, ?, ?)', ("3", "Human", 200)) + conn.commit() + + cursor.execute(validation_sql) + violations = cursor.fetchall() + + rule_violations = [v for v in violations if v[2] == "rule"] + assert len(rule_violations) >= 1, f"Expected rule violations but got: {violations}" + # The violating record should be id=3 + violating_ids = {v[3] for v in rule_violations} + assert "3" in violating_ids, f"Expected record 3 to violate rule. Violations: {rule_violations}" + + conn.close() + + +def test_unknown_dialect_fallback(caplog): + """Unknown dialects should log a warning and fall back to sqlite syntax (REGEXP, not ~).""" + b = SchemaBuilder() + b.add_slot(SlotDefinition("id", identifier=True)) + b.add_slot(SlotDefinition("email", pattern=r"^\S+@\S+$")) + b.add_class("Person", slots=["id", "email"]) + b.add_defaults() + + gen = SQLValidationGenerator(b.schema, dialect="mysql") + with caplog.at_level(logging.WARNING, logger="linkml.generators.sqlvalidationgen"): + queries = gen.generate_validation_queries() + + assert any("mysql" in record.message and "sqlite" in record.message for record in caplog.records) + assert gen.dialect == "sqlite" + # Should fall back to sqlite syntax + assert "REGEXP" in queries + assert "~" not in queries + + +def test_skip_mixin_classes(): + """Mixin classes should be excluded from generated queries.""" + b = SchemaBuilder() + b.add_slot(SlotDefinition("id", identifier=True)) + b.add_slot(SlotDefinition("name", required=True)) + b.add_class("HasName", slots=["id", "name"]) + b.add_defaults() + b.schema.classes["HasName"].mixin = True + + gen = SQLValidationGenerator(b.schema) + queries = gen.generate_validation_queries() + + assert "HasName" not in queries + + +def test_rule_no_postconditions_skipped(): + """Rule with no postconditions should be silently skipped (no 'rule' in output).""" + schema = _schema_with_rules( + [ + ClassRule( + preconditions=AnonymousClassExpression( + slot_conditions={"type": SlotDefinition("type", equals_string="Human")}, + ), + # no postconditions + ) + ] + ) + gen = SQLValidationGenerator(schema) + sql = gen.generate_validation_queries() + + assert "'rule'" not in sql + + +def test_rule_any_of_logs_warning(caplog): + """Unsupported class expression attributes (any_of) should log a warning.""" + schema = _schema_with_rules( + [ + ClassRule( + postconditions=AnonymousClassExpression( + slot_conditions={"age": SlotDefinition("age", maximum_value=150)}, + any_of=[ + AnonymousClassExpression( + slot_conditions={"type": SlotDefinition("type", equals_string="Human")} + ) + ], + ), + ) + ] + ) + gen = SQLValidationGenerator(schema) + with caplog.at_level(logging.WARNING): + sql = gen.generate_validation_queries() + + assert "any_of" in caplog.text + # The supported slot_conditions still produce a query + assert "age > 150" in sql + + +@pytest.mark.parametrize("combinator", ["any_of", "all_of", "none_of", "exactly_one_of"]) +def test_rule_precondition_only_combinator_skips_rule(caplog, combinator): + """A precondition expressed purely via an unsupported combinator must skip the whole rule. + + Dropping such a precondition would apply the postcondition to every row of the table, + producing false-positive violations. + """ + schema = _schema_with_rules( + [ + ClassRule( + preconditions=AnonymousClassExpression( + **{ + combinator: [ + AnonymousClassExpression( + slot_conditions={"type": SlotDefinition("type", equals_string="Human")} + ) + ] + } + ), + postconditions=AnonymousClassExpression( + slot_conditions={"age": SlotDefinition("age", maximum_value=150)}, + ), + ) + ] + ) + gen = SQLValidationGenerator(schema) + with caplog.at_level(logging.WARNING): + sql = gen.generate_validation_queries() + + assert combinator in caplog.text + assert "Skipping the rule" in caplog.text + # The rule must not be emitted at all: an unconditional "age > 150" check would flag + # non-Human rows that the precondition was meant to exclude. + assert "'rule'" not in sql + assert "age > 150" not in sql + + +def test_postgresql_casts_invalid_value(): + """PostgreSQL dialect should wrap invalid_value in CAST(... AS TEXT).""" + b = SchemaBuilder() + b.add_slot(SlotDefinition("id", identifier=True)) + b.add_slot(SlotDefinition("age", range="integer", minimum_value=0, maximum_value=120)) + b.add_class("Person", slots=["id", "age"]) + b.add_defaults() + + gen = SQLValidationGenerator(b.schema, dialect="postgresql") + queries = gen.generate_validation_queries() + + assert "CAST" in queries + assert "age AS TEXT" in queries + + +def test_include_comments_content(minimal_schema): + """Default include_comments=True should produce a header with expected content.""" + gen = SQLValidationGenerator(minimal_schema) + queries = gen.generate_validation_queries() + + assert "SQL Validation Queries" in queries + assert "LinkML" in queries + assert "-- " in queries # comment marker + + +@pytest.fixture +def no_identifier_schema(): + """Schema whose class has neither an identifier nor a key slot.""" + b = SchemaBuilder() + b.add_slot(SlotDefinition("value", range="integer", required=True, minimum_value=0)) + b.add_class("Measurement", slots=["value"]) + b.add_defaults() + return b.schema + + +@pytest.mark.parametrize( + "slots,dialect,expected_record_id", + [ + ([SlotDefinition("pid", identifier=True)], "sqlite", "pid AS record_id"), + ([SlotDefinition("code", key=True)], "sqlite", "code AS record_id"), + # an identifier wins over a key slot, regardless of declaration order + ( + [SlotDefinition("code", key=True), SlotDefinition("pid", identifier=True)], + "sqlite", + "pid AS record_id", + ), + # a slot merely named 'id' is not an identifier and must not become the record_id + ([SlotDefinition("id")], "sqlite", "NULL AS record_id"), + ([], "sqlite", "NULL AS record_id"), + ([], "postgresql", "CAST(NULL AS TEXT) AS record_id"), + ], + ids=["identifier", "key_only", "identifier_wins_over_key", "plain_slot_named_id", "neither", "neither_postgres"], +) +def test_record_id_column_selection(slots, dialect, expected_record_id, caplog): + """The record_id is the identifier slot, else the key slot, else NULL. + + A class needs neither in LinkML. Falling back to a hardcoded 'id' column would either + reference a column absent from the DDL - taking down the whole UNION ALL query - or + silently report an unrelated data slot as the identity of the violating record. + """ + b = SchemaBuilder() + for slot in [*slots, SlotDefinition("name", required=True)]: + b.add_slot(slot) + b.add_class("Record", slots=[s.name for s in slots] + ["name"]) + b.add_defaults() + + gen = SQLValidationGenerator(b.schema, dialect=dialect, include_comments=False) + with caplog.at_level(logging.WARNING, logger="linkml.generators.sqlvalidationgen"): + queries = gen.generate_validation_queries() + + assert expected_record_id in queries + # leading space so this does not match a legitimate 'pid AS record_id' + assert " id AS record_id" not in queries + # a NULL record_id is announced, and only then + assert ("no identifier or key slot" in caplog.text) == ("NULL" in expected_record_id) + + +def test_rule_on_class_without_identifier_selects_null_record_id(): + """The rule path builds its own table clause, and must resolve the record_id the same way.""" + b = SchemaBuilder() + b.add_slot(SlotDefinition("status")) + b.add_slot(SlotDefinition("age", range="integer")) + b.add_class("Person", slots=["status", "age"]) + b.add_defaults() + b.schema.classes["Person"].rules = [ + ClassRule( + preconditions=AnonymousClassExpression( + slot_conditions={"status": SlotDefinition("status", equals_string="adult")} + ), + postconditions=AnonymousClassExpression(slot_conditions={"age": SlotDefinition("age", minimum_value=18)}), + ) + ] + + gen = SQLValidationGenerator(b.schema, include_comments=False) + queries = gen.generate_validation_queries() + + assert "'rule'" in queries + assert "NULL AS record_id" in queries + assert "id AS record_id" not in queries + + +@pytest.mark.slow +def test_interop_class_without_identifier_executes(no_identifier_schema, tmp_path): + """Queries for an identifier-less class must run against the matching DDL. + + SQLValidationGenerator transforms with NO_FOREIGN_KEYS, under which no surrogate + primary key is injected, so the corresponding DDL is the one without foreign keys. + """ + ddl = SQLTableGenerator(no_identifier_schema, dialect="sqlite", use_foreign_keys=False).generate_ddl() + assert "id" not in ddl.split("CREATE TABLE")[1].split(";")[0] + + conn = sqlite3.connect(str(tmp_path / "no_identifier.db")) + cursor = conn.cursor() + cursor.executescript(ddl) + cursor.execute('INSERT INTO "Measurement" (value) VALUES (?)', (5,)) + cursor.execute('INSERT INTO "Measurement" (value) VALUES (?)', (-1,)) + conn.commit() + + validation_query = SQLValidationGenerator(no_identifier_schema, dialect="sqlite").generate_validation_queries() + cursor.execute(validation_query) + violations = cursor.fetchall() + conn.close() + + # one range violation, reported without a record_id + assert len(violations) == 1 + table_name, column_name, constraint_type, record_id, invalid_value = violations[0] + assert (table_name, column_name, constraint_type) == ("Measurement", "value", "range") + assert record_id is None + assert invalid_value == -1 From b1f865a31641d586253fd3bebfcf9b37db9a9111 Mon Sep 17 00:00:00 2001 From: kevinschaper <4535019+kevinschaper@users.noreply.github.com> Date: Wed, 29 Jul 2026 17:48:39 +0000 Subject: [PATCH 26/72] docs: update feature dashboard from compliance tests --- docs/generators/dashboard.md | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/docs/generators/dashboard.md b/docs/generators/dashboard.md index 81cb7f204b..a46a0c6270 100644 --- a/docs/generators/dashboard.md +++ b/docs/generators/dashboard.md @@ -45,19 +45,19 @@ Percentage of tests where the generator fully implements the feature (excluding | Generator | Implements | Partial | Ignores | N/A | Total | Score | |-----------|:----------:|:-------:|:-------:|:---:|:-----:|:-----:| -| Pydantic | 29 | 34 | 1 | 0 | 64 | 45% | -| Python DC | 16 | 38 | 10 | 0 | 64 | 25% | -| JSON Schema | 39 | 23 | 2 | 0 | 64 | 61% | -| Java | 0 | 24 | 40 | 0 | 64 | 0% | -| SHACL | 19 | 25 | 20 | 0 | 64 | 30% | -| ShEx | 0 | 24 | 40 | 0 | 64 | 0% | -| OWL | 0 | 26 | 38 | 0 | 64 | 0% | -| JSON-LD Ctx | 34 | 24 | 6 | 0 | 64 | 53% | -| SQLite DDL | 12 | 40 | 12 | 0 | 64 | 19% | -| Postgres DDL | 0 | 23 | 41 | 0 | 64 | 0% | -| Pandera | 14 | 28 | 22 | 0 | 64 | 22% | -| Polars Schema | 28 | 23 | 13 | 0 | 64 | 44% | -| sql_ddl_bigquery | 0 | 24 | 40 | 0 | 64 | 0% | +| Pydantic | 30 | 34 | 1 | 0 | 65 | 46% | +| Python DC | 17 | 38 | 10 | 0 | 65 | 26% | +| JSON Schema | 40 | 23 | 2 | 0 | 65 | 62% | +| Java | 0 | 24 | 41 | 0 | 65 | 0% | +| SHACL | 20 | 25 | 20 | 0 | 65 | 31% | +| ShEx | 0 | 24 | 41 | 0 | 65 | 0% | +| OWL | 0 | 26 | 39 | 0 | 65 | 0% | +| JSON-LD Ctx | 35 | 24 | 6 | 0 | 65 | 54% | +| SQLite DDL | 13 | 40 | 12 | 0 | 65 | 20% | +| Postgres DDL | 0 | 23 | 42 | 0 | 65 | 0% | +| Pandera | 15 | 28 | 22 | 0 | 65 | 23% | +| Polars Schema | 29 | 23 | 13 | 0 | 65 | 45% | +| sql_ddl_bigquery | 0 | 24 | 41 | 0 | 65 | 0% | ## Details by Category @@ -115,6 +115,7 @@ Percentage of tests where the generator fully implements the feature (excluding | Enum aliases | ✅ | ✅ | ✅ | ❓ | ✅ | ❓ | ❓ | ✅ | ✅ | ❓ | ✅ | ✅ | ❓ | | Enum hierarchy | ✅ | ✅ | ✅ | ❓ | ✅ | ❓ | ❓ | ✅ | ⚠️ | ❓ | ⚠️ | ✅ | ❓ | | Non-standard enum names | ⚠️ | ⚠️ | ✅ | ❓ | ⚠️ | ❓ | ⚠️ | ✅ | ⚠️ | ❓ | ⚠️ | ❓ | ❓ | +| Optional enum nullability | ✅ | ✅ | ✅ | ❓ | ✅ | ❓ | ❓ | ✅ | ✅ | ❓ | ✅ | ✅ | ❓ | | Static enums | ⚠️ | ⚠️ | ✅ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | | Typed permissible values | ✅ | ✅ | ✅ | ❓ | ✅ | ❓ | ❓ | ✅ | ⚠️ | ❓ | ⚠️ | ✅ | ❓ | From e5d97c45a6b84e0cb5fbb9665a965c4b0c70194f Mon Sep 17 00:00:00 2001 From: Damien Goutte-Gattat Date: Wed, 29 Jul 2026 19:00:44 +0100 Subject: [PATCH 27/72] Add @gouttegd as "code owner" for the Java generator. (#3817) Co-authored-by: Kevin Schaper --- .github/CODEOWNERS | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 2552992710..8e617936f2 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -15,6 +15,12 @@ # --- Per-subsystem ownership (opt-in) --- +# javagen +/docs/generators/java.rst @gouttegd +/packages/linkml/src/linkml/generators/javagen.py @gouttegd +/packages/linkml/src/linkml/generators/javagen/ @gouttegd +/tests/linkml/test_generators/test_javagen.py @gouttegd + # pydanticgen: /packages/linkml/src/linkml/generators/pydanticgen/ @sneakers-the-rat @kevinschaper /docs/generators/pydantic.rst @sneakers-the-rat @kevinschaper From 5e337469023b6807733c1f1359366bd0786b5c5b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 1 Aug 2026 07:08:36 +0000 Subject: [PATCH 28/72] build(deps): bump the github-actions group across 1 directory with 11 updates Bumps the github-actions group with 11 updates in the / directory: | Package | From | To | | --- | --- | --- | | [actions/checkout](https://github.com/actions/checkout) | `6` | `7` | | [actions/setup-python](https://github.com/actions/setup-python) | `6.2.0` | `7.0.0` | | [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) | `8.2.0` | `9.0.0` | | [actions/cache](https://github.com/actions/cache) | `5` | `6` | | [docker/metadata-action](https://github.com/docker/metadata-action) | `6.1.0` | `6.2.0` | | [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) | `4.1.0` | `4.2.0` | | [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) | `4.1.0` | `4.2.0` | | [docker/login-action](https://github.com/docker/login-action) | `4.2.0` | `4.5.1` | | [docker/build-push-action](https://github.com/docker/build-push-action) | `7.2.0` | `7.3.0` | | [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) | `1.14.0` | `1.14.1` | | [actions/stale](https://github.com/actions/stale) | `10` | `10.4.0` | Updates `actions/checkout` from 6 to 7 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v6...v7) Updates `actions/setup-python` from 6.2.0 to 7.0.0 - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v6.2.0...v7.0.0) Updates `astral-sh/setup-uv` from 8.2.0 to 9.0.0 - [Release notes](https://github.com/astral-sh/setup-uv/releases) - [Commits](https://github.com/astral-sh/setup-uv/compare/v8.2.0...v9.0.0) Updates `actions/cache` from 5 to 6 - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v5...v6) Updates `docker/metadata-action` from 6.1.0 to 6.2.0 - [Release notes](https://github.com/docker/metadata-action/releases) - [Commits](https://github.com/docker/metadata-action/compare/v6.1.0...v6.2.0) Updates `docker/setup-qemu-action` from 4.1.0 to 4.2.0 - [Release notes](https://github.com/docker/setup-qemu-action/releases) - [Commits](https://github.com/docker/setup-qemu-action/compare/v4.1.0...v4.2.0) Updates `docker/setup-buildx-action` from 4.1.0 to 4.2.0 - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/v4.1.0...v4.2.0) Updates `docker/login-action` from 4.2.0 to 4.5.1 - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v4.2.0...v4.5.1) Updates `docker/build-push-action` from 7.2.0 to 7.3.0 - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v7.2.0...v7.3.0) Updates `pypa/gh-action-pypi-publish` from 1.14.0 to 1.14.1 - [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases) - [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.14.0...v1.14.1) Updates `actions/stale` from 10 to 10.4.0 - [Release notes](https://github.com/actions/stale/releases) - [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/stale/compare/v10...v10.4.0) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions - dependency-name: actions/setup-python dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions - dependency-name: astral-sh/setup-uv dependency-version: 9.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions - dependency-name: actions/cache dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions - dependency-name: docker/metadata-action dependency-version: 6.2.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: docker/setup-qemu-action dependency-version: 4.2.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: docker/setup-buildx-action dependency-version: 4.2.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: docker/login-action dependency-version: 4.5.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: docker/build-push-action dependency-version: 7.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: pypa/gh-action-pypi-publish dependency-version: 1.14.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: github-actions - dependency-name: actions/stale dependency-version: 10.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions ... Signed-off-by: dependabot[bot] --- .github/workflows/check-external-links.yaml | 8 ++--- .github/workflows/dependency-audit.yaml | 6 ++-- .github/workflows/doc-pages.yaml | 6 ++-- .github/workflows/docker-build.yaml | 12 ++++---- .github/workflows/docs-test.yaml | 6 ++-- .github/workflows/main.yaml | 30 +++++++++---------- .github/workflows/metamodel-compat.yaml | 6 ++-- .github/workflows/pypi-publish.yaml | 8 ++--- .github/workflows/rustgen.yaml | 6 ++-- .github/workflows/stale.yaml | 2 +- .github/workflows/typedb-integration.yaml | 6 ++-- .../workflows/update-feature-dashboard.yaml | 6 ++-- 12 files changed, 51 insertions(+), 51 deletions(-) diff --git a/.github/workflows/check-external-links.yaml b/.github/workflows/check-external-links.yaml index 8263c3f549..d561b99cf4 100644 --- a/.github/workflows/check-external-links.yaml +++ b/.github/workflows/check-external-links.yaml @@ -14,15 +14,15 @@ jobs: timeout-minutes: 30 steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: Set up Python 3. - uses: actions/setup-python@v6.2.0 + uses: actions/setup-python@v7.0.0 with: python-version: "3.12" - name: Install uv - uses: astral-sh/setup-uv@v8.2.0 + uses: astral-sh/setup-uv@v9.0.0 with: version: ${{ env.UV_VERSION }} @@ -30,7 +30,7 @@ jobs: run: uv pip install --system requests - name: Restore link cache - uses: actions/cache@v5 + uses: actions/cache@v6 with: path: .github/link-cache.csv key: link-cache-${{ github.run_id }} diff --git a/.github/workflows/dependency-audit.yaml b/.github/workflows/dependency-audit.yaml index a3832a364b..c2ac4dfced 100644 --- a/.github/workflows/dependency-audit.yaml +++ b/.github/workflows/dependency-audit.yaml @@ -24,7 +24,7 @@ jobs: steps: - name: Check out repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: # Full history so we can diff against a base ref to see whether the # resolved dependency set changed (see "Detect dependency changes"). @@ -32,13 +32,13 @@ jobs: # Pin uv to a known-good, recent release. - name: Install uv and setup uv caching - uses: astral-sh/setup-uv@v8.2.0 + uses: astral-sh/setup-uv@v9.0.0 with: version: ${{ env.UV_VERSION }} enable-cache: true - name: Set up Python - uses: actions/setup-python@v6.2.0 + uses: actions/setup-python@v7.0.0 id: setup-python with: python-version: 3.13 diff --git a/.github/workflows/doc-pages.yaml b/.github/workflows/doc-pages.yaml index 9cc6533615..57ebe27e03 100644 --- a/.github/workflows/doc-pages.yaml +++ b/.github/workflows/doc-pages.yaml @@ -13,7 +13,7 @@ jobs: python-version: [ "3.12" ] steps: - name: Check out repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 @@ -24,13 +24,13 @@ jobs: git fetch upstream --tags - name: Install uv - uses: astral-sh/setup-uv@v8.2.0 + uses: astral-sh/setup-uv@v9.0.0 with: version: ${{ env.UV_VERSION }} enable-cache: true - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6.2.0 + uses: actions/setup-python@v7.0.0 id: setup-python with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/docker-build.yaml b/.github/workflows/docker-build.yaml index 935414e83f..12a55e2f72 100644 --- a/.github/workflows/docker-build.yaml +++ b/.github/workflows/docker-build.yaml @@ -19,13 +19,13 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Docker metadata id: meta - uses: docker/metadata-action@v6.1.0 + uses: docker/metadata-action@v6.2.0 with: images: linkml/linkml tags: | @@ -42,20 +42,20 @@ jobs: echo "Ref: ${{ github.ref }}" - name: Set up QEMU - uses: docker/setup-qemu-action@v4.1.0 + uses: docker/setup-qemu-action@v4.2.0 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v4.1.0 + uses: docker/setup-buildx-action@v4.2.0 - name: Login to DockerHub if: startsWith(github.ref, 'refs/tags/v') - uses: docker/login-action@v4.2.0 + uses: docker/login-action@v4.5.1 with: username: cjmungall password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Build and push - uses: docker/build-push-action@v7.2.0 + uses: docker/build-push-action@v7.3.0 with: context: . platforms: linux/amd64,linux/arm64/v8 diff --git a/.github/workflows/docs-test.yaml b/.github/workflows/docs-test.yaml index 067277eaa7..61a9c773e2 100644 --- a/.github/workflows/docs-test.yaml +++ b/.github/workflows/docs-test.yaml @@ -19,7 +19,7 @@ jobs: python-version: ["3.12"] steps: - name: Check out repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 @@ -30,13 +30,13 @@ jobs: git fetch upstream --tags - name: Install uv - uses: astral-sh/setup-uv@v8.2.0 + uses: astral-sh/setup-uv@v9.0.0 with: version: ${{ env.UV_VERSION }} enable-cache: true - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6.2.0 + uses: actions/setup-python@v7.0.0 id: setup-python with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index a2c8860602..70138c7f8b 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -16,13 +16,13 @@ jobs: quality-checks: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 - name: Install uv - uses: astral-sh/setup-uv@v8.2.0 + uses: astral-sh/setup-uv@v9.0.0 with: version: ${{ env.UV_VERSION }} - - uses: actions/setup-python@v6.2.0 + - uses: actions/setup-python@v7.0.0 with: python-version: 3.13 - name: Check pyproject.toml and uv.lock @@ -59,7 +59,7 @@ jobs: steps: - name: Check out repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 @@ -70,13 +70,13 @@ jobs: git fetch upstream --tags - name: Install uv and setup uv caching - uses: astral-sh/setup-uv@v8.2.0 + uses: astral-sh/setup-uv@v9.0.0 with: version: ${{ env.UV_VERSION }} enable-cache: true - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6.2.0 + uses: actions/setup-python@v7.0.0 id: setup-python with: python-version: ${{ matrix.python-version }} @@ -131,15 +131,15 @@ jobs: shell: bash steps: - name: Check out repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: Install uv - uses: astral-sh/setup-uv@v8.2.0 + uses: astral-sh/setup-uv@v9.0.0 with: version: ${{ env.UV_VERSION }} enable-cache: true - name: Set up Python - uses: actions/setup-python@v6.2.0 + uses: actions/setup-python@v7.0.0 id: setup-python with: python-version: ${{ matrix.python-version }} @@ -181,15 +181,15 @@ jobs: shell: bash steps: - name: Check out repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: Install uv - uses: astral-sh/setup-uv@v8.2.0 + uses: astral-sh/setup-uv@v9.0.0 with: version: ${{ env.UV_VERSION }} enable-cache: true - name: Set up Python - uses: actions/setup-python@v6.2.0 + uses: actions/setup-python@v7.0.0 id: setup-python with: python-version: ${{ matrix.python-version }} @@ -216,17 +216,17 @@ jobs: runs-on: ubuntu-latest if: github.event_name == 'pull_request' steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: fetch-depth: 0 - name: Set up Python - uses: actions/setup-python@v6.2.0 + uses: actions/setup-python@v7.0.0 with: python-version: 3.13 - name: Install uv - uses: astral-sh/setup-uv@v8.2.0 + uses: astral-sh/setup-uv@v9.0.0 with: version: ${{ env.UV_VERSION }} - name: Build source and wheel archives diff --git a/.github/workflows/metamodel-compat.yaml b/.github/workflows/metamodel-compat.yaml index 1406593a18..b6293d933f 100644 --- a/.github/workflows/metamodel-compat.yaml +++ b/.github/workflows/metamodel-compat.yaml @@ -21,16 +21,16 @@ jobs: shell: bash steps: - name: Check out repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: Install uv - uses: astral-sh/setup-uv@v8.2.0 + uses: astral-sh/setup-uv@v9.0.0 with: version: ${{ env.UV_VERSION }} enable-cache: true - name: Set up Python - uses: actions/setup-python@v6.2.0 + uses: actions/setup-python@v7.0.0 with: python-version: "3.12" diff --git a/.github/workflows/pypi-publish.yaml b/.github/workflows/pypi-publish.yaml index 67c0278e2a..79fd9e0f0f 100644 --- a/.github/workflows/pypi-publish.yaml +++ b/.github/workflows/pypi-publish.yaml @@ -12,18 +12,18 @@ jobs: name: Build Python 🐍 distributions 📦 for publishing to PyPI runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v7 with: # Checkout the code including tags required for dynamic versioning fetch-depth: 0 - name: Set up Python - uses: actions/setup-python@v6.2.0 + uses: actions/setup-python@v7.0.0 with: python-version: 3.13 - name: Install uv - uses: astral-sh/setup-uv@v8.2.0 + uses: astral-sh/setup-uv@v9.0.0 with: version: ${{ env.UV_VERSION }} @@ -56,6 +56,6 @@ jobs: - name: Publish package 📦 to PyPI if: github.event_name == 'release' - uses: pypa/gh-action-pypi-publish@v1.14.0 + uses: pypa/gh-action-pypi-publish@v1.14.1 with: verbose: true diff --git a/.github/workflows/rustgen.yaml b/.github/workflows/rustgen.yaml index 13fafb1d32..418ac9d222 100644 --- a/.github/workflows/rustgen.yaml +++ b/.github/workflows/rustgen.yaml @@ -17,7 +17,7 @@ jobs: shell: bash steps: - name: Check out repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 @@ -28,13 +28,13 @@ jobs: git fetch upstream --tags - name: Install uv and setup uv caching - uses: astral-sh/setup-uv@v8.2.0 + uses: astral-sh/setup-uv@v9.0.0 with: version: ${{ env.UV_VERSION }} enable-cache: true - name: Set up Python - uses: actions/setup-python@v6.2.0 + uses: actions/setup-python@v7.0.0 with: python-version: '3.12' diff --git a/.github/workflows/stale.yaml b/.github/workflows/stale.yaml index f37d43b890..ab395df594 100644 --- a/.github/workflows/stale.yaml +++ b/.github/workflows/stale.yaml @@ -13,7 +13,7 @@ jobs: permissions: issues: write steps: - - uses: actions/stale@v10 + - uses: actions/stale@v10.4.0 with: # Timeframes from issue #3080 days-before-stale: 1080 # 3 years diff --git a/.github/workflows/typedb-integration.yaml b/.github/workflows/typedb-integration.yaml index 49e9361973..60e79636cd 100644 --- a/.github/workflows/typedb-integration.yaml +++ b/.github/workflows/typedb-integration.yaml @@ -22,9 +22,9 @@ jobs: --health-retries 10 --health-start-period 30s steps: - - uses: actions/checkout@v6 - - uses: astral-sh/setup-uv@v8.2.0 - - uses: actions/setup-python@v6.2.0 + - uses: actions/checkout@v7 + - uses: astral-sh/setup-uv@v9.0.0 + - uses: actions/setup-python@v7.0.0 with: python-version: "3.12" - run: uv sync --group typedb --group tests-extra diff --git a/.github/workflows/update-feature-dashboard.yaml b/.github/workflows/update-feature-dashboard.yaml index 15a9d3d17d..9e88910fa4 100644 --- a/.github/workflows/update-feature-dashboard.yaml +++ b/.github/workflows/update-feature-dashboard.yaml @@ -21,7 +21,7 @@ jobs: pull-requests: write steps: - name: Check out repository - uses: actions/checkout@v6.0.2 + uses: actions/checkout@v7 with: fetch-depth: 0 @@ -32,13 +32,13 @@ jobs: git fetch upstream --tags - name: Install uv - uses: astral-sh/setup-uv@v8.2.0 + uses: astral-sh/setup-uv@v9.0.0 with: version: ${{ env.UV_VERSION }} enable-cache: true - name: Set up Python - uses: actions/setup-python@v6.2.0 + uses: actions/setup-python@v7.0.0 with: python-version: "3.12" From 35fcdbc2c2439a59a4cfa5e286beca08a5a2338d Mon Sep 17 00:00:00 2001 From: Damien Goutte-Gattat Date: Thu, 30 Jul 2026 13:20:04 +0100 Subject: [PATCH 29/72] doc: Update the documentation about the Java generator. The Java generator received several significant changes over the past few months, but its documentation had never been updated accordingly. This commit takes care of that. --- docs/generators/java.rst | 273 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 254 insertions(+), 19 deletions(-) diff --git a/docs/generators/java.rst b/docs/generators/java.rst index 3736c9e718..dbb78e8b6f 100644 --- a/docs/generators/java.rst +++ b/docs/generators/java.rst @@ -4,7 +4,7 @@ Java Overview -------- -The Java Generator produces java class files from a linkml model, +The Java generator produces java class files from a LinkML model, with optional support for user-supplied jinja2 templates to generate classes with alternate annotations or additional documentation. @@ -27,31 +27,264 @@ Code .. autoclass:: JavaGenerator :members: serialize -Additional Notes ----------------- +Configurable Behaviors +---------------------- -The Java generator's default template uses Project Lombok's `@Data `__ annotation, which provides getters, setters, equals and hashcode functionality. +Rendering of Enumerations +^^^^^^^^^^^^^^^^^^^^^^^^^ +LinkML enumerations can be rendered in two ways: + +* as plain `String` objects: that is, the enumeration themselves are + *not* rendered at all, and slots whose range is set to an enumeration + are rendered as `String`-typed fields; +* as standard Java ``enum`` objects. + +For backwards compatibility reasons, the default behavior is to render +enumerations as `String` objects. Use the ``--true-enums`` option +(from the command line) or the ``true_enums`` named parameter (in the +`JavaGenerator` constructor) to render LinkML enumerations as standard +Java ``enum`` objects. Of note, this settings applies to all enumerations +defined in the LinkML schema – it is not possible to render some +enumerations as `String` objects and others as standard ``enum`` +objects. + +Use of Slot Aliases +^^^^^^^^^^^^^^^^^^^ + +Slots in a LinkML schema can optionally have an +`alias `__, which, if +present, is intended to be “used instead of the actual slot name”. + +By default, the Java generator always derives the name of a field in a +class from the actual name of the slot, *not* from its alias. Use the +``--use-aliases`` option (from the command line) or the ``use_aliases`` +named parameter (in the `JavaGenerator` constructor) to force the +generator to honor the presence of a slot alias. + +For example, given the definition of the ``slot_definitions`` slot in +LinkML’s own metamodel: + +.. code-block:: yaml + + slot_definitions: + domain: schema_definition + multivalued: true + range: slot_definition + inlined: true + alias: slots + +the generator will, by default, render this slot as a field named +``slotDefinitions`` (derived from the actual slot name, ignoring the +``slots`` alias): + +.. code-block:: java + + private List slotDefinitions; + +With ``--use-aliases``, that slot will instead be rendered as: + +.. code-block:: java + + private List slots; + +Of note, when using the ``org.incenp.linkml`` template variant, the slot +alias, when present, is always used to determine how the slot is +expected to be serialised in the JSON or YAML serialisations; the +``--use-aliases`` option only affects the symbol use to represent the +slot in the Java code. + +Generating Visitor Patterns +--------------------------- + +The Java generator includes a built-in feature to easily implement a +`visitor pattern `__ over +a class hierarchy defined in a LinkML schema. + +Assuming the following schema (simplified excerpt from the +`KGCL Schema `__): + +.. code-block:: yaml + + classes: + Change: + description: Any change perform on an ontology or knowledge graph. + slots: + - id + - type + + SimpleChange: + is_a: Change + description: A change that is about a single ontology element. + slots: + - old_value + - new_value + + ComplexChange: + is_a: Change + description: A change that is a composition of other changes. + slots: + - change_set + + # Several dozens of other subclasses (direct or indirect) of Change, + # representing various specialized types of change... + +Calling the Java generator with ``--visitor Change`` (on the command +line; ``visitors=["Change"]`` when calling the ``serialize`` method) +will cause the generator to + +(a) create a `IChangeVisitor` interface containing a ``visit`` method +for each subclass of `Change` (and for `Change` itself): + +.. code-block:: java + + public interface IChangeVisitor { + public void visit(Change visited); + public void visit(SimpleChange visited); + public void visit(ComplexChange visited); + /* and so on for all other subclasses... */ + } + +(b) add a ``accept(IChangeVisitor)`` method to the `Change` class and to +all its subclasses, e.g. in ``SimpleChange.java``: + +.. code-block:: java + + public class SimpleChange extends Change { + + /* Normal code generated for the SimpleChange class... */ + + public void accept(IChangeVisitor visitor) { + visitor.visit(this); + } + } + +Template Variants +----------------- + +The Java generator offers different templates allowing to generate +different “flavors” of Java code to represent the same LinkML schema. + +A set of template (hereafter called a “template variant”) is selected on +the command line by the ``--template-variant`` option, or in Python code +by the ``template_variant`` named parameter to the ``serialize`` method. + +LinkML currently provides three Java template variants: + +* the default variant; +* the `records` variant; +* and the `org.incenp.linkml` variant. + +Default Variant +^^^^^^^^^^^^^^^ + +The default template variant (which is used when no other variant is +explicitly requested) generates Java classes that use Project Lombok’s +`@Data `__ annotations to provide getters, +setters, equals and hashcode functionality. + +Records Variant +^^^^^^^^^^^^^^^ + +The `records` variant represents LinkML classes as Java +`Record classes `__, which are intended to +hold *immutable data*. + +Note that Record classes are only available since Java 14 as a feature +preview, and as an official feature since Java 16. + +Also note that a Record class cannot extend another class. If a class +`Bar` is defined in a LinkML schema as extending a class `Foo`, the +`records` variant will generate a Java `Bar` class that will contain all +the slots from the `Foo` class but that will *not* be a subclass of +`Foo` (meaning for example that it will not be possible to assign an +instance of `Bar` to a `Foo`-typed slot). This makes the `records` +variant unlikely to be suitable for schemas that have complex class +hierarchies. + +org.incenp.linkml Variant +^^^^^^^^^^^^^^^^^^^^^^^^^ + +The `org.incenp.linkml` variant generates Java code that is suitable for +use with the `LinkML-Java `__ +runtime library – that is, code that meets the requirements set forth in +the `runtime documentation `__. + +This allows to use said runtime to easily load data (conformant to the +LinkML schema from which the code was generated) from files into the +Java in-memory representation, and conversely to dump data from the +Java representation into files. + +Template Selection Logic +------------------------ + +The template selection logic used by the Java generator allows to +fine-tune which template is used for any given class or enum. + +When generating the code for a given class *Foo*, and assuming a +template variant *V* has been requested (with ``--template-variant=V``), +the generator will look up for the following template files, using the +first one that it finds: + +* ``Foo-V.jinja2`` (the *V* variant template specific for the *Foo* + class); +* ``class-V.jinja``` (the generic *V* variant template for all classes); +* ``Foo.jinja2`` (default template specific for the *Foo* class); +* ``class.jinja2`` (generic default template for all classes). + +When no variant is explicitly requested, the first two lookups are +skipped, meaning the generator will look up first for ``Foo.jinja2`` and +then for ``class.jinja2``. + +When the ``--true-enums`` option is enabled, the same logic will also be +used to find the template file to render an enumeration *Bar*: + +* ``Bar-V.jinja2`` (the *V* variant template specific for the *Bar* + enumeration); +* ``enum-V.jinja2`` (the generic *V* variant template for all + enumerations); +* ``Bar.jinja2`` (default template specific for the *Bar* enumeration); +* ``enum.jinja2`` (generic default template for all enumerations). + +By default, all templates are looked up in the generator’s internal +template directory. Use the ``--template-dir=D`` option to make the +generator look up first in the specified directory *D*; any template +file found in that directory will take precedence over the templates +from the internal directory. + +Lastly, use the ``--template-file=F`` option to force the generator to +always use the specified template. This overrides all the logic +described above. + +Examples +-------- Biolink Example ---------------- +^^^^^^^^^^^^^^^ + +This example illustrates how to generate a Java package containing a +Java representation of the Biolink model, using the default +(Lombok-dependent) templates. -Begin by downloading the Biolink Model YAML and adding a virtual environment and installing linkml. +This assumes a working installation of LinkML. Check the +:doc:`Quick Install Guide <../intro/install>` if needed. + +Begin by downloading the YAML file containing the Biolink schema: .. code-block:: bash curl -OJ https://raw.githubusercontent.com/biolink/biolink-model/master/biolink-model.yaml - python3 -m venv venv - source venv/bin/activate - pip install linkml -Now generate the classes using the `gen-java` command +Now generate the classes using the `generate java` command: .. code-block:: bash - gen-java --package org.biolink.model --output-directory org/biolink/model biolink-model.yaml + linkml generate java --package org.biolink.model \ + --output-directory org/biolink/model \ + biolink-model.yaml -Finally, fetch the Lombok jar, build the java classes and package into a jar file +Finally, fetch the Lombok jar, build the java classes and package into a +jar file: .. code-block:: bash @@ -59,12 +292,11 @@ Finally, fetch the Lombok jar, build the java classes and package into a jar fil javac org/biolink/model/*.java -cp lombok-1.18.20.jar jar -cf biolink-model.jar org - Alternate Template Example --------------------------- - +^^^^^^^^^^^^^^^^^^^^^^^^^^ -Here is an alternate template using Hibernate JPA annotations, named `example_template.java.jinja2` +Here is an alternate template using Hibernate JPA annotations, named +``example_template.java.jinja2``: .. code-block:: @@ -89,9 +321,12 @@ Here is an alternate template using Hibernate JPA annotations, named `example_te } -The alternate template for the generator can be specified with the `--template_file` option +The alternate template for the generator can be specified with the +``--template-file`` option: .. code-block:: - gen-java --package org.biolink.model --output-directory org/biolink/model \ - --template_file example_template.java.jinja2 biolink-model.yaml + linkml generate java --package org.biolink.model \ + --output-directory org/biolink/model \ + --template-file example_template.java.jinja2 \ + biolink-model.yaml From ee91123527efe416f4f42daf49acb93515404086 Mon Sep 17 00:00:00 2001 From: Nico Matentzoglu Date: Thu, 23 Jul 2026 09:00:43 +0300 Subject: [PATCH 30/72] Require core team approval for LinkML PRs --- .github/CODEOWNERS | 12 ++++++---- docs/maintainers/codeowners.md | 28 +++++++++++++++-------- docs/maintainers/contributor-hierarchy.md | 6 ++--- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 8e617936f2..cd49d25843 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,11 +1,13 @@ # LinkML CODEOWNERS — DRAFT (see linkml/linkml#3140) # -# Opt-in model: no default (`*`) rule. Paths not listed here have no required -# CODEOWNER and are reviewed normally. Rules only appear where someone has -# explicitly volunteered to steward an area. +# Default model: all paths require core-team approval unless a more specific +# CODEOWNER rule applies. Later rules override earlier ones (last match wins), +# so per-subsystem rules below take precedence over the default for their paths. # # Process for adding rules: docs/maintainers/codeowners.md -# Later rules override earlier ones for matched paths. + +# --- Default: require core-team approval everywhere --- +* @linkml/core-team # --- CODEOWNERS and governance docs --- /.github/CODEOWNERS @linkml/core-team @@ -13,7 +15,7 @@ /docs/maintainers/codeowners.md @linkml/core-team /docs/maintainers/generator-governance.md @linkml/core-team -# --- Per-subsystem ownership (opt-in) --- +# --- Per-subsystem ownership (overrides the default for these paths) --- # javagen /docs/generators/java.rst @gouttegd diff --git a/docs/maintainers/codeowners.md b/docs/maintainers/codeowners.md index 4aac4617fe..fdfd64cda0 100644 --- a/docs/maintainers/codeowners.md +++ b/docs/maintainers/codeowners.md @@ -9,24 +9,34 @@ For the underlying GitHub mechanics, see the upstream [CODEOWNERS documentation](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners). This page only covers how LinkML uses it. -## The LinkML model: opt-in stewardship +## The LinkML model: core-team default with per-area stewardship -LinkML uses an **opt-in** model. The `CODEOWNERS` file contains: +LinkML uses a **default-rule** model. The `CODEOWNERS` file contains: -- **No default (`*`) rule.** Paths that no one has claimed are reviewed - normally, exactly as they were before CODEOWNERS existed. CODEOWNERS does - not create a new approval gate for the rest of the codebase. +- **A default (`*`) rule** requiring `@linkml/core-team` approval on any path + not covered by a more specific rule. This closes the gap where a + write-access holder could merge a PR touching an unclaimed area without any + core-team sign-off. Because GitHub applies the *last* matching rule, the + per-subsystem rules below still take precedence over the default for their + own paths. - **Per-generator / per-subsystem rules** for specific directories (e.g. `packages/linkml/src/linkml/generators/pydanticgen/`, `packages/linkml/src/linkml/generators/yarrrmlgen.py`) where a contributor - has explicitly volunteered to steward the code. The baseline for - identifying candidate stewards per generator is - [Generator and Validator Governance](generator-governance.md), which - records contributor history from `git blame`. + has explicitly volunteered to steward the code. These override the default + for their paths. The baseline for identifying candidate stewards per + generator is [Generator and Validator Governance](generator-governance.md), + which records contributor history from `git blame`. - **Governance rules** — `CODEOWNERS` itself and the governance documents in `docs/maintainers/` are owned by `@linkml/core-team` to prevent accidental self-appointments. +```{note} +The default rule only has teeth if the branch protection rule **"Require +review from Code Owners"** is enabled on `main`. Without it, GitHub records +the code-owner requirement but does not block merges. Enabling that setting +requires [admin](contributor-hierarchy.md) access. +``` + Implications: - Being listed in `CODEOWNERS` does **not** grant repository write access. diff --git a/docs/maintainers/contributor-hierarchy.md b/docs/maintainers/contributor-hierarchy.md index 49e25df652..b144ee5bc5 100644 --- a/docs/maintainers/contributor-hierarchy.md +++ b/docs/maintainers/contributor-hierarchy.md @@ -67,9 +67,9 @@ Team: [`core-team`](https://github.com/orgs/linkml/teams/core-team) Capabilities: - All collaborator capabilities -- Can review and approve PRs anywhere in the monorepo (team write access is - sufficient; CODEOWNER approval is only required for paths explicitly listed - in the [CODEOWNERS](codeowners.md) file) +- Can review and approve PRs anywhere in the monorepo. By default, core-team + approval is what the [CODEOWNERS](codeowners.md) file requires everywhere; + paths with a per-subsystem rule additionally require that area's CODEOWNER - May invoke the [1-month CODEOWNER fallback](codeowners.md#avoiding-review-bottlenecks-the-1-month-fallback) to approve stalled PRs in areas with unresponsive CODEOWNERS - Still subject to branch protection rules (cannot force-push, etc.) From 1639634e024f306f4075d4f275799990838a1ae6 Mon Sep 17 00:00:00 2001 From: Corey Cox <69321580+amc-corey-cox@users.noreply.github.com> Date: Fri, 7 Aug 2026 12:00:26 -0500 Subject: [PATCH 31/72] fix(runtime): sync vendored meta.yaml with upstream linkml-model --- .../linkml_model/model/schema/meta.yaml | 3 + .../linkml/test_base/__snapshots__/meta.json | 12 + .../linkml/test_base/__snapshots__/meta.shex | 118 +++++----- tests/linkml/test_base/__snapshots__/meta.ttl | 220 +++++++++--------- 4 files changed, 187 insertions(+), 166 deletions(-) diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/schema/meta.yaml b/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/schema/meta.yaml index 4b1b651408..c8ccef4e41 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/schema/meta.yaml +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/schema/meta.yaml @@ -50,6 +50,9 @@ prefixes: qudt: http://qudt.org/schema/qudt/ cdisc: http://rdf.cdisc.org/mms# SIO: http://semanticscience.org/resource/SIO_ + dcterms: http://purl.org/dc/terms/ + rdfs: http://www.w3.org/2000/01/rdf-schema# + rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# default_prefix: linkml default_range: string diff --git a/tests/linkml/test_base/__snapshots__/meta.json b/tests/linkml/test_base/__snapshots__/meta.json index 37581d3e9f..f815db6f84 100644 --- a/tests/linkml/test_base/__snapshots__/meta.json +++ b/tests/linkml/test_base/__snapshots__/meta.json @@ -83,6 +83,18 @@ { "prefix_prefix": "SIO", "prefix_reference": "http://semanticscience.org/resource/SIO_" + }, + { + "prefix_prefix": "dcterms", + "prefix_reference": "http://purl.org/dc/terms/" + }, + { + "prefix_prefix": "rdfs", + "prefix_reference": "http://www.w3.org/2000/01/rdf-schema#" + }, + { + "prefix_prefix": "rdf", + "prefix_reference": "http://www.w3.org/1999/02/22-rdf-syntax-ns#" } ], "emit_prefixes": [ diff --git a/tests/linkml/test_base/__snapshots__/meta.shex b/tests/linkml/test_base/__snapshots__/meta.shex index 00dc71c76a..156cc7cf49 100644 --- a/tests/linkml/test_base/__snapshots__/meta.shex +++ b/tests/linkml/test_base/__snapshots__/meta.shex @@ -12,7 +12,7 @@ PREFIX oslc: PREFIX schema1: PREFIX bibo: PREFIX qudt: -PREFIX dcterms: +PREFIX dc1: PREFIX oboInOwl: @@ -132,7 +132,7 @@ PREFIX oboInOwl: @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -141,7 +141,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -155,13 +155,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] ? @@ -257,7 +257,7 @@ PREFIX oboInOwl: @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -266,7 +266,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -280,13 +280,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] ? @@ -366,7 +366,7 @@ PREFIX oboInOwl: @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -375,7 +375,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -389,12 +389,12 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] ? @@ -404,7 +404,7 @@ PREFIX oboInOwl: { ( $ ( skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -413,7 +413,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -427,13 +427,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] ? @@ -473,7 +473,7 @@ PREFIX oboInOwl: @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -482,7 +482,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -496,13 +496,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] ? @@ -524,14 +524,14 @@ PREFIX oboInOwl: @ ? ; @ ? ; @ * ; - dcterms:conformsTo @ ? ; + dc1:conformsTo @ ? ; @ * ; @ * ; @ * ; @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -540,7 +540,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -554,13 +554,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] @@ -586,7 +586,7 @@ PREFIX oboInOwl: @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -595,7 +595,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -609,13 +609,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] ? @@ -727,7 +727,7 @@ PREFIX oboInOwl: @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -736,7 +736,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -750,13 +750,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] ? @@ -800,7 +800,7 @@ PREFIX oboInOwl: @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -809,7 +809,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -823,13 +823,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] ? @@ -850,7 +850,7 @@ PREFIX oboInOwl: @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -859,7 +859,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -873,13 +873,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] ? @@ -902,7 +902,7 @@ PREFIX oboInOwl: @ * ; @ * ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -911,7 +911,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -925,13 +925,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] @@ -964,7 +964,7 @@ PREFIX oboInOwl: @ ; pav:version @ ? ; @ * ; - dcterms:license @ ? ; + dc1:license @ ? ; sh:declare @ * ; @ * ; @ * ; @@ -1127,13 +1127,13 @@ PREFIX oboInOwl: rdf:type [ ] ? ; skosxl:literalForm @ ; rdf:predicate [ skos:exactMatch skos:relatedMatch skos:broaderMatch skos:narrowerMatch ] ? ; - dcterms:subject @ * ; + dc1:subject @ * ; @ * ; @ * ; @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -1142,7 +1142,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -1156,7 +1156,7 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; @@ -1239,7 +1239,7 @@ PREFIX oboInOwl: @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -1248,7 +1248,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -1262,13 +1262,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] @@ -1289,7 +1289,7 @@ PREFIX oboInOwl: @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -1298,7 +1298,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -1312,13 +1312,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] diff --git a/tests/linkml/test_base/__snapshots__/meta.ttl b/tests/linkml/test_base/__snapshots__/meta.ttl index 5a789c62d6..88ace46704 100644 --- a/tests/linkml/test_base/__snapshots__/meta.ttl +++ b/tests/linkml/test_base/__snapshots__/meta.ttl @@ -26,7 +26,7 @@ linkml:AltDescription OIO:inSubset linkml:BasicSubset ; skos:inScheme "https://w3id.org/linkml/meta"^^xsd:anyURI ; linkml:definition_uri "https://w3id.org/linkml/AltDescription"^^xsd:anyURI ; linkml:description "an attributed description" ; - linkml:slot_usage _:c14n14 ; + linkml:slot_usage _:c14n16 ; linkml:slots linkml:alt_description_source , linkml:alt_description_text . linkml:Annotatable a linkml:ClassDefinition ; skos:exactMatch linkml:Annotatable ; @@ -35,7 +35,7 @@ linkml:Annotatable a linkml:ClassDefinition ; linkml:description "mixin for classes that support annotations" ; linkml:imported_from "linkml:annotations" ; linkml:mixin true ; - linkml:slot_usage _:c14n27 ; + linkml:slot_usage _:c14n29 ; linkml:slots linkml:annotations . linkml:Annotation a linkml:ClassDefinition ; skos:exactMatch linkml:Annotation ; @@ -45,7 +45,7 @@ linkml:Annotation a linkml:ClassDefinition ; linkml:imported_from "linkml:annotations" ; linkml:is_a linkml:Extension ; linkml:mixins linkml:Annotatable ; - linkml:slot_usage _:c14n88 ; + linkml:slot_usage _:c14n91 ; linkml:slots linkml:annotations , linkml:extension_tag , linkml:extension_value , linkml:extensions . linkml:AnonymousClassExpression a linkml:ClassDefinition ; skos:exactMatch linkml:AnonymousClassExpression ; @@ -53,7 +53,7 @@ linkml:AnonymousClassExpression a linkml:ClassDefinition ; linkml:definition_uri "https://w3id.org/linkml/AnonymousClassExpression"^^xsd:anyURI ; linkml:is_a linkml:AnonymousExpression ; linkml:mixins linkml:ClassExpression ; - linkml:slot_usage _:c14n53 ; + linkml:slot_usage _:c14n55 ; linkml:slots linkml:aliases , linkml:alt_descriptions , linkml:annotations , linkml:broad_mappings , linkml:categories , linkml:class_expression_all_of , linkml:class_expression_any_of , linkml:class_expression_exactly_one_of , linkml:class_expression_none_of , linkml:close_mappings , linkml:comments , linkml:contributors , linkml:created_by , linkml:created_on , linkml:deprecated , linkml:deprecated_element_has_exact_replacement , linkml:deprecated_element_has_possible_replacement , linkml:description , linkml:exact_mappings , linkml:examples , linkml:extensions , linkml:from_schema , linkml:imported_from , linkml:in_language , linkml:in_subset , linkml:is_a , linkml:keywords , linkml:last_updated_on , linkml:mappings , linkml:modified_by , linkml:narrow_mappings , linkml:notes , linkml:rank , linkml:related_mappings , linkml:see_also , linkml:slot_conditions , linkml:source , linkml:status , linkml:structured_aliases , linkml:title , linkml:todos . linkml:AnonymousEnumExpression a linkml:ClassDefinition ; skos:exactMatch linkml:AnonymousEnumExpression ; @@ -61,7 +61,7 @@ linkml:AnonymousEnumExpression a linkml:ClassDefinition ; linkml:definition_uri "https://w3id.org/linkml/AnonymousEnumExpression"^^xsd:anyURI ; linkml:description "An enum_expression that is not named" ; linkml:mixins linkml:EnumExpression ; - linkml:slot_usage _:c14n73 ; + linkml:slot_usage _:c14n75 ; linkml:slots linkml:code_set , linkml:code_set_tag , linkml:code_set_version , linkml:concepts , linkml:include , linkml:inherits , linkml:matches , linkml:minus , linkml:permissible_values , linkml:pv_formula , linkml:reachable_from . linkml:AnonymousExpression a linkml:ClassDefinition ; skos:exactMatch linkml:AnonymousExpression ; @@ -71,7 +71,7 @@ linkml:AnonymousExpression a linkml:ClassDefinition ; linkml:definition_uri "https://w3id.org/linkml/AnonymousExpression"^^xsd:anyURI ; linkml:description "An abstract parent class for any nested expression" ; linkml:mixins linkml:Annotatable , linkml:CommonMetadata , linkml:Expression , linkml:Extensible ; - linkml:slot_usage _:c14n79 ; + linkml:slot_usage _:c14n81 ; linkml:slots linkml:aliases , linkml:alt_descriptions , linkml:annotations , linkml:broad_mappings , linkml:categories , linkml:close_mappings , linkml:comments , linkml:contributors , linkml:created_by , linkml:created_on , linkml:deprecated , linkml:deprecated_element_has_exact_replacement , linkml:deprecated_element_has_possible_replacement , linkml:description , linkml:exact_mappings , linkml:examples , linkml:extensions , linkml:from_schema , linkml:imported_from , linkml:in_language , linkml:in_subset , linkml:keywords , linkml:last_updated_on , linkml:mappings , linkml:modified_by , linkml:narrow_mappings , linkml:notes , linkml:rank , linkml:related_mappings , linkml:see_also , linkml:source , linkml:status , linkml:structured_aliases , linkml:title , linkml:todos . linkml:AnonymousSlotExpression a linkml:ClassDefinition ; skos:exactMatch linkml:AnonymousSlotExpression ; @@ -79,7 +79,7 @@ linkml:AnonymousSlotExpression a linkml:ClassDefinition ; linkml:definition_uri "https://w3id.org/linkml/AnonymousSlotExpression"^^xsd:anyURI ; linkml:is_a linkml:AnonymousExpression ; linkml:mixins linkml:SlotExpression ; - linkml:slot_usage _:c14n52 ; + linkml:slot_usage _:c14n54 ; linkml:slots linkml:aliases , linkml:all_members , linkml:alt_descriptions , linkml:annotations , linkml:array , linkml:bindings , linkml:broad_mappings , linkml:categories , linkml:close_mappings , linkml:comments , linkml:contributors , linkml:created_by , linkml:created_on , linkml:deprecated , linkml:deprecated_element_has_exact_replacement , linkml:deprecated_element_has_possible_replacement , linkml:description , linkml:enum_range , linkml:equals_expression , linkml:equals_number , linkml:equals_string , linkml:equals_string_in , linkml:exact_cardinality , linkml:exact_mappings , linkml:examples , linkml:extensions , linkml:from_schema , linkml:has_member , linkml:implicit_prefix , linkml:imported_from , linkml:in_language , linkml:in_subset , linkml:inlined , linkml:inlined_as_list , linkml:keywords , linkml:last_updated_on , linkml:mappings , linkml:maximum_cardinality , linkml:maximum_value , linkml:minimum_cardinality , linkml:minimum_value , linkml:modified_by , linkml:multivalued , linkml:narrow_mappings , linkml:notes , linkml:pattern , linkml:range , linkml:range_expression , linkml:rank , linkml:recommended , linkml:related_mappings , linkml:required , linkml:see_also , linkml:slot_expression_all_of , linkml:slot_expression_any_of , linkml:slot_expression_exactly_one_of , linkml:slot_expression_none_of , linkml:source , linkml:status , linkml:structured_aliases , linkml:structured_pattern , linkml:title , linkml:todos , linkml:unit , linkml:value_presence . linkml:AnonymousTypeExpression a linkml:ClassDefinition ; skos:exactMatch linkml:AnonymousTypeExpression ; @@ -87,19 +87,19 @@ linkml:AnonymousTypeExpression a linkml:ClassDefinition ; linkml:definition_uri "https://w3id.org/linkml/AnonymousTypeExpression"^^xsd:anyURI ; linkml:description "A type expression that is not a top-level named type definition. Used for nesting." ; linkml:mixins linkml:TypeExpression ; - linkml:slot_usage _:c14n36 ; + linkml:slot_usage _:c14n38 ; linkml:slots linkml:equals_number , linkml:equals_string , linkml:equals_string_in , linkml:implicit_prefix , linkml:maximum_value , linkml:minimum_value , linkml:pattern , linkml:structured_pattern , linkml:type_expression_all_of , linkml:type_expression_any_of , linkml:type_expression_exactly_one_of , linkml:type_expression_none_of , linkml:unit . linkml:AnyValue a linkml:ClassDefinition ; skos:exactMatch linkml:Any ; skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; linkml:definition_uri "https://w3id.org/linkml/AnyValue"^^xsd:anyURI ; linkml:imported_from "linkml:extensions" ; - linkml:slot_usage _:c14n41 . + linkml:slot_usage _:c14n43 . linkml:Anything a linkml:ClassDefinition ; skos:exactMatch linkml:Any ; skos:inScheme "https://w3id.org/linkml/meta"^^xsd:anyURI ; linkml:definition_uri "https://w3id.org/linkml/Anything"^^xsd:anyURI ; - linkml:slot_usage _:c14n45 . + linkml:slot_usage _:c14n47 . linkml:ArrayExpression bibo:status "testing"^^xsd:anyURI ; a linkml:ClassDefinition ; skos:exactMatch linkml:ArrayExpression ; @@ -107,7 +107,7 @@ linkml:ArrayExpression bibo:status "testing"^^xsd:anyURI ; linkml:definition_uri "https://w3id.org/linkml/ArrayExpression"^^xsd:anyURI ; linkml:description "defines the dimensions of an array" ; linkml:mixins linkml:Annotatable , linkml:CommonMetadata , linkml:Extensible ; - linkml:slot_usage _:c14n16 ; + linkml:slot_usage _:c14n18 ; linkml:slots linkml:aliases , linkml:alt_descriptions , linkml:annotations , linkml:broad_mappings , linkml:categories , linkml:close_mappings , linkml:comments , linkml:contributors , linkml:created_by , linkml:created_on , linkml:deprecated , linkml:deprecated_element_has_exact_replacement , linkml:deprecated_element_has_possible_replacement , linkml:description , linkml:dimensions , linkml:exact_mappings , linkml:exact_number_dimensions , linkml:examples , linkml:extensions , linkml:from_schema , linkml:imported_from , linkml:in_language , linkml:in_subset , linkml:keywords , linkml:last_updated_on , linkml:mappings , linkml:maximum_number_dimensions , linkml:minimum_number_dimensions , linkml:modified_by , linkml:narrow_mappings , linkml:notes , linkml:rank , linkml:related_mappings , linkml:see_also , linkml:source , linkml:status , linkml:structured_aliases , linkml:title , linkml:todos . linkml:BROAD_SYNONYM linkml:meaning "skos:broaderMatch"^^xsd:anyURI . linkml:BasicSubset dcterms:title "basic subset" ; @@ -129,7 +129,7 @@ linkml:ClassDefinition OIO:inSubset linkml:BasicSubset , linkml:MinimalSubset , linkml:description "an element whose instances are complex objects that may have slot-value assignments" ; linkml:is_a linkml:Definition ; linkml:mixins linkml:ClassExpression ; - linkml:slot_usage _:c14n33 ; + linkml:slot_usage _:c14n35 ; linkml:slots linkml:abstract , linkml:alias , linkml:aliases , linkml:alt_descriptions , linkml:annotations , linkml:attributes , linkml:broad_mappings , linkml:categories , linkml:children_are_mutually_disjoint , linkml:class_definition_apply_to , linkml:class_definition_disjoint_with , linkml:class_definition_is_a , linkml:class_definition_mixins , linkml:class_definition_rules , linkml:class_definition_union_of , linkml:class_expression_all_of , linkml:class_expression_any_of , linkml:class_expression_exactly_one_of , linkml:class_expression_none_of , linkml:class_uri , linkml:classification_rules , linkml:close_mappings , linkml:comments , linkml:conforms_to , linkml:contributors , linkml:created_by , linkml:created_on , linkml:defining_slots , linkml:definition_uri , linkml:deprecated , linkml:deprecated_element_has_exact_replacement , linkml:deprecated_element_has_possible_replacement , linkml:description , linkml:exact_mappings , linkml:examples , linkml:extensions , linkml:extra_slots , linkml:from_schema , linkml:id_prefixes , linkml:id_prefixes_are_closed , linkml:implements , linkml:imported_from , linkml:in_language , linkml:in_subset , linkml:instantiates , linkml:keywords , linkml:last_updated_on , linkml:local_names , linkml:mappings , linkml:mixin , linkml:modified_by , linkml:name , linkml:narrow_mappings , linkml:notes , linkml:rank , linkml:related_mappings , linkml:represents_relationship , linkml:see_also , linkml:slot_conditions , linkml:slot_names_unique , linkml:slot_usage , linkml:slots , linkml:source , linkml:status , linkml:string_serialization , linkml:structured_aliases , linkml:subclass_of , linkml:title , linkml:todos , linkml:tree_root , linkml:unique_keys , linkml:values_from . linkml:ClassExpression a linkml:ClassDefinition ; skos:exactMatch linkml:ClassExpression ; @@ -137,7 +137,7 @@ linkml:ClassExpression a linkml:ClassDefinition ; linkml:definition_uri "https://w3id.org/linkml/ClassExpression"^^xsd:anyURI ; linkml:description "A boolean expression that can be used to dynamically determine membership of a class" ; linkml:mixin true ; - linkml:slot_usage _:c14n72 ; + linkml:slot_usage _:c14n74 ; linkml:slots linkml:class_expression_all_of , linkml:class_expression_any_of , linkml:class_expression_exactly_one_of , linkml:class_expression_none_of , linkml:slot_conditions . linkml:ClassLevelRule a linkml:ClassDefinition ; skos:exactMatch linkml:ClassLevelRule ; @@ -145,7 +145,7 @@ linkml:ClassLevelRule a linkml:ClassDefinition ; linkml:abstract true ; linkml:definition_uri "https://w3id.org/linkml/ClassLevelRule"^^xsd:anyURI ; linkml:description "A rule that is applied to classes" ; - linkml:slot_usage _:c14n84 . + linkml:slot_usage _:c14n87 . linkml:ClassRule OIO:inSubset linkml:SpecificationSubset ; a linkml:ClassDefinition ; skos:altLabel "if rule" ; @@ -156,7 +156,7 @@ linkml:ClassRule OIO:inSubset linkml:SpecificationSubset ; linkml:description "A rule that applies to instances of a class" ; linkml:is_a linkml:ClassLevelRule ; linkml:mixins linkml:Annotatable , linkml:CommonMetadata , linkml:Extensible ; - linkml:slot_usage _:c14n77 ; + linkml:slot_usage _:c14n79 ; linkml:slots linkml:aliases , linkml:alt_descriptions , linkml:annotations , linkml:bidirectional , linkml:broad_mappings , linkml:categories , linkml:close_mappings , linkml:comments , linkml:contributors , linkml:created_by , linkml:created_on , linkml:deactivated , linkml:deprecated , linkml:deprecated_element_has_exact_replacement , linkml:deprecated_element_has_possible_replacement , linkml:description , linkml:elseconditions , linkml:exact_mappings , linkml:examples , linkml:extensions , linkml:from_schema , linkml:imported_from , linkml:in_language , linkml:in_subset , linkml:keywords , linkml:last_updated_on , linkml:mappings , linkml:modified_by , linkml:narrow_mappings , linkml:notes , linkml:open_world , linkml:postconditions , linkml:preconditions , linkml:rank , linkml:related_mappings , linkml:see_also , linkml:source , linkml:status , linkml:structured_aliases , linkml:title , linkml:todos . linkml:CommonMetadata OIO:inSubset linkml:BasicSubset ; a linkml:ClassDefinition ; @@ -165,7 +165,7 @@ linkml:CommonMetadata OIO:inSubset linkml:BasicSubset ; linkml:definition_uri "https://w3id.org/linkml/CommonMetadata"^^xsd:anyURI ; linkml:description "Generic metadata shared across definitions" ; linkml:mixin true ; - linkml:slot_usage _:c14n49 ; + linkml:slot_usage _:c14n51 ; linkml:slots linkml:aliases , linkml:alt_descriptions , linkml:broad_mappings , linkml:categories , linkml:close_mappings , linkml:comments , linkml:contributors , linkml:created_by , linkml:created_on , linkml:deprecated , linkml:deprecated_element_has_exact_replacement , linkml:deprecated_element_has_possible_replacement , linkml:description , linkml:exact_mappings , linkml:examples , linkml:from_schema , linkml:imported_from , linkml:in_language , linkml:in_subset , linkml:keywords , linkml:last_updated_on , linkml:mappings , linkml:modified_by , linkml:narrow_mappings , linkml:notes , linkml:rank , linkml:related_mappings , linkml:see_also , linkml:source , linkml:status , linkml:structured_aliases , linkml:title , linkml:todos . linkml:DISCOURAGED linkml:description "The metadata element is allowed but discouraged to be present in the model" . linkml:Definition OIO:inSubset linkml:BasicSubset ; @@ -186,7 +186,7 @@ linkml:DimensionExpression bibo:status "testing"^^xsd:anyURI ; linkml:definition_uri "https://w3id.org/linkml/DimensionExpression"^^xsd:anyURI ; linkml:description "defines one of the dimensions of an array" ; linkml:mixins linkml:Annotatable , linkml:CommonMetadata , linkml:Extensible ; - linkml:slot_usage _:c14n89 ; + linkml:slot_usage _:c14n92 ; linkml:slots linkml:alias , linkml:aliases , linkml:alt_descriptions , linkml:annotations , linkml:broad_mappings , linkml:categories , linkml:close_mappings , linkml:comments , linkml:contributors , linkml:created_by , linkml:created_on , linkml:deprecated , linkml:deprecated_element_has_exact_replacement , linkml:deprecated_element_has_possible_replacement , linkml:description , linkml:exact_cardinality , linkml:exact_mappings , linkml:examples , linkml:extensions , linkml:from_schema , linkml:imported_from , linkml:in_language , linkml:in_subset , linkml:keywords , linkml:last_updated_on , linkml:mappings , linkml:maximum_cardinality , linkml:minimum_cardinality , linkml:modified_by , linkml:narrow_mappings , linkml:notes , linkml:rank , linkml:related_mappings , linkml:see_also , linkml:source , linkml:status , linkml:structured_aliases , linkml:title , linkml:todos . linkml:EXACT_SYNONYM linkml:meaning "skos:exactMatch"^^xsd:anyURI . linkml:EXAMPLE linkml:description "The metadata element is an example of how to use the model" . @@ -209,7 +209,7 @@ linkml:EnumBinding OIO:inSubset linkml:SpecificationSubset ; linkml:definition_uri "https://w3id.org/linkml/EnumBinding"^^xsd:anyURI ; linkml:description "A binding of a slot or a class to a permissible value from an enumeration." ; linkml:mixins linkml:Annotatable , linkml:CommonMetadata , linkml:Extensible ; - linkml:slot_usage _:c14n78 ; + linkml:slot_usage _:c14n80 ; linkml:slots linkml:aliases , linkml:alt_descriptions , linkml:annotations , linkml:binds_value_of , linkml:broad_mappings , linkml:categories , linkml:close_mappings , linkml:comments , linkml:contributors , linkml:created_by , linkml:created_on , linkml:deprecated , linkml:deprecated_element_has_exact_replacement , linkml:deprecated_element_has_possible_replacement , linkml:description , linkml:enum_binding_range , linkml:exact_mappings , linkml:examples , linkml:extensions , linkml:from_schema , linkml:imported_from , linkml:in_language , linkml:in_subset , linkml:keywords , linkml:last_updated_on , linkml:mappings , linkml:modified_by , linkml:narrow_mappings , linkml:notes , linkml:obligation_level , linkml:pv_formula , linkml:rank , linkml:related_mappings , linkml:see_also , linkml:source , linkml:status , linkml:structured_aliases , linkml:title , linkml:todos . linkml:EnumDefinition OIO:inSubset linkml:BasicSubset , linkml:ObjectOrientedProfile , linkml:OwlProfile , linkml:RelationalModelProfile , linkml:SpecificationSubset ; a linkml:ClassDefinition ; @@ -230,7 +230,7 @@ linkml:EnumExpression a linkml:ClassDefinition ; linkml:definition_uri "https://w3id.org/linkml/EnumExpression"^^xsd:anyURI ; linkml:description "An expression that constrains the range of a slot" ; linkml:is_a linkml:Expression ; - linkml:slot_usage _:c14n47 ; + linkml:slot_usage _:c14n49 ; linkml:slots linkml:code_set , linkml:code_set_tag , linkml:code_set_version , linkml:concepts , linkml:include , linkml:inherits , linkml:matches , linkml:minus , linkml:permissible_values , linkml:pv_formula , linkml:reachable_from . linkml:Example OIO:inSubset linkml:BasicSubset ; a linkml:ClassDefinition ; @@ -238,7 +238,7 @@ linkml:Example OIO:inSubset linkml:BasicSubset ; skos:inScheme "https://w3id.org/linkml/meta"^^xsd:anyURI ; linkml:definition_uri "https://w3id.org/linkml/Example"^^xsd:anyURI ; linkml:description "usage example and description" ; - linkml:slot_usage _:c14n64 ; + linkml:slot_usage _:c14n66 ; linkml:slots linkml:value , linkml:value_description , linkml:value_object . linkml:Expression a linkml:ClassDefinition ; skos:exactMatch linkml:Expression ; @@ -247,7 +247,7 @@ linkml:Expression a linkml:ClassDefinition ; linkml:definition_uri "https://w3id.org/linkml/Expression"^^xsd:anyURI ; linkml:description "general mixin for any class that can represent some form of expression" ; linkml:mixin true ; - linkml:slot_usage _:c14n90 . + linkml:slot_usage _:c14n93 . linkml:Extensible a linkml:ClassDefinition ; skos:exactMatch linkml:Extensible ; skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; @@ -255,7 +255,7 @@ linkml:Extensible a linkml:ClassDefinition ; linkml:description "mixin for classes that support extension" ; linkml:imported_from "linkml:extensions" ; linkml:mixin true ; - linkml:slot_usage _:c14n83 ; + linkml:slot_usage _:c14n86 ; linkml:slots linkml:extensions . linkml:Extension a linkml:ClassDefinition ; skos:exactMatch linkml:Extension ; @@ -263,7 +263,7 @@ linkml:Extension a linkml:ClassDefinition ; linkml:definition_uri "https://w3id.org/linkml/Extension"^^xsd:anyURI ; linkml:description "a tag/value pair used to add non-model information to an entry" ; linkml:imported_from "linkml:extensions" ; - linkml:slot_usage _:c14n71 ; + linkml:slot_usage _:c14n73 ; linkml:slots linkml:extension_tag , linkml:extension_value , linkml:extensions . linkml:ExtraSlotsExpression a linkml:ClassDefinition ; skos:exactMatch linkml:ExtraSlotsExpression ; @@ -271,7 +271,7 @@ linkml:ExtraSlotsExpression a linkml:ClassDefinition ; linkml:definition_uri "https://w3id.org/linkml/ExtraSlotsExpression"^^xsd:anyURI ; linkml:description "An expression that defines how to handle additional data in an instance of class\nbeyond the slots/attributes defined for that class.\nSee `extra_slots` for usage examples.\n" ; linkml:mixins linkml:Expression ; - linkml:slot_usage _:c14n17 ; + linkml:slot_usage _:c14n19 ; linkml:slots linkml:allowed , linkml:extra_slots_expression_range_expression . linkml:FHIR_CODING linkml:description "The permissible values are the set of FHIR coding elements derived from the code set" . linkml:ImportExpression bibo:status "testing"^^xsd:anyURI ; @@ -281,7 +281,7 @@ linkml:ImportExpression bibo:status "testing"^^xsd:anyURI ; linkml:definition_uri "https://w3id.org/linkml/ImportExpression"^^xsd:anyURI ; linkml:description "an expression describing an import" ; linkml:mixins linkml:Annotatable , linkml:CommonMetadata , linkml:Extensible ; - linkml:slot_usage _:c14n67 ; + linkml:slot_usage _:c14n69 ; linkml:slots linkml:aliases , linkml:alt_descriptions , linkml:annotations , linkml:broad_mappings , linkml:categories , linkml:close_mappings , linkml:comments , linkml:contributors , linkml:created_by , linkml:created_on , linkml:deprecated , linkml:deprecated_element_has_exact_replacement , linkml:deprecated_element_has_possible_replacement , linkml:description , linkml:exact_mappings , linkml:examples , linkml:extensions , linkml:from_schema , linkml:import_as , linkml:import_from , linkml:import_map , linkml:imported_from , linkml:in_language , linkml:in_subset , linkml:keywords , linkml:last_updated_on , linkml:mappings , linkml:modified_by , linkml:narrow_mappings , linkml:notes , linkml:rank , linkml:related_mappings , linkml:see_also , linkml:source , linkml:status , linkml:structured_aliases , linkml:title , linkml:todos . linkml:LABEL linkml:description "The permissible values are the set of human readable labels in the code set" . linkml:LocalName a linkml:ClassDefinition ; @@ -289,7 +289,7 @@ linkml:LocalName a linkml:ClassDefinition ; skos:inScheme "https://w3id.org/linkml/meta"^^xsd:anyURI ; linkml:definition_uri "https://w3id.org/linkml/LocalName"^^xsd:anyURI ; linkml:description "an attributed label" ; - linkml:slot_usage _:c14n87 ; + linkml:slot_usage _:c14n90 ; linkml:slots linkml:local_name_source , linkml:local_name_value . linkml:MatchQuery OIO:inSubset linkml:SpecificationSubset ; a linkml:ClassDefinition ; @@ -297,7 +297,7 @@ linkml:MatchQuery OIO:inSubset linkml:SpecificationSubset ; skos:inScheme "https://w3id.org/linkml/meta"^^xsd:anyURI ; linkml:definition_uri "https://w3id.org/linkml/MatchQuery"^^xsd:anyURI ; linkml:description "A query that is used on an enum expression to dynamically obtain a set of permissible values via a query that matches on properties of the external concepts." ; - linkml:slot_usage _:c14n46 ; + linkml:slot_usage _:c14n48 ; linkml:slots linkml:identifier_pattern , linkml:source_ontology . linkml:MinimalSubset dcterms:title "minimal subset" ; a linkml:SubsetDefinition ; @@ -332,7 +332,7 @@ linkml:PathExpression a linkml:ClassDefinition ; linkml:definition_uri "https://w3id.org/linkml/PathExpression"^^xsd:anyURI ; linkml:description "An expression that describes an abstract path from an object to another through a sequence of slot lookups" ; linkml:mixins linkml:Annotatable , linkml:CommonMetadata , linkml:Expression , linkml:Extensible ; - linkml:slot_usage _:c14n65 ; + linkml:slot_usage _:c14n67 ; linkml:slots linkml:aliases , linkml:alt_descriptions , linkml:annotations , linkml:broad_mappings , linkml:categories , linkml:close_mappings , linkml:comments , linkml:contributors , linkml:created_by , linkml:created_on , linkml:deprecated , linkml:deprecated_element_has_exact_replacement , linkml:deprecated_element_has_possible_replacement , linkml:description , linkml:exact_mappings , linkml:examples , linkml:extensions , linkml:from_schema , linkml:imported_from , linkml:in_language , linkml:in_subset , linkml:keywords , linkml:last_updated_on , linkml:mappings , linkml:modified_by , linkml:narrow_mappings , linkml:notes , linkml:path_expression_all_of , linkml:path_expression_any_of , linkml:path_expression_exactly_one_of , linkml:path_expression_followed_by , linkml:path_expression_none_of , linkml:range_expression , linkml:rank , linkml:related_mappings , linkml:reversed , linkml:see_also , linkml:source , linkml:status , linkml:structured_aliases , linkml:title , linkml:todos , linkml:traverse . linkml:PatternExpression a linkml:ClassDefinition ; skos:exactMatch linkml:PatternExpression ; @@ -340,7 +340,7 @@ linkml:PatternExpression a linkml:ClassDefinition ; linkml:definition_uri "https://w3id.org/linkml/PatternExpression"^^xsd:anyURI ; linkml:description "a regular expression pattern used to evaluate conformance of a string" ; linkml:mixins linkml:Annotatable , linkml:CommonMetadata , linkml:Extensible ; - linkml:slot_usage _:c14n24 ; + linkml:slot_usage _:c14n26 ; linkml:slots linkml:aliases , linkml:alt_descriptions , linkml:annotations , linkml:broad_mappings , linkml:categories , linkml:close_mappings , linkml:comments , linkml:contributors , linkml:created_by , linkml:created_on , linkml:deprecated , linkml:deprecated_element_has_exact_replacement , linkml:deprecated_element_has_possible_replacement , linkml:description , linkml:exact_mappings , linkml:examples , linkml:extensions , linkml:from_schema , linkml:imported_from , linkml:in_language , linkml:in_subset , linkml:interpolated , linkml:keywords , linkml:last_updated_on , linkml:mappings , linkml:modified_by , linkml:narrow_mappings , linkml:notes , linkml:partial_match , linkml:rank , linkml:related_mappings , linkml:see_also , linkml:source , linkml:status , linkml:structured_aliases , linkml:syntax , linkml:title , linkml:todos . linkml:PermissibleValue OIO:inSubset linkml:BasicSubset , linkml:SpecificationSubset ; a linkml:ClassDefinition ; @@ -352,7 +352,7 @@ linkml:PermissibleValue OIO:inSubset linkml:BasicSubset , linkml:SpecificationSu linkml:definition_uri "https://w3id.org/linkml/PermissibleValue"^^xsd:anyURI ; linkml:description "a permissible value, accompanied by intended text and an optional mapping to a concept URI" ; linkml:mixins linkml:Annotatable , linkml:CommonMetadata , linkml:Extensible ; - linkml:slot_usage _:c14n60 ; + linkml:slot_usage _:c14n62 ; linkml:slots linkml:aliases , linkml:alt_descriptions , linkml:annotations , linkml:broad_mappings , linkml:categories , linkml:close_mappings , linkml:comments , linkml:contributors , linkml:created_by , linkml:created_on , linkml:deprecated , linkml:deprecated_element_has_exact_replacement , linkml:deprecated_element_has_possible_replacement , linkml:description , linkml:exact_mappings , linkml:examples , linkml:extensions , linkml:from_schema , linkml:implements , linkml:imported_from , linkml:in_language , linkml:in_subset , linkml:instantiates , linkml:keywords , linkml:last_updated_on , linkml:mappings , linkml:meaning , linkml:modified_by , linkml:narrow_mappings , linkml:notes , linkml:permissible_value_is_a , linkml:permissible_value_mixins , linkml:rank , linkml:related_mappings , linkml:see_also , linkml:source , linkml:status , linkml:structured_aliases , linkml:text , linkml:title , linkml:todos , linkml:unit . linkml:Prefix OIO:inSubset linkml:BasicSubset , linkml:SpecificationSubset ; a linkml:ClassDefinition ; @@ -361,7 +361,7 @@ linkml:Prefix OIO:inSubset linkml:BasicSubset , linkml:SpecificationSubset ; sh:order 12 ; linkml:definition_uri "https://w3id.org/linkml/Prefix"^^xsd:anyURI ; linkml:description "prefix URI tuple" ; - linkml:slot_usage _:c14n48 ; + linkml:slot_usage _:c14n50 ; linkml:slots linkml:prefix_prefix , linkml:prefix_reference . linkml:RECOMMENDED skos:altLabel "ENCOURAGED" ; linkml:description "The metadata element is recommended to be present in the model" . @@ -373,7 +373,7 @@ linkml:ReachabilityQuery OIO:inSubset linkml:SpecificationSubset ; skos:inScheme "https://w3id.org/linkml/meta"^^xsd:anyURI ; linkml:definition_uri "https://w3id.org/linkml/ReachabilityQuery"^^xsd:anyURI ; linkml: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." ; - linkml:slot_usage _:c14n23 ; + linkml:slot_usage _:c14n25 ; linkml:slots linkml:include_self , linkml:is_direct , linkml:relationship_types , linkml:source_nodes , linkml:source_ontology , linkml:traverse_up . linkml:RelationalModelProfile dcterms:title "relational model profile" ; a linkml:SubsetDefinition ; @@ -395,7 +395,7 @@ linkml:SchemaDefinition OIO:inSubset linkml:BasicSubset , linkml:MinimalSubset , linkml:definition_uri "https://w3id.org/linkml/SchemaDefinition"^^xsd:anyURI ; linkml:description "A collection of definitions that make up a schema or a data model." ; linkml:is_a linkml:Element ; - linkml:slot_usage _:c14n44 ; + linkml:slot_usage _:c14n46 ; linkml:slots linkml:aliases , linkml:alt_descriptions , linkml:annotations , linkml:bindings , linkml:broad_mappings , linkml:categories , linkml:classes , linkml:close_mappings , linkml:comments , linkml:conforms_to , linkml:contributors , linkml:created_by , linkml:created_on , linkml:default_curi_maps , linkml:default_prefix , linkml:default_range , linkml:definition_uri , linkml:deprecated , linkml:deprecated_element_has_exact_replacement , linkml:deprecated_element_has_possible_replacement , linkml:description , linkml:emit_prefixes , linkml:enums , linkml:exact_mappings , linkml:examples , linkml:extensions , linkml:from_schema , linkml:generation_date , linkml:id , linkml:id_prefixes , linkml:id_prefixes_are_closed , linkml:implements , linkml:imported_from , linkml:imports , linkml:in_language , linkml:in_subset , linkml:instantiates , linkml:keywords , linkml:last_updated_on , linkml:license , linkml:local_names , linkml:mappings , linkml:metamodel_version , linkml:modified_by , linkml:narrow_mappings , linkml:notes , linkml:prefixes , linkml:rank , linkml:related_mappings , linkml:schema_definition_name , linkml:see_also , linkml:settings , linkml:slot_definitions , linkml:slot_names_unique , linkml:source , linkml:source_file , linkml:source_file_date , linkml:source_file_size , linkml:status , linkml:structured_aliases , linkml:subsets , linkml:title , linkml:todos , linkml:types , linkml:version ; linkml:tree_root true . linkml:Setting OIO:inSubset linkml:SpecificationSubset ; @@ -404,7 +404,7 @@ linkml:Setting OIO:inSubset linkml:SpecificationSubset ; skos:inScheme "https://w3id.org/linkml/meta"^^xsd:anyURI ; linkml:definition_uri "https://w3id.org/linkml/Setting"^^xsd:anyURI ; linkml:description "assignment of a key to a value" ; - linkml:slot_usage _:c14n55 ; + linkml:slot_usage _:c14n57 ; linkml:slots linkml:setting_key , linkml:setting_value . linkml:SlotDefinition OIO:inSubset linkml:BasicSubset , linkml:MinimalSubset , linkml:OwlProfile , linkml:SpecificationSubset ; a linkml:ClassDefinition ; @@ -417,7 +417,7 @@ linkml:SlotDefinition OIO:inSubset linkml:BasicSubset , linkml:MinimalSubset , l linkml:description "an element that describes how instances are related to other instances" ; linkml:is_a linkml:Definition ; linkml:mixins linkml:SlotExpression ; - linkml:slot_usage _:c14n39 ; + linkml:slot_usage _:c14n41 ; linkml:slots linkml:abstract , linkml:alias , linkml:aliases , linkml:all_members , linkml:alt_descriptions , linkml:annotations , linkml:array , linkml:asymmetric , linkml:bindings , linkml:broad_mappings , linkml:categories , linkml:children_are_mutually_disjoint , linkml:close_mappings , linkml:comments , linkml:conforms_to , linkml:contributors , linkml:created_by , linkml:created_on , linkml:definition_uri , linkml:deprecated , linkml:deprecated_element_has_exact_replacement , linkml:deprecated_element_has_possible_replacement , linkml:description , linkml:designates_type , linkml:domain , linkml:domain_of , linkml:enum_range , linkml:equals_expression , linkml:equals_number , linkml:equals_string , linkml:equals_string_in , linkml:exact_cardinality , linkml:exact_mappings , linkml:examples , linkml:extensions , linkml:from_schema , linkml:has_member , linkml:id_prefixes , linkml:id_prefixes_are_closed , linkml:identifier , linkml:ifabsent , linkml:implements , linkml:implicit_prefix , linkml:imported_from , linkml:in_language , linkml:in_subset , linkml:inherited , linkml:inlined , linkml:inlined_as_list , linkml:instantiates , linkml:inverse , linkml:irreflexive , linkml:is_class_field , linkml:is_grouping_slot , linkml:is_usage_slot , linkml:key , linkml:keywords , linkml:last_updated_on , linkml:list_elements_ordered , linkml:list_elements_unique , linkml:local_names , linkml:locally_reflexive , linkml:mappings , linkml:maximum_cardinality , linkml:maximum_value , linkml:minimum_cardinality , linkml:minimum_value , linkml:mixin , linkml:modified_by , linkml:multivalued , linkml:name , linkml:narrow_mappings , linkml:notes , linkml:owner , linkml:path_rule , linkml:pattern , linkml:range , linkml:range_expression , linkml:rank , linkml:readonly , linkml:recommended , linkml:reflexive , linkml:reflexive_transitive_form_of , linkml:related_mappings , linkml:relational_role , linkml:required , linkml:role , linkml:see_also , linkml:shared , linkml:singular_name , linkml:slot_definition_apply_to , linkml:slot_definition_disjoint_with , linkml:slot_definition_is_a , linkml:slot_definition_mixins , linkml:slot_definition_union_of , linkml:slot_expression_all_of , linkml:slot_expression_any_of , linkml:slot_expression_exactly_one_of , linkml:slot_expression_none_of , linkml:slot_group , linkml:slot_uri , linkml:source , linkml:status , linkml:string_serialization , linkml:structured_aliases , linkml:structured_pattern , linkml:subproperty_of , linkml:symmetric , linkml:title , linkml:todos , linkml:transitive , linkml:transitive_form_of , linkml:type_mappings , linkml:unit , linkml:usage_slot_name , linkml:value_presence , linkml:values_from . linkml:SlotExpression a linkml:ClassDefinition ; skos:exactMatch linkml:SlotExpression ; @@ -426,7 +426,7 @@ linkml:SlotExpression a linkml:ClassDefinition ; linkml:description "an expression that constrains the range of values a slot can take" ; linkml:is_a linkml:Expression ; linkml:mixin true ; - linkml:slot_usage _:c14n54 ; + linkml:slot_usage _:c14n56 ; linkml:slots linkml:all_members , linkml:array , linkml:bindings , linkml:enum_range , linkml:equals_expression , linkml:equals_number , linkml:equals_string , linkml:equals_string_in , linkml:exact_cardinality , linkml:has_member , linkml:implicit_prefix , linkml:inlined , linkml:inlined_as_list , linkml:maximum_cardinality , linkml:maximum_value , linkml:minimum_cardinality , linkml:minimum_value , linkml:multivalued , linkml:pattern , linkml:range , linkml:range_expression , linkml:recommended , linkml:required , linkml:slot_expression_all_of , linkml:slot_expression_any_of , linkml:slot_expression_exactly_one_of , linkml:slot_expression_none_of , linkml:structured_pattern , linkml:unit , linkml:value_presence . linkml:SpecificationSubset dcterms:title "specification subset" ; a linkml:SubsetDefinition ; @@ -440,7 +440,7 @@ linkml:StructuredAlias a linkml:ClassDefinition ; linkml:definition_uri "https://w3id.org/linkml/StructuredAlias"^^xsd:anyURI ; linkml:description "object that contains meta data about a synonym or alias including where it came from (source) and its scope (narrow, broad, etc.)" ; linkml:mixins linkml:Annotatable , linkml:CommonMetadata , linkml:Expression , linkml:Extensible ; - linkml:slot_usage _:c14n20 ; + linkml:slot_usage _:c14n22 ; linkml:slots linkml:alias_contexts , linkml:alias_predicate , linkml:aliases , linkml:alt_descriptions , linkml:annotations , linkml:broad_mappings , linkml:close_mappings , linkml:comments , linkml:contributors , linkml:created_by , linkml:created_on , linkml:deprecated , linkml:deprecated_element_has_exact_replacement , linkml:deprecated_element_has_possible_replacement , linkml:description , linkml:exact_mappings , linkml:examples , linkml:extensions , linkml:from_schema , linkml:imported_from , linkml:in_language , linkml:in_subset , linkml:keywords , linkml:last_updated_on , linkml:literal_form , linkml:mappings , linkml:modified_by , linkml:narrow_mappings , linkml:notes , linkml:rank , linkml:related_mappings , linkml:see_also , linkml:source , linkml:status , linkml:structured_alias_categories , linkml:structured_aliases , linkml:title , linkml:todos . linkml:SubsetDefinition OIO:inSubset linkml:BasicSubset , linkml:SpecificationSubset ; a linkml:ClassDefinition ; @@ -470,7 +470,7 @@ linkml:TypeExpression a linkml:ClassDefinition ; linkml:description "An abstract class grouping named types and anonymous type expressions" ; linkml:is_a linkml:Expression ; linkml:mixin true ; - linkml:slot_usage _:c14n40 ; + linkml:slot_usage _:c14n42 ; linkml:slots linkml:equals_number , linkml:equals_string , linkml:equals_string_in , linkml:implicit_prefix , linkml:maximum_value , linkml:minimum_value , linkml:pattern , linkml:structured_pattern , linkml:type_expression_all_of , linkml:type_expression_any_of , linkml:type_expression_exactly_one_of , linkml:type_expression_none_of , linkml:unit . linkml:TypeMapping OIO:inSubset linkml:SpecificationSubset ; a linkml:ClassDefinition ; @@ -480,7 +480,7 @@ linkml:TypeMapping OIO:inSubset linkml:SpecificationSubset ; linkml:definition_uri "https://w3id.org/linkml/TypeMapping"^^xsd:anyURI ; linkml:description "Represents how a slot or type can be serialized to a format." ; linkml:mixins linkml:Annotatable , linkml:CommonMetadata , linkml:Extensible ; - linkml:slot_usage _:c14n18 ; + linkml:slot_usage _:c14n20 ; linkml:slots linkml:aliases , linkml:alt_descriptions , linkml:annotations , linkml:broad_mappings , linkml:categories , linkml:close_mappings , linkml:comments , linkml:contributors , linkml:created_by , linkml:created_on , linkml:deprecated , linkml:deprecated_element_has_exact_replacement , linkml:deprecated_element_has_possible_replacement , linkml:description , linkml:exact_mappings , linkml:examples , linkml:extensions , linkml:framework_key , linkml:from_schema , linkml:imported_from , linkml:in_language , linkml:in_subset , linkml:keywords , linkml:last_updated_on , linkml:mapped_type , linkml:mappings , linkml:modified_by , linkml:narrow_mappings , linkml:notes , linkml:rank , linkml:related_mappings , linkml:see_also , linkml:source , linkml:status , linkml:string_serialization , linkml:structured_aliases , linkml:title , linkml:todos . linkml:URI linkml:description "The permissible values are the set of code URIs in the code set" . linkml:UniqueKey OIO:inSubset linkml:BasicSubset , linkml:RelationalModelProfile , linkml:SpecificationSubset ; @@ -491,16 +491,16 @@ linkml:UniqueKey OIO:inSubset linkml:BasicSubset , linkml:RelationalModelProfile linkml:definition_uri "https://w3id.org/linkml/UniqueKey"^^xsd:anyURI ; linkml:description "a collection of slots whose values uniquely identify an instance of a class" ; linkml:mixins linkml:Annotatable , linkml:CommonMetadata , linkml:Extensible ; - linkml:slot_usage _:c14n58 ; + linkml:slot_usage _:c14n60 ; linkml:slots linkml:aliases , linkml:alt_descriptions , linkml:annotations , linkml:broad_mappings , linkml:categories , linkml:close_mappings , linkml:comments , linkml:consider_nulls_inequal , linkml:contributors , linkml:created_by , linkml:created_on , linkml:deprecated , linkml:deprecated_element_has_exact_replacement , linkml:deprecated_element_has_possible_replacement , linkml:description , linkml:exact_mappings , linkml:examples , linkml:extensions , linkml:from_schema , linkml:imported_from , linkml:in_language , linkml:in_subset , linkml:keywords , linkml:last_updated_on , linkml:mappings , linkml:modified_by , linkml:narrow_mappings , linkml:notes , linkml:rank , linkml:related_mappings , linkml:see_also , linkml:source , linkml:status , linkml:structured_aliases , linkml:title , linkml:todos , linkml:unique_key_name , linkml:unique_key_slots . linkml:UnitOfMeasure a linkml:ClassDefinition ; skos:exactMatch qudt:Unit ; skos:inScheme "https://w3id.org/linkml/units"^^xsd:anyURI ; - linkml:any_of _:c14n11 , _:c14n56 , _:c14n70 , _:c14n9 ; + linkml:any_of _:c14n13 , _:c14n58 , _:c14n72 , _:c14n9 ; linkml:definition_uri "https://w3id.org/linkml/UnitOfMeasure"^^xsd:anyURI ; linkml: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)." ; linkml:imported_from "linkml:units" ; - linkml:slot_usage _:c14n12 ; + linkml:slot_usage _:c14n14 ; linkml:slots linkml:UnitOfMeasure_exact_mappings , linkml:abbreviation , linkml:derivation , linkml:descriptive_name , linkml:has_quantity_kind , linkml:iec61360code , linkml:symbol , linkml:ucum_code . linkml:UnitOfMeasure_exact_mappings a linkml:SlotDefinition ; skos:inScheme "https://w3id.org/linkml/mappings"^^xsd:anyURI ; @@ -1668,7 +1668,7 @@ linkml:extension_tag a linkml:SlotDefinition ; linkml:extension_value a linkml:SlotDefinition ; skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; skos:prefLabel "value" ; - linkml:annotations _:c14n68 ; + linkml:annotations _:c14n70 ; linkml:definition_uri "https://w3id.org/linkml/extension_value"^^xsd:anyURI ; linkml:description "the actual annotation" ; linkml:domain linkml:Extension ; @@ -1699,7 +1699,7 @@ linkml:extra_slots OIO:inSubset linkml:BasicSubset , linkml:SpecificationSubset linkml:description "How a class instance handles extra data not specified in the class definition.\nNote that this does *not* define the constraints that are placed on additional slots defined by inheriting classes.\n\nPossible values:\n- `allowed: true` - allow all additional data\n- `allowed: false` (or `allowed:` or `allowed: null` while `range_expression` is `null`) -\n forbid all additional data (default)\n- `range_expression: ...` - allow additional data if it matches the slot expression (see examples)\n" ; linkml:domain linkml:ClassDefinition ; linkml:domain_of linkml:ClassDefinition ; - linkml:examples _:c14n13 , _:c14n25 , _:c14n35 , _:c14n38 , _:c14n50 , _:c14n59 , _:c14n62 , _:c14n82 ; + linkml:examples _:c14n15 , _:c14n27 , _:c14n37 , _:c14n40 , _:c14n52 , _:c14n61 , _:c14n64 , _:c14n85 ; linkml:inlined true ; linkml:inlined_as_list true ; linkml:owner linkml:ClassDefinition ; @@ -2393,7 +2393,7 @@ linkml:maximum_number_dimensions bibo:status "testing"^^xsd:anyURI ; a linkml:SlotDefinition ; skos:inScheme "https://w3id.org/linkml/meta"^^xsd:anyURI ; skos:note "maximum_number_dimensions cannot be less than minimum_number_dimensions" ; - linkml:any_of _:c14n4 , _:c14n51 ; + linkml:any_of _:c14n4 , _:c14n53 ; linkml:definition_uri "https://w3id.org/linkml/maximum_number_dimensions"^^xsd:anyURI ; linkml: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" ; linkml:domain linkml:ArrayExpression ; @@ -2435,7 +2435,7 @@ linkml:meaning OIO:inSubset linkml:BasicSubset , linkml:SpecificationSubset ; linkml:meta dcterms:license "https://creativecommons.org/publicdomain/zero/1.0/" ; dcterms:title "LinkML Schema Metamodel" ; a linkml:SchemaDefinition ; - sh:declare _:c14n0 , _:c14n10 , _:c14n15 , _:c14n19 , _:c14n22 , _:c14n26 , _:c14n28 , _:c14n29 , _:c14n30 , _:c14n34 , _:c14n37 , _:c14n42 , _:c14n43 , _:c14n69 , _:c14n74 , _:c14n76 , _:c14n81 , _:c14n91 ; + sh:declare _:c14n0 , _:c14n10 , _:c14n11 , _:c14n12 , _:c14n17 , _:c14n21 , _:c14n24 , _:c14n28 , _:c14n30 , _:c14n31 , _:c14n32 , _:c14n36 , _:c14n39 , _:c14n44 , _:c14n45 , _:c14n71 , _:c14n76 , _:c14n78 , _:c14n83 , _:c14n84 , _:c14n94 ; linkml:classes linkml:AltDescription , linkml:Annotatable , linkml:Annotation , linkml:AnonymousClassExpression , linkml:AnonymousEnumExpression , linkml:AnonymousExpression , linkml:AnonymousSlotExpression , linkml:AnonymousTypeExpression , linkml:AnyValue , linkml:Anything , linkml:ArrayExpression , linkml:ClassDefinition , linkml:ClassExpression , linkml:ClassLevelRule , linkml:ClassRule , linkml:CommonMetadata , linkml:Definition , linkml:DimensionExpression , linkml:Element , linkml:EnumBinding , linkml:EnumDefinition , linkml:EnumExpression , linkml:Example , linkml:Expression , linkml:Extensible , linkml:Extension , linkml:ExtraSlotsExpression , linkml:ImportExpression , linkml:LocalName , linkml:MatchQuery , linkml:PathExpression , linkml:PatternExpression , linkml:PermissibleValue , linkml:Prefix , linkml:ReachabilityQuery , linkml:SchemaDefinition , linkml:Setting , linkml:SlotDefinition , linkml:SlotExpression , linkml:StructuredAlias , linkml:SubsetDefinition , linkml:TypeDefinition , linkml:TypeExpression , linkml:TypeMapping , linkml:UniqueKey , linkml:UnitOfMeasure ; linkml:default_curi_maps "semweb_context" ; linkml:default_prefix "linkml" ; @@ -3494,7 +3494,7 @@ linkml:slot_group OIO:inSubset linkml:BasicSubset , linkml:SpecificationSubset ; linkml:domain_of linkml:SlotDefinition ; linkml:owner linkml:SlotDefinition ; linkml:range linkml:SlotDefinition ; - linkml:range_expression _:c14n86 ; + linkml:range_expression _:c14n89 ; linkml:slot_uri "http://www.w3.org/ns/shacl#group"^^xsd:anyURI . linkml:slot_names_unique bibo:status "testing"^^xsd:anyURI ; a linkml:SlotDefinition ; @@ -3637,7 +3637,7 @@ linkml:status OIO:inSubset linkml:BasicSubset ; linkml:description "status of the element" ; linkml:domain linkml:Element ; linkml:domain_of linkml:CommonMetadata ; - linkml:examples _:c14n57 ; + linkml:examples _:c14n59 ; linkml:owner linkml:status ; linkml:range linkml:uriorcurie ; linkml:slot_uri "http://purl.org/ontology/bibo/status"^^xsd:anyURI . @@ -3671,7 +3671,7 @@ linkml:structured_alias_categories OIO:inSubset linkml:BasicSubset ; linkml:description "The category or categories of an alias. This can be drawn from any relevant vocabulary" ; linkml:domain linkml:StructuredAlias ; linkml:domain_of linkml:StructuredAlias ; - linkml:examples _:c14n66 ; + linkml:examples _:c14n68 ; linkml:is_a linkml:categories ; linkml:is_usage_slot true ; linkml:multivalued true ; @@ -3737,7 +3737,7 @@ linkml:subproperty_of a linkml:SlotDefinition ; linkml: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." ; linkml:domain linkml:SlotDefinition ; linkml:domain_of linkml:SlotDefinition ; - linkml:examples _:c14n31 ; + linkml:examples _:c14n33 ; linkml:owner linkml:SlotDefinition ; linkml:range linkml:SlotDefinition ; linkml:slot_uri "http://www.w3.org/2000/01/rdf-schema#subPropertyOf"^^xsd:anyURI . @@ -4225,106 +4225,112 @@ linkml:version OIO:inSubset linkml:BasicSubset ; linkml:slot_uri "http://purl.org/pav/version"^^xsd:anyURI . _:c14n0 sh:namespace "http://purl.org/ontology/bibo/"^^xsd:anyURI ; sh:prefix "bibo" . -_:c14n10 sh:namespace "http://open-services.net/ns/core#"^^xsd:anyURI ; +_:c14n10 sh:namespace "http://purl.org/dc/terms/"^^xsd:anyURI ; + sh:prefix "dcterms" . +_:c14n100 linkml:range_expression _:c14n65 . +_:c14n101 linkml:range linkml:string . +_:c14n11 sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; + sh:prefix "rdf" . +_:c14n12 sh:namespace "http://open-services.net/ns/core#"^^xsd:anyURI ; sh:prefix "oslc" . -_:c14n11 a linkml:AnonymousClassExpression ; +_:c14n13 a linkml:AnonymousClassExpression ; linkml:slot_conditions linkml:symbol . -_:c14n13 a linkml:Example ; +_:c14n15 a linkml:Example ; linkml:description "Allow additional data that are strings" ; - linkml:object _:c14n94 . -_:c14n15 sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; + linkml:object _:c14n97 . +_:c14n17 sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; sh:prefix "sh" . -_:c14n19 sh:namespace "http://www.w3.org/ns/prov#"^^xsd:anyURI ; +_:c14n21 sh:namespace "http://www.w3.org/ns/prov#"^^xsd:anyURI ; sh:prefix "prov" . -_:c14n21 linkml:range linkml:AClassDefinition . -_:c14n22 sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; +_:c14n23 linkml:range linkml:AClassDefinition . +_:c14n24 sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; sh:prefix "qudt" . -_:c14n25 a linkml:Example ; +_:c14n27 a linkml:Example ; linkml:description "A semantically *invalid* use of `extra_slots`, as extra slots will be forbidden and the\n`anonymous_slot_expression` will be ignored.\n" ; linkml:object _:c14n3 . -_:c14n26 sh:namespace "http://www.w3.org/2002/07/owl#"^^xsd:anyURI ; +_:c14n28 sh:namespace "http://www.w3.org/2002/07/owl#"^^xsd:anyURI ; sh:prefix "owl" . -_:c14n28 sh:namespace "https://w3id.org/linkml/"^^xsd:anyURI ; +_:c14n3 linkml:allowed false ; + linkml:range_expression _:c14n101 . +_:c14n30 sh:namespace "https://w3id.org/linkml/"^^xsd:anyURI ; sh:prefix "linkml" . -_:c14n29 sh:namespace "http://www.w3.org/2003/11/swrl#"^^xsd:anyURI ; +_:c14n31 sh:namespace "http://www.w3.org/2003/11/swrl#"^^xsd:anyURI ; sh:prefix "swrl" . -_:c14n3 linkml:allowed false ; - linkml:range_expression _:c14n98 . -_:c14n30 sh:namespace "http://www.w3.org/2008/05/skos-xl#"^^xsd:anyURI ; +_:c14n32 sh:namespace "http://www.w3.org/2008/05/skos-xl#"^^xsd:anyURI ; sh:prefix "skosxl" . -_:c14n31 a linkml:Example ; +_:c14n33 a linkml:Example ; skos:example "RO:HOM0000001" ; linkml:description "this is the RO term for \"in homology relationship with\", and used as a value of subproperty of this means that any ontological child (related to RO:HOM0000001 via an is_a relationship), is a valid value for the slot that declares this with the subproperty_of tag. This differs from the 'values_from' meta model component in that 'values_from' requires the id of a value set (said another way, if an entire ontology had a curie/identifier that was the identifier for the entire ontology, then that identifier would be used in 'values_from.')" . -_:c14n32 linkml:range linkml:integer . -_:c14n34 sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; +_:c14n34 linkml:range linkml:integer . +_:c14n36 sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; sh:prefix "skos" . -_:c14n35 a linkml:Example ; +_:c14n37 a linkml:Example ; linkml:description "Allow additional data if they are integers.\n`required` is meaningless in this context and ignored, since by definition all \"extra\" slots are optional.\n" ; - linkml:object _:c14n93 . -_:c14n37 sh:namespace "http://semanticscience.org/resource/SIO_"^^xsd:anyURI ; + linkml:object _:c14n95 . +_:c14n39 sh:namespace "http://semanticscience.org/resource/SIO_"^^xsd:anyURI ; sh:prefix "SIO" . -_:c14n38 a linkml:Example ; - linkml:description "Forbid any additional data" ; - linkml:object _:c14n85 . _:c14n4 a linkml:AnonymousSlotExpression ; linkml:range linkml:boolean . -_:c14n42 sh:namespace "http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#"^^xsd:anyURI ; +_:c14n40 a linkml:Example ; + linkml:description "Forbid any additional data" ; + linkml:object _:c14n88 . +_:c14n44 sh:namespace "http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#"^^xsd:anyURI ; sh:prefix "NCIT" . -_:c14n43 sh:namespace "https://vocab.org/vann/"^^xsd:anyURI ; +_:c14n45 sh:namespace "https://vocab.org/vann/"^^xsd:anyURI ; sh:prefix "vann" . _:c14n5 linkml:range linkml:integer ; linkml:required true . -_:c14n50 a linkml:Example ; +_:c14n52 a linkml:Example ; linkml:description "Allow all additional data" ; - linkml:object _:c14n80 . -_:c14n51 a linkml:AnonymousSlotExpression ; + linkml:object _:c14n82 . +_:c14n53 a linkml:AnonymousSlotExpression ; linkml:range linkml:integer . -_:c14n56 a linkml:AnonymousClassExpression ; +_:c14n58 a linkml:AnonymousClassExpression ; linkml:slot_conditions linkml:iec61360code . -_:c14n57 a linkml:Example ; - skos:example "bibo:draft" . _:c14n59 a linkml:Example ; + skos:example "bibo:draft" . +_:c14n61 a linkml:Example ; linkml:description "Allow additional data if they are instances of the class definition \"AClassDefinition\"" ; - linkml:object _:c14n97 . -_:c14n61 linkml:any_of _:c14n32 , _:c14n75 . -_:c14n62 a linkml:Example ; + linkml:object _:c14n96 . +_:c14n63 linkml:any_of _:c14n34 , _:c14n77 . +_:c14n64 a linkml:Example ; linkml:description "Allow additional data if they are lists of integers of at most length 5.\nNote that this does *not* mean that a maximum of 5 extra slots are allowed.\n" ; - linkml:object _:c14n92 . -_:c14n63 linkml:maximum_cardinality 5 ; + linkml:object _:c14n100 . +_:c14n65 linkml:maximum_cardinality 5 ; linkml:multivalued true ; linkml:range linkml:integer . -_:c14n66 a linkml:Example ; +_:c14n68 a linkml:Example ; skos:example "https://w3id.org/mod#acronym" ; linkml:description "An acronym" . -_:c14n68 a linkml:Annotation ; +_:c14n70 a linkml:Annotation ; skos:example true ; linkml:tag linkml:simple_dict_value . -_:c14n69 sh:namespace "http://purl.org/pav/"^^xsd:anyURI ; +_:c14n71 sh:namespace "http://purl.org/pav/"^^xsd:anyURI ; sh:prefix "pav" . -_:c14n70 a linkml:AnonymousClassExpression ; +_:c14n72 a linkml:AnonymousClassExpression ; linkml:slot_conditions linkml:exact_mappings . -_:c14n74 sh:namespace "http://www.geneontology.org/formats/oboInOwl#"^^xsd:anyURI ; +_:c14n76 sh:namespace "http://www.geneontology.org/formats/oboInOwl#"^^xsd:anyURI ; sh:prefix "OIO" . -_:c14n75 linkml:range linkml:string . -_:c14n76 sh:namespace "http://rdf.cdisc.org/mms#"^^xsd:anyURI ; +_:c14n77 linkml:range linkml:string . +_:c14n78 sh:namespace "http://rdf.cdisc.org/mms#"^^xsd:anyURI ; sh:prefix "cdisc" . -_:c14n80 linkml:allowed true . -_:c14n81 sh:namespace "http://purl.org/linked-data/cube#"^^xsd:anyURI ; +_:c14n82 linkml:allowed true . +_:c14n83 sh:namespace "http://purl.org/linked-data/cube#"^^xsd:anyURI ; sh:prefix "qb" . -_:c14n82 a linkml:Example ; +_:c14n84 sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; + sh:prefix "rdfs" . +_:c14n85 a linkml:Example ; linkml:description "allow additional data if they are either strings or integers" ; - linkml:object _:c14n96 . -_:c14n85 linkml:allowed false . -_:c14n86 a linkml:AnonymousClassExpression ; + linkml:object _:c14n99 . +_:c14n88 linkml:allowed false . +_:c14n89 a linkml:AnonymousClassExpression ; linkml:slot_conditions linkml:is_grouping_slot . _:c14n9 a linkml:AnonymousClassExpression ; linkml:slot_conditions linkml:ucum_code . -_:c14n91 sh:namespace "http://schema.org/"^^xsd:anyURI ; +_:c14n94 sh:namespace "http://schema.org/"^^xsd:anyURI ; sh:prefix "schema" . -_:c14n92 linkml:range_expression _:c14n63 . -_:c14n93 linkml:range_expression _:c14n5 . -_:c14n94 linkml:range_expression _:c14n95 . -_:c14n95 linkml:range linkml:string . -_:c14n96 linkml:range_expression _:c14n61 . -_:c14n97 linkml:range_expression _:c14n21 . +_:c14n95 linkml:range_expression _:c14n5 . +_:c14n96 linkml:range_expression _:c14n23 . +_:c14n97 linkml:range_expression _:c14n98 . _:c14n98 linkml:range linkml:string . +_:c14n99 linkml:range_expression _:c14n63 . From 54f8e551f51d5feae68245dac65bd2ecc6b778dc Mon Sep 17 00:00:00 2001 From: Corey Cox <69321580+amc-corey-cox@users.noreply.github.com> Date: Fri, 7 Aug 2026 12:36:01 -0500 Subject: [PATCH 32/72] chore(deps): unblock the dependabot queue --- .github/workflows/dependency-audit.yaml | 8 +- packages/linkml/pyproject.toml | 6 +- tests/conftest.py | 11 +- .../test_typedbgen_integration.py | 10 ++ .../test_utils/test_rdf_canonicalize.py | 9 +- uv.lock | 113 +++++++++--------- 6 files changed, 82 insertions(+), 75 deletions(-) diff --git a/.github/workflows/dependency-audit.yaml b/.github/workflows/dependency-audit.yaml index c2ac4dfced..a4e89e4eb6 100644 --- a/.github/workflows/dependency-audit.yaml +++ b/.github/workflows/dependency-audit.yaml @@ -96,15 +96,9 @@ jobs: fi # Step 1: Run uv audit to check for vulnerabilities (CVEs) - # - # GHSA-6w46-j5rx-g56g (pytest predictable tmpdir path) is fixed only in - # pytest 9.0.3, but pytest 9 removed the private _pytest.assertion.util - # ._diff_text API that tests/conftest.py depends on. We pin pytest <9 - # (see packages/linkml/pyproject.toml) and ignore this single test-only, - # low-risk advisory until conftest is migrated to stdlib difflib. - name: Audit lockfile for CVEs if: steps.deps.outputs.changed == 'true' - run: uv audit --ignore GHSA-6w46-j5rx-g56g + run: uv audit # Step 2: Run a sync. If a package contains known malware, # the OSV-lookup triggers an immediate, non-zero failure exit. diff --git a/packages/linkml/pyproject.toml b/packages/linkml/pyproject.toml index 500af3c89b..5a6d8bdb12 100644 --- a/packages/linkml/pyproject.toml +++ b/packages/linkml/pyproject.toml @@ -118,11 +118,7 @@ bigquery = [ ] tests-extra = [ - # pytest 9 removed the private _pytest.assertion.util._diff_text API that - # tests/conftest.py relies on for snapshot diffs. Pin <9 until conftest is - # migrated to stdlib difflib. The only pytest 9 CVE (GHSA-6w46-j5rx-g56g, - # predictable tmpdir path) is test-infrastructure-only. - "pytest >= 7.4.0, < 9", + "pytest >= 7.4.0", "pytest-subtests >= 0.11.0", "pytest-cov >= 4.1.0", "pytest-xdist >= 3.6.1", diff --git a/tests/conftest.py b/tests/conftest.py index d31b356abf..18fba769ea 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,3 +1,4 @@ +import difflib import os import re import shutil @@ -12,7 +13,6 @@ import docker import pytest import requests_cache -from _pytest.assertion.util import _diff_text import tests from linkml.utils.deprecation import EMITTED @@ -101,11 +101,12 @@ def compare_to_snapshot(self, other: object) -> bool: else: is_eq = normalize_line_endings(actual) == expected if not is_eq: - # TODO: probably better to use something other than this pytest - # private method. See https://docs.python.org/3/library/difflib.html - # highlighter is a no-op function for pytest 8.4+ compatibility self.eq_state = "\n".join( - _diff_text(actual, expected, lambda x, **kwargs: x, verbose=self.config.getoption("verbose")) + line.rstrip("\r\n") + for line in difflib.ndiff( + expected.splitlines(keepends=True), + normalize_line_endings(actual).splitlines(keepends=True), + ) ) return is_eq diff --git a/tests/linkml/test_generators/test_typedbgen_integration.py b/tests/linkml/test_generators/test_typedbgen_integration.py index bb4ec47610..ef0ed648ec 100644 --- a/tests/linkml/test_generators/test_typedbgen_integration.py +++ b/tests/linkml/test_generators/test_typedbgen_integration.py @@ -11,6 +11,7 @@ """ import socket +import sys import uuid from pathlib import Path @@ -18,6 +19,15 @@ from linkml.generators.typedbgen import TypeDBGenerator +# The typedb-driver wheel embeds a CPython 3.13 extension, so importing it on +# 3.14 raises ImportError rather than ModuleNotFoundError. Skip before the +# import is attempted; importorskip only treats a missing module as a skip. +if sys.version_info >= (3, 14): + pytest.skip( + "typedb-driver native extension does not support Python 3.14", + allow_module_level=True, + ) + typedb = pytest.importorskip("typedb.driver", reason="typedb-driver not installed") from typedb.driver import Credentials, DriverOptions, TransactionType, TypeDB # noqa: E402 diff --git a/tests/linkml_runtime/test_utils/test_rdf_canonicalize.py b/tests/linkml_runtime/test_utils/test_rdf_canonicalize.py index 0251ddcb95..63dbf095a1 100644 --- a/tests/linkml_runtime/test_utils/test_rdf_canonicalize.py +++ b/tests/linkml_runtime/test_utils/test_rdf_canonicalize.py @@ -1,5 +1,6 @@ """Tests for deterministic RDF serialization via pyoxigraph RDFC-1.0.""" +import os import re import subprocess import sys @@ -259,7 +260,9 @@ def test_sort_is_load_bearing(): ) def run(seed: str) -> str: - env = {"PYTHONHASHSEED": seed, "PATH": "/usr/bin:/bin"} + # Inherit the real environment and vary only the hash seed. Replacing it + # wholesale drops SystemRoot on Windows, which breaks winsock init. + env = {**os.environ, "PYTHONHASHSEED": seed} result = subprocess.run( [sys.executable, "-c", program], check=True, @@ -487,7 +490,9 @@ def test_fallback_is_deterministic_across_processes(output_format): ) def run(seed: str) -> str: - env = {"PYTHONHASHSEED": seed, "PATH": "/usr/bin:/bin"} + # Inherit the real environment and vary only the hash seed. Replacing it + # wholesale drops SystemRoot on Windows, which breaks winsock init. + env = {**os.environ, "PYTHONHASHSEED": seed} result = subprocess.run( [sys.executable, "-c", program], check=True, diff --git a/uv.lock b/uv.lock index 94d9db8ab0..b2dd538006 100644 --- a/uv.lock +++ b/uv.lock @@ -815,59 +815,59 @@ toml = [ [[package]] name = "cryptography" -version = "49.0.0" +version = "50.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz", hash = "sha256:f89660a348f4f78a92366240a61404e337586ef7f5909a2fef59ca88ef505493", size = 854345, upload-time = "2026-06-12T20:02:30.512Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/22/adf66990e63584a68dfb50c24f48a125c07b1699899381c8151e63ed458c/cryptography-49.0.0-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:966fe0e9c67490071f14c0d2b1cb2dfb3023c5ce39457343931415f08382f2db", size = 4032100, upload-time = "2026-06-12T20:02:32.143Z" }, - { url = "https://files.pythonhosted.org/packages/09/41/3797cfaf69cae04a13ee78ebd83f0678d9c02b4779d21ce24445326f1a69/cryptography-49.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:36d1709f992593689b45bda411498d62c6e365f2ca00b84657d4dadd24de16db", size = 4692978, upload-time = "2026-06-12T20:01:21.305Z" }, - { url = "https://files.pythonhosted.org/packages/e6/8b/43011f7ebe515a8aa20d61f290a326cd890c2e738e16e59eaff8d9c3a412/cryptography-49.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0e959b578856a3924bc0cbb710fc12c387b9412a951389f3ca61704a9e25f325", size = 4716422, upload-time = "2026-06-12T20:01:48.566Z" }, - { url = "https://files.pythonhosted.org/packages/4a/91/01ce7303a4579e6d3a6abef01bd322848e9ea7a219adcabc5048b9033571/cryptography-49.0.0-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:53ecee2e23f7169b6117e99fc8a944e5e50f79e69758a83b52a00cb98ab2b2d2", size = 4700503, upload-time = "2026-06-12T20:02:47.091Z" }, - { url = "https://files.pythonhosted.org/packages/62/99/a2c95cf8293f07491e9e27c20cc4dcd18176d944e674679adeb1d0173fd6/cryptography-49.0.0-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:2eda353d8a27bcbcaa4cbed18994a74ab4d19a2ca897db188ea269ab9b71419b", size = 5309779, upload-time = "2026-06-12T20:02:08.987Z" }, - { url = "https://files.pythonhosted.org/packages/20/2c/0622f20ff02b2ef32558733443805dc82fd4c275be01b2d19d14676f3a1b/cryptography-49.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2afe9051da7ae7bd5905da5a949280c7d2bb75682e188f650a9d0f2756b834c6", size = 4749683, upload-time = "2026-06-12T20:02:03.335Z" }, - { url = "https://files.pythonhosted.org/packages/a3/5b/c5246635d5fd3b64e0d45ae10e99fd32fe9676a79915ccfe5a61ba9af1a5/cryptography-49.0.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:0b82e28ee398a386f0807bba7884d30f25218855690f45115831bcce5d90822c", size = 4337874, upload-time = "2026-06-12T20:02:54.323Z" }, - { url = "https://files.pythonhosted.org/packages/6d/88/05563c7fe2e914e87d1a536d06fe83e66b4e1d95cb593e05aea375531da8/cryptography-49.0.0-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:ccac2bfebc306b862133e3bb71f3f6ee8bb525240089b2d952e4144b3a6d5da7", size = 4700283, upload-time = "2026-06-12T20:01:34.822Z" }, - { url = "https://files.pythonhosted.org/packages/c4/b6/d7696e4e890d6ae1469935164c9e5215c557671cb78d6e3f458ccceaa632/cryptography-49.0.0-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:d0527ce944105f257f605a827d6ebead966c752038b6e8656abb9c5edee6fc68", size = 5265844, upload-time = "2026-06-12T20:01:24.09Z" }, - { url = "https://files.pythonhosted.org/packages/a9/3c/f3ad17eecc1a57b0ba236dc01f90e783c51f4a2f35f64777cc4f47a184b2/cryptography-49.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:cbc77da8c523d5abd028635ba850a6966fcee2c82e2bf65a41d1d8afe0f98be9", size = 4749290, upload-time = "2026-06-12T20:01:30.848Z" }, - { url = "https://files.pythonhosted.org/packages/4f/01/339573cf1023163a400b0b5d16f6d507de413b9f60be6fd1b77feeaf6737/cryptography-49.0.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b87e65d263b3e5d3bb92a57e2a6638e2f31110fa7aa890c7b2dbba42248d0a3f", size = 4834612, upload-time = "2026-06-12T20:01:29.246Z" }, - { url = "https://files.pythonhosted.org/packages/71/fd/577302e213a1be9468f92d1afef66fcf1ef83d516819d9992ca547f592bd/cryptography-49.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:66ec79c3904820572d7e987abdf304281f141d37ad9a489b8e97066e7b9b6459", size = 4980804, upload-time = "2026-06-12T20:01:42.853Z" }, - { url = "https://files.pythonhosted.org/packages/1f/09/f42b1d190c5ba75f72062a387f8030d1d75f6ab035788f1d9c4b01de6525/cryptography-49.0.0-cp311-abi3-win_amd64.whl", hash = "sha256:e5dfc1e64de5677cec922ffa8da89c546d0415bf6efdf081842e5d44c84e1f0e", size = 3810026, upload-time = "2026-06-12T20:02:39.262Z" }, - { url = "https://files.pythonhosted.org/packages/ec/9e/db72b3ae7fc9cfad53e630e56c6ae83b9b6ff0bf3718ffb8012d20b3aabf/cryptography-49.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:73a205dce83953d131a4aa1e0fd917a2fd1c5b1eef251e9d7152efefcbf5caf7", size = 4013892, upload-time = "2026-06-12T20:02:10.735Z" }, - { url = "https://files.pythonhosted.org/packages/86/12/c48a424f38db03027be9f7ed5c7dc5de9933dbee992865f98b13727a009d/cryptography-49.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:196ecd6a36e4e9aa10270393bb98d8df88fccee0bf1e5128b91ae4eb4375896d", size = 4678835, upload-time = "2026-06-12T20:02:48.743Z" }, - { url = "https://files.pythonhosted.org/packages/68/28/8a3ad4653662c93fc44dc4e5d8fd374c25c42e07b34bbfbadf49cf57a5a8/cryptography-49.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7abcee80084cda3f7691f3eb1ce480d8df49cec637b429aa35986c1de71738aa", size = 4697239, upload-time = "2026-06-12T20:02:56.03Z" }, - { url = "https://files.pythonhosted.org/packages/a8/b2/2193fc74f81aee4f9b62733133b73b5176718932ed8f2e4b03fa040480a6/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:4ae387c9cb68ea569ca17e490d66d8142b81c3cc814bf179974b7d146e490bbb", size = 4685593, upload-time = "2026-06-12T20:02:50.666Z" }, - { url = "https://files.pythonhosted.org/packages/47/f1/1d3eaa243bfc5de4a187b22aa8c048b3e4980bfbe830ac46e6bac2e66947/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:f37d847238971164fdbc68ade6f6574aecc9c0af714190e2083429ff68f4ce9d", size = 5289961, upload-time = "2026-06-12T20:01:46.468Z" }, - { url = "https://files.pythonhosted.org/packages/58/39/2d51306721330c486495853eda1c567880ff036de15a14c4b74f399934af/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:c2bc30226390d60ea19d9f82b19db005fe0452154a23c1c410c12ea801e43561", size = 4731145, upload-time = "2026-06-12T20:02:16.832Z" }, - { url = "https://files.pythonhosted.org/packages/17/50/983e838c7fd0d87fd8c969bcdd328edaf5f756e38df5281637424c155873/cryptography-49.0.0-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:07cab27cc7b7e0fd28e5e26bb9eeedde5c135c868b46de4a27845abe94af6122", size = 4321719, upload-time = "2026-06-12T20:02:52.611Z" }, - { url = "https://files.pythonhosted.org/packages/a7/f5/8f571d7e27c55bce9f76f026143bcb1e040a4233149ecca0bea5fa5dd5f7/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:b20133d204d2bb56ba047642199603876c872026ca53e79c35b83772ab2cc505", size = 4685209, upload-time = "2026-06-12T20:02:07.282Z" }, - { url = "https://files.pythonhosted.org/packages/e7/84/0e27016a6fc5a0886f797018b26aa42f40c09a82332bff77822a451deaaa/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:b970c6da94d5bb18629db453d14f2a1300f6bf59b61e9b82377931ef95504866", size = 5246285, upload-time = "2026-06-12T20:01:32.439Z" }, - { url = "https://files.pythonhosted.org/packages/11/2d/5e1fb307cb5931881516b464c98774b3f2c36b5d4bb9a2830253cf553cad/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:d8ecde755e2e91bf773fc94e8c9d730cd7f2007004cb492263a794ec3899a1c8", size = 4730441, upload-time = "2026-06-12T20:02:01.469Z" }, - { url = "https://files.pythonhosted.org/packages/e4/c0/bff5a02ee731d207d6a1ed51732549d8c53d2bc8da1d10ec6f2844201d68/cryptography-49.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e3fb64c420688e5319ae25113a354015abbd8dffbfbc41781a1ea66fc7622ac3", size = 4815869, upload-time = "2026-06-12T20:01:36.574Z" }, - { url = "https://files.pythonhosted.org/packages/b9/26/814681d14248d95d73d5c3eea0c39a94eb8302df966f670a2c60de90974b/cryptography-49.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:32703d93296f5c1f4b53349ad3a250c2cae0fdecd3a3dd5d47e616d8d616af27", size = 4960948, upload-time = "2026-06-12T20:02:18.688Z" }, - { url = "https://files.pythonhosted.org/packages/4c/fe/93ecac273d3738939d023612ad12cca9a3740a5345d69fda04134c43fd96/cryptography-49.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:33cd0565932807baddb67b96dbee92f2c374b5c89dee09fd74079aeb8c8dba61", size = 3799153, upload-time = "2026-06-12T20:01:39.059Z" }, - { url = "https://files.pythonhosted.org/packages/19/2a/5bb823f5bedcf80718cea7fbc95ec5515cca3769633c4b01a32be7f30e7c/cryptography-49.0.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ec5e529fb80935c94fe7b729f9972b50e351a0e6b50aa294fd5cabb109fcc29a", size = 4025947, upload-time = "2026-06-12T20:01:25.745Z" }, - { url = "https://files.pythonhosted.org/packages/3d/df/40577043ca124e17012f408ddddaeb213b856336ac82ddb3bc915f39e29f/cryptography-49.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f78ff2c9ed8dc2d036b0f4d640e22522213d047c1b14e61205a7e55c80a494d4", size = 4692429, upload-time = "2026-06-12T20:01:53.628Z" }, - { url = "https://files.pythonhosted.org/packages/2c/99/2d13299eb3dd27b02dcfaafcc91d6b5cb3329f7cbd6d8f51921acd566c1a/cryptography-49.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:35b151772baff2c74cba7fa290ceaff4c3b11c0c881eb93eb5dbc05a7cfbba18", size = 4700968, upload-time = "2026-06-12T20:02:45.383Z" }, - { url = "https://files.pythonhosted.org/packages/a5/4d/9c0cd02f95e2602dd5e563da149ee0830abef3537be8b34dc56281ebe27a/cryptography-49.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0f21641cf4b30fca7aee061ced0ec7ad7b073518088b7c9969a297c0ae796c69", size = 4697758, upload-time = "2026-06-12T20:01:41.13Z" }, - { url = "https://files.pythonhosted.org/packages/24/01/186c825898477d77e2324d5360fefe622ff1d8d1963ec0554e2cada8ec77/cryptography-49.0.0-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:9e82dcc8e56052715fb18b2429e3bca4823b1629136a2084fc45a9a5cecb9b64", size = 5298863, upload-time = "2026-06-12T20:02:24.579Z" }, - { url = "https://files.pythonhosted.org/packages/b8/7b/62cbbab75d0659865bf0273790031544a0b16c8072d258f9428dcd8190dc/cryptography-49.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6f2debedf9ca60cf1d5bd466475638af5130f89965605cd818484d19987d3a21", size = 4735983, upload-time = "2026-06-12T20:01:50.14Z" }, - { url = "https://files.pythonhosted.org/packages/6c/72/3e798c064bc39e471008075d0f9bc9daf77a80879c092e4a8e170c585ed4/cryptography-49.0.0-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:8c25ceb16df5b9435f3f6a9829204985b0e0cbee3b48aacd432c7d2c850b44d9", size = 4334173, upload-time = "2026-06-12T20:01:44.743Z" }, - { url = "https://files.pythonhosted.org/packages/f0/ee/6fca21d1ac73e06f8bef71940abfd4d2f6472b4bca284d770f32bd4086f6/cryptography-49.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:28d8b15e6275f12c8a207dc309dfa957903c927d08d0cc937ee3f63f200693cc", size = 4697298, upload-time = "2026-06-12T20:02:20.918Z" }, - { url = "https://files.pythonhosted.org/packages/67/d0/a5fcd3515f0bae49a7b6d0413cc1bdccdcc1fc0047037a0d480642cdc5d6/cryptography-49.0.0-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:6fc361c34fb6aac015ce19435876635e5c6d21db31998b0920f675f131e043b8", size = 5254338, upload-time = "2026-06-12T20:02:22.737Z" }, - { url = "https://files.pythonhosted.org/packages/a0/84/84fe36f19caf857d61cb7fc9c63035a47ffabd84ea12d1d393148efa3615/cryptography-49.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:2400ef9c9e2299a25614eb1dea3db54a69b1349efd043bfac9c67630d136df36", size = 4735650, upload-time = "2026-06-12T20:02:41.389Z" }, - { url = "https://files.pythonhosted.org/packages/6c/a0/db537264e234f7273a73ec020873d6d6b39dfd8a53db78b550ca8320440e/cryptography-49.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:67e1d20ad9ef3a563c59ef22e7a8a0b8210bd26604369ea4a30a7c66aefe504e", size = 4834820, upload-time = "2026-06-12T20:01:51.847Z" }, - { url = "https://files.pythonhosted.org/packages/93/77/8df9eb486495979bccecd1062e2eaf435250e84437040295b57d09048b0b/cryptography-49.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:42b0684e0e40cf26122427802486f6d93aea593612603a94fbf260c7eb1e9c1b", size = 4967968, upload-time = "2026-06-12T20:02:12.524Z" }, - { url = "https://files.pythonhosted.org/packages/c2/e6/f60198ea8d9dfa15fff9ed4ca02ce362f6eadd9ba757dcc50634c4257b63/cryptography-49.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:026ac7423e6fa66872d3bf889be5974507da3944f866f704fa200eadacd00001", size = 3785547, upload-time = "2026-06-12T20:02:26.847Z" }, - { url = "https://files.pythonhosted.org/packages/63/d3/4a83af35d65e3fad632c926fad684c193ea4398569ccb0bbbc7fe8f5dc9a/cryptography-49.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:fc1e275c2f1d97b1a6450b8b0ea3ebfa6e087a611c2b26cb2404d48588abab7b", size = 3993685, upload-time = "2026-06-12T20:02:14.883Z" }, - { url = "https://files.pythonhosted.org/packages/d6/a7/f9dac0ab7f80368c56993a7bf638ef9935f825c91902798481fac0898138/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83782480a4a9da4d0feb51950131ba32e12e70813848b3343f6e18c28a66838", size = 4676239, upload-time = "2026-06-12T20:02:28.793Z" }, - { url = "https://files.pythonhosted.org/packages/d7/70/2ba3769dd0ae167e2f33dfa9592d45db6ff9a61d62ca1a5b3d1bdd09068f/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b39efa323140595abd3ecca8529d321ae50f55f3aa3ba9cc81ea56a6011953d5", size = 4715584, upload-time = "2026-06-12T20:01:27.495Z" }, - { url = "https://files.pythonhosted.org/packages/94/64/2923570ac1c0bd3a737aa366ac3abbbbde273042308b8cde95e2364a6e6a/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:b47db11c2c3525083296069b98ac5221907455e989ae0c2e3008bde851921615", size = 4675885, upload-time = "2026-06-12T20:01:55.49Z" }, - { url = "https://files.pythonhosted.org/packages/ab/f8/614dc7e051418cfe53d55173c1e24c6b0085e89996fe90508c2fdf769aef/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:084ef1af862eb07ec46d25f68689f2102a9fc0e05ce7b80f14f5fe51e4eef0f6", size = 4715449, upload-time = "2026-06-12T20:02:05.469Z" }, - { url = "https://files.pythonhosted.org/packages/aa/50/a9caea39ad19c431c1a3f8a31114df65b260cdfe67786b6c7e7c040c4c44/cryptography-49.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:be9fcb48a55f023493482827d4f459bd263cc20efde64f204b97c123201850c6", size = 3783731, upload-time = "2026-06-12T20:02:43.319Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/de/41/6cbdcf9142d00fe82836fbb51e503e58088575cf7a0fe1dbff6695bf0840/cryptography-50.0.0.tar.gz", hash = "sha256:eeac2acb5a20ed25e0ad6d1df9891a520b78b404266b6d11778f25d5d691a6c9", size = 880201, upload-time = "2026-07-31T14:25:10.11Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/5c/59086b4aac5e879d38ddbcf74e4be7ade89cebc3eb199a55da998c3bb46a/cryptography-50.0.0-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:031e2d5dd4bb9caa3ca9c82e5a197fd8ae680232cee62603d1a813f3f07e3d03", size = 4001252, upload-time = "2026-07-31T14:23:33.331Z" }, + { url = "https://files.pythonhosted.org/packages/57/ef/8f2df13c7216bcad3e1c74e07f6e193d93e998e114f524a53877c9af27ad/cryptography-50.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fd9192b7b70c573d7f214eb1ae35e00d359f6f5e4b27c7e21e30de1fc6204645", size = 4719554, upload-time = "2026-07-31T14:23:35.611Z" }, + { url = "https://files.pythonhosted.org/packages/d9/41/029086c34d91052fc3b88bcc8056f709a7c915c7a23b235a54eb800b1c97/cryptography-50.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:06a32a980526a6ab9a4b9bf8f7385800791e2bb960903cb6b530e4817509a3b7", size = 4702130, upload-time = "2026-07-31T14:23:37.635Z" }, + { url = "https://files.pythonhosted.org/packages/7d/ff/b6ce0954962e7f7b969f850a883744197bb3910bdfd7b6da162eab7d9f68/cryptography-50.0.0-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:a1b30560f2acc95aa8b2e06e716a13dbfc97314747b80d9707e307f77b40d6b3", size = 4725244, upload-time = "2026-07-31T14:23:39.471Z" }, + { url = "https://files.pythonhosted.org/packages/06/1e/63a1027cb7fec360a182208e1b7767d5aa1fe57be3d6aa856e69a321edc0/cryptography-50.0.0-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:8d89f3976b10b4ce31118de72329025f70d2c6ead14a8217c5514dd2c6d5a78f", size = 5342265, upload-time = "2026-07-31T14:23:41.286Z" }, + { url = "https://files.pythonhosted.org/packages/6b/72/a1116d683a6d7ece94590013882515de087edf9ef0e6292aae615a44df73/cryptography-50.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:b42a28c1844fd9de8f3f7d540e36b66f3a9c83fceac7170ebc7a6a19edd9dcae", size = 4734609, upload-time = "2026-07-31T14:23:43.139Z" }, + { url = "https://files.pythonhosted.org/packages/15/37/36a9c479bbe49acea2636c7fd3360d20f7b7e079c300352011c44850b181/cryptography-50.0.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:900131fafd8aead39ac7dd3a7e833be754c17a95cfd91221636949fe4eb0aa8a", size = 4356517, upload-time = "2026-07-31T14:23:44.939Z" }, + { url = "https://files.pythonhosted.org/packages/32/98/8a151d64367204cbc63ec65d37502f1d9c53cf4bfc6ec3c532614dbec60d/cryptography-50.0.0-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:07949c449a1abcf60d1ee6e88956d89404c7df3c8258f46589e912988e551987", size = 4724529, upload-time = "2026-07-31T14:23:46.93Z" }, + { url = "https://files.pythonhosted.org/packages/22/f6/ec13b470172126464a86bf54d2294a46d29837fc51ba3e45d4047946fb5e/cryptography-50.0.0-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:f89831ef99dd7dd169ab06d63a831adb9e20a87aac6d380266bbda5823349169", size = 5299852, upload-time = "2026-07-31T14:23:48.851Z" }, + { url = "https://files.pythonhosted.org/packages/da/3a/f05e32c99d440c9bb891ea0e36c9091891e36be5a9a87ab2ee6ea20729f6/cryptography-50.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:82148ec5bddac30b51a5b3c1945075f896fa022cb93f8e4a01e9f6ee95292c5f", size = 4734462, upload-time = "2026-07-31T14:23:50.861Z" }, + { url = "https://files.pythonhosted.org/packages/ca/dc/bd72b26be8953f80625f63151efd38eee71c76ca6cf591c08ff34615a79e/cryptography-50.0.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1489e263a8048bb8b6a8bac662eb2d402ea5d2b7b4699b72f385f1e2772db105", size = 4852708, upload-time = "2026-07-31T14:23:52.715Z" }, + { url = "https://files.pythonhosted.org/packages/27/20/c930314a2ab476d15dec966ec87e2e9637bb02b06106b12c0396c57bb603/cryptography-50.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7cec5b856506da6defb290f30c9ee687d5f5e8cb0bd3f6459dde43b0b4fa40ef", size = 5004179, upload-time = "2026-07-31T14:23:54.887Z" }, + { url = "https://files.pythonhosted.org/packages/32/2e/c9db68a0c4bfa28e310707527c0ee3a2bd254104d2e02e68f368e197aa4c/cryptography-50.0.0-cp311-abi3-win_amd64.whl", hash = "sha256:bd1c592e4d5974f0d08d4888e432157adba757c66da0246918e43677fafa2d30", size = 3840395, upload-time = "2026-07-31T14:23:56.677Z" }, + { url = "https://files.pythonhosted.org/packages/c3/fb/951032a3bf22a5697c83183fb6294a4843772947a70e616c57b3ff5f522e/cryptography-50.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:49e7d93abdbd2990caced757e5fade25302f719c3c8fb6e6fff2dde98999fc41", size = 3989258, upload-time = "2026-07-31T14:23:58.881Z" }, + { url = "https://files.pythonhosted.org/packages/d4/67/91eb047e69c5e845f2f14b8a2e4a1aab0f283cb885531e9e22c8adb176bc/cryptography-50.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:19736989797678c6af1e55cd49055cdbcb55d8f6b5583ac5335f933aba9101dc", size = 4700648, upload-time = "2026-07-31T14:24:00.702Z" }, + { url = "https://files.pythonhosted.org/packages/30/82/85f0f7425c856b9f96459411eb12e74ef72df9caf6f8f15bf23a33ff131f/cryptography-50.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:80b63928fa35083b33966ce1efb70e5b9607181e49dcd1c22c8c005e319f667f", size = 4682442, upload-time = "2026-07-31T14:24:02.538Z" }, + { url = "https://files.pythonhosted.org/packages/1a/28/b555a365adff1cca2fbe7b9e487d68a40de6bc67ff2cb587473eb43de0e7/cryptography-50.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:d58c3db7cd6eed54e6c06744db55456b65ebd7492ddeae9c1e93cfca7aa857d3", size = 4707596, upload-time = "2026-07-31T14:24:04.394Z" }, + { url = "https://files.pythonhosted.org/packages/72/d8/f52538140cc719df62a01cf87d1c7142318d235817109d6f4054d7c352d6/cryptography-50.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:df2a58a472f332225671c35b0a830208b86d004f82baa8530fa3782c85646533", size = 5314552, upload-time = "2026-07-31T14:24:06.31Z" }, + { url = "https://files.pythonhosted.org/packages/38/14/6120e5bd7c5aa022ad15424ba4d5c5269d0d9448ed4d55e492ea91e3c1c4/cryptography-50.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:11b74db56cdbe3cdee6e3f6982ecb70334fa10dce99ed58bf7894aaaa3b2a037", size = 4717113, upload-time = "2026-07-31T14:24:08.349Z" }, + { url = "https://files.pythonhosted.org/packages/fa/71/190bf38c3ee2e0f8efc9860ae100c9df4169742eef274b91e7aa1cb133b9/cryptography-50.0.0-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:f59e38625469987d7ef6d495323c55e7db6c212eaf6112267e0d3b565a2e9c9f", size = 4338580, upload-time = "2026-07-31T14:24:10.227Z" }, + { url = "https://files.pythonhosted.org/packages/3a/63/504ccfbbe61fd8aa983f7f146399cdf034c72c2fc55f5b2dfdcdcdb20c99/cryptography-50.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:ecfed7367f965a0328cfbdd70da860f15441f002f613185668c6e6ebf5a0ac11", size = 4707038, upload-time = "2026-07-31T14:24:12.169Z" }, + { url = "https://files.pythonhosted.org/packages/01/77/2cf79bbfc4d12ca106437a6e170d6aaa01a373e93093118aaaef0e801bd4/cryptography-50.0.0-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:9aa87839c383bdbab6ef865787a1fb877af8dd03464c4400322726feaaadfc6d", size = 5273110, upload-time = "2026-07-31T14:24:14.38Z" }, + { url = "https://files.pythonhosted.org/packages/e5/45/8aae2972c520145377ea3559a605a899bebe227bf070b33cdb445929a9b9/cryptography-50.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:6ba6a53445bd3cfa809ef3ef5f1589aa6ba08784a1d962bf47d0940e871dab1c", size = 4716439, upload-time = "2026-07-31T14:24:16.415Z" }, + { url = "https://files.pythonhosted.org/packages/7b/20/4fe50b619a48c2525cc46e2dbc1ac490708d704be5d467bdaac6dc955682/cryptography-50.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3f5735ffe4996d28b809371756219f5354864902a3b9e7c0b9ee87041209fc9c", size = 4837383, upload-time = "2026-07-31T14:24:18.553Z" }, + { url = "https://files.pythonhosted.org/packages/92/91/3a31366e183343d3703f8995c095f5734676bd6938118047e50fcf279eb4/cryptography-50.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:1b4a266766514614f8aa60416e71f2fc6e575d36e7bdc90f644fadb2f4b75b95", size = 4985772, upload-time = "2026-07-31T14:24:20.385Z" }, + { url = "https://files.pythonhosted.org/packages/74/9a/02ffe35b2853d121689871eb5dce862092562b3a1ed5cc98f1aaed441506/cryptography-50.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:12b9c6996425c76ea6c457ace4f3073e715b8c545add07cd1a8f3a4f90691269", size = 3816291, upload-time = "2026-07-31T14:24:22.125Z" }, + { url = "https://files.pythonhosted.org/packages/03/37/73d005be173aff344af30e9fd2a576575cb2391a7101d9cd3842e1fa8cce/cryptography-50.0.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ccdc4a71a4dabae05de219404f9f4abc38e3b58422177ff93d0da05967dafa07", size = 4036009, upload-time = "2026-07-31T14:24:24.122Z" }, + { url = "https://files.pythonhosted.org/packages/ff/c6/7a6202a534e32103a285b7834a120869557fe198d51d7cfe59754c8bda9c/cryptography-50.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:910e1d2668e7de9648f2bcee30e180db2a6b15c30f887d7c4c93ddf96e3992e3", size = 4745252, upload-time = "2026-07-31T14:24:26.118Z" }, + { url = "https://files.pythonhosted.org/packages/85/4f/0fa8c2f4428198f15d9ff8d63400e27afbf94ce833f6108da1eb3753f945/cryptography-50.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a91296cb61e8df6f86d0c19cc4068228da256bf59bf86049fbd821084565327f", size = 4728939, upload-time = "2026-07-31T14:24:27.994Z" }, + { url = "https://files.pythonhosted.org/packages/d1/63/54dd723490ba2dc09b299682c10b38db38f159728bcaae8c591b8af2f22d/cryptography-50.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e722f16708d854fe924790e051061f6704a472c3bac347b6fd88033ea8dd0dc5", size = 4748483, upload-time = "2026-07-31T14:24:30.254Z" }, + { url = "https://files.pythonhosted.org/packages/1d/dd/7c77d26285cc7f6991efce64a0f5b4f9383bfa5dd8c5033003eaf7db4cdb/cryptography-50.0.0-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:d764dcf130c428ef66786f866dd750f53182bc608813489915e9fc106bb0c82f", size = 5367599, upload-time = "2026-07-31T14:24:32.457Z" }, + { url = "https://files.pythonhosted.org/packages/46/c9/f60aed34c013f317f92817b6c171c2d22a78270fa41109bd4b08af26b194/cryptography-50.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:105110f43a471dbd0060b9c9516cb8a6a79233631a04cc2ba16f28323ac6e025", size = 4762647, upload-time = "2026-07-31T14:24:34.599Z" }, + { url = "https://files.pythonhosted.org/packages/be/f3/f9a0173b139372c3a48ed98154b45cc6b9de17c789d5ab552e621c293609/cryptography-50.0.0-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:828743d939e9629bc267b8e2d08d8bb67cd4319c771a33d4b18b22dd8fb7440a", size = 4385197, upload-time = "2026-07-31T14:24:36.647Z" }, + { url = "https://files.pythonhosted.org/packages/d8/36/83bb81f6e569bc38e1e4a7bc80f29b46bb9601920bc455fc8e888f5d5742/cryptography-50.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:2a8183b489dc1f7f80f135780fadc1108f14b31b8a40411c7a5b17425f65f28b", size = 4748095, upload-time = "2026-07-31T14:24:39.493Z" }, + { url = "https://files.pythonhosted.org/packages/6b/16/d3008eff98c764979865834c3d386d4fd041b5f52e7f34fc29ac1a5eb515/cryptography-50.0.0-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:6e7d61120573a7f2cd94cc095f9e81f6967c61ccdf194285aa143ecec8e0b708", size = 5325948, upload-time = "2026-07-31T14:24:41.556Z" }, + { url = "https://files.pythonhosted.org/packages/9c/f8/d97f9603efda3888187bfdb893f26c41be4735c10631d05d284ee6b047c4/cryptography-50.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:37fdb0d0111f1e2ff07139dfb79f1b49531f8e213c46f1163dd7642979b58c47", size = 4762400, upload-time = "2026-07-31T14:24:43.636Z" }, + { url = "https://files.pythonhosted.org/packages/64/a2/4615c8f7d81a00b1d6e6afe19f694e1543582349fb5f4076f6cb5dc36485/cryptography-50.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c87f62a3d3b9888ed0fdde100ec06aa61ca9cd44bad9057d1dff9a516b5f5bb9", size = 4878208, upload-time = "2026-07-31T14:24:45.522Z" }, + { url = "https://files.pythonhosted.org/packages/d2/1a/efcfb02f91407149a0dacffffab791f7e19bf6385f63b3666dc8b5e5c9c8/cryptography-50.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:65c2c3add92b45fd0709db8594536aea39c2a67af0e27ffcf049c498501140b7", size = 5037050, upload-time = "2026-07-31T14:24:47.697Z" }, + { url = "https://files.pythonhosted.org/packages/57/30/4a22984d4f1bdfb8c054f07a92bc176b97a3134cc1d6c4b3bffb1f3688b4/cryptography-50.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:d24fead1d4d076e1bfb006dcec392074a3cd8d7b4fc8a595aa64073b2b7a96ba", size = 3874135, upload-time = "2026-07-31T14:24:50.085Z" }, + { url = "https://files.pythonhosted.org/packages/9d/3e/e54cde8c01631a5a8226ccd617eab9e57fd5cfdad90f1a9e6bb570794631/cryptography-50.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5e34edd123674534acd70147f0ca331eaa2c74e6325fb2028c886aa26ba0b68c", size = 3963170, upload-time = "2026-07-31T14:24:51.968Z" }, + { url = "https://files.pythonhosted.org/packages/01/b6/0b9e125e90f3d2dcf599a218a899cda7326a3158cfa258723f0b398b08f6/cryptography-50.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8eb5e1172eb569ea8a872796576e6a67c276351728b6455d5beb01242b027c6a", size = 4692441, upload-time = "2026-07-31T14:24:53.743Z" }, + { url = "https://files.pythonhosted.org/packages/53/c9/a5151588710785a96d7bc4de27d4cd62f263bbbcb203cfe29df537eb6505/cryptography-50.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:910d11e1a385c654bf738bf3e6b8e6ed5de0f5610fcae2be9e5b398d8081d20e", size = 4699810, upload-time = "2026-07-31T14:24:55.746Z" }, + { url = "https://files.pythonhosted.org/packages/c7/1a/15b92b25eb6ce3089cd49377ae990a0f3ad485a510f968aed1f19dbdcdf2/cryptography-50.0.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:62598a8a57f815db4c6259a4e97d857dab56697e7de8e8ab02352ab74da1995d", size = 4691924, upload-time = "2026-07-31T14:24:58.082Z" }, + { url = "https://files.pythonhosted.org/packages/62/15/219075012ab13e8905f3cd572204f4acb4b111df787104346b9bc0cea789/cryptography-50.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:07479a1cb08219ab719147e742e76090c9c773321959bb94946fffdd397a6437", size = 4699593, upload-time = "2026-07-31T14:24:59.951Z" }, + { url = "https://files.pythonhosted.org/packages/8e/b5/c2c5fce26f0ee40d21bafe7f191d29a34b35a65ac4fe8a1191d1983612e9/cryptography-50.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c99c003e088647b8a5b7c145d6f78c335f6348332b62e142d411c4b63d1460b9", size = 3813796, upload-time = "2026-07-31T14:25:02.298Z" }, ] [[package]] @@ -2022,7 +2022,7 @@ wheels = [ [[package]] name = "jupyterlab" -version = "4.6.0" +version = "4.6.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "async-lru" }, @@ -2039,10 +2039,11 @@ dependencies = [ { name = "tomli", marker = "python_full_version < '3.11'" }, { name = "tornado" }, { name = "traitlets" }, + { name = "typing-extensions", marker = "python_full_version < '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f8/3c/1ebd737b860cdbe61eed71536d06aab4e1781fbdcf07ecd5a1afe05b8adf/jupyterlab-4.6.0.tar.gz", hash = "sha256:6a8b88f2aae7ed4d012c634fc957c1a27f3aa217c32f0ced0175fac9ee17f9e5", size = 28181861, upload-time = "2026-06-18T13:52:56.039Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7a/7f/51c0c856ab286bdaf5709cf61ed13584ed9d4bee906479707da45b11b353/jupyterlab-4.6.2.tar.gz", hash = "sha256:e18ce8b34f3de350e93cd5b2c4f3ae884cbe266eb76bf5d6825a4ed34c13bcff", size = 28183650, upload-time = "2026-07-21T12:05:24.051Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/eb/aa48075d0aa3d0188db34ba2704f53791757743c0bb02e18c4eef989b6de/jupyterlab-4.6.0-py3-none-any.whl", hash = "sha256:b6938cb8a1ef3d43860ff4745a680c62cc0a9385f9672295bb56cd2e7cfeebe2", size = 17143447, upload-time = "2026-06-18T13:52:51.42Z" }, + { url = "https://files.pythonhosted.org/packages/63/1f/e39b248c76bb3736bc05a9491a6aa1315414c32dea12f548ecc1b24c758e/jupyterlab-4.6.2-py3-none-any.whl", hash = "sha256:5964447036629adfcd3fc0969effc1da6f47d2cbd0a60b2c2eea7c31be0ec6a8", size = 17166703, upload-time = "2026-07-21T12:05:19.818Z" }, ] [[package]] @@ -2411,7 +2412,7 @@ dev = [ { name = "pandera", specifier = ">=0.19.0" }, { name = "polars-lts-cpu", specifier = ">=1.0.0" }, { name = "pyshacl", specifier = ">=0.25.0" }, - { name = "pytest", specifier = ">=7.4.0,<9" }, + { name = "pytest", specifier = ">=7.4.0" }, { name = "pytest-cov", specifier = ">=4.1.0" }, { name = "pytest-subtests", specifier = ">=0.11.0" }, { name = "pytest-xdist", specifier = ">=3.6.1" }, @@ -2454,7 +2455,7 @@ tests-extra = [ { name = "numpy", marker = "python_full_version < '3.12'", specifier = ">=1.24.3" }, { name = "numpy", marker = "python_full_version >= '3.12'", specifier = ">=1.25.2" }, { name = "openapi-spec-validator", specifier = ">=0.8.4" }, - { name = "pytest", specifier = ">=7.4.0,<9" }, + { name = "pytest", specifier = ">=7.4.0" }, { name = "pytest-cov", specifier = ">=4.1.0" }, { name = "pytest-subtests", specifier = ">=0.11.0" }, { name = "pytest-xdist", specifier = ">=3.6.1" }, @@ -4117,7 +4118,7 @@ wheels = [ [[package]] name = "pytest" -version = "8.4.2" +version = "9.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -4128,9 +4129,9 @@ dependencies = [ { name = "pygments" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618, upload-time = "2025-09-04T14:34:22.711Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750, upload-time = "2025-09-04T14:34:20.226Z" }, + { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, ] [[package]] From 78ae3f916c67f87831e906c62557132a6e0e80b7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Aug 2026 13:04:12 -0500 Subject: [PATCH 33/72] build(deps): bump the patch-updates group across 1 directory with 2 updates Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Corey Cox <69321580+amc-corey-cox@users.noreply.github.com> --- packages/linkml/pyproject.toml | 2 +- packages/linkml_runtime/pyproject.toml | 4 +- uv.lock | 214 +++++++++++++------------ 3 files changed, 115 insertions(+), 105 deletions(-) diff --git a/packages/linkml/pyproject.toml b/packages/linkml/pyproject.toml index 5a6d8bdb12..c048c6b5ca 100644 --- a/packages/linkml/pyproject.toml +++ b/packages/linkml/pyproject.toml @@ -59,7 +59,7 @@ dependencies = [ # Specifier syntax: https://peps.python.org/pep-0631/ "pyyaml", "rdflib >=6.0.0", "requests >= 2.22", - "sqlalchemy >= 1.4.31", + "sqlalchemy>=2.0.51", "watchdog >= 0.9.0", "typing-extensions >= 4.6.0; python_version < '3.12'", "sphinx-click (>=6.0.0)", diff --git a/packages/linkml_runtime/pyproject.toml b/packages/linkml_runtime/pyproject.toml index b043910ef2..f9b26095ef 100644 --- a/packages/linkml_runtime/pyproject.toml +++ b/packages/linkml_runtime/pyproject.toml @@ -55,7 +55,7 @@ dependencies = [ [dependency-groups] dev = [ "coverage >=6.2", - "requests-cache >=1.3.2", + "requests-cache>=1.3.3", ] [project.scripts] @@ -64,7 +64,7 @@ linkml-normalize = "linkml_runtime.processing.referencevalidator:cli" [project.optional-dependencies] dev = [ "coverage", - "requests-cache >=1.3.2", + "requests-cache>=1.3.3", ] [tool.codespell] diff --git a/uv.lock b/uv.lock index b2dd538006..f356553de4 100644 --- a/uv.lock +++ b/uv.lock @@ -559,7 +559,7 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, ] sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130, upload-time = "2025-04-15T17:47:53.79Z" } wheels = [ @@ -632,7 +632,7 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "numpy", version = "2.3.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.3.4", source = { registry = "https://pypi.org/simple" } }, ] sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } wheels = [ @@ -1050,7 +1050,7 @@ name = "exceptiongroup" version = "1.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" } wheels = [ @@ -1592,17 +1592,17 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, - { name = "decorator", marker = "python_full_version < '3.11'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, - { name = "jedi", marker = "python_full_version < '3.11'" }, - { name = "matplotlib-inline", marker = "python_full_version < '3.11'" }, - { name = "pexpect", marker = "python_full_version < '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit", marker = "python_full_version < '3.11'" }, - { name = "pygments", marker = "python_full_version < '3.11'" }, - { name = "stack-data", marker = "python_full_version < '3.11'" }, - { name = "traitlets", marker = "python_full_version < '3.11'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "decorator" }, + { name = "exceptiongroup" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/85/31/10ac88f3357fc276dc8a64e8880c82e80e7459326ae1d0a211b40abf6665/ipython-8.37.0.tar.gz", hash = "sha256:ca815841e1a41a1e6b73a0b08f3038af9b2252564d01fc405356d34033012216", size = 5606088, upload-time = "2025-05-31T16:39:09.613Z" } wheels = [ @@ -1620,17 +1620,17 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, - { name = "decorator", marker = "python_full_version >= '3.11'" }, - { name = "ipython-pygments-lexers", marker = "python_full_version >= '3.11'" }, - { name = "jedi", marker = "python_full_version >= '3.11'" }, - { name = "matplotlib-inline", marker = "python_full_version >= '3.11'" }, - { name = "pexpect", marker = "python_full_version >= '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit", marker = "python_full_version >= '3.11'" }, - { name = "pygments", marker = "python_full_version >= '3.11'" }, - { name = "stack-data", marker = "python_full_version >= '3.11'" }, - { name = "traitlets", marker = "python_full_version >= '3.11'" }, - { name = "typing-extensions", marker = "python_full_version == '3.11.*'" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "decorator" }, + { name = "ipython-pygments-lexers" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, + { name = "typing-extensions", marker = "python_full_version < '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/2a/34/29b18c62e39ee2f7a6a3bba7efd952729d8aadd45ca17efc34453b717665/ipython-9.6.0.tar.gz", hash = "sha256:5603d6d5d356378be5043e69441a072b50a5b33b4503428c77b04cb8ce7bc731", size = 4396932, upload-time = "2025-09-29T10:55:53.948Z" } wheels = [ @@ -1651,7 +1651,7 @@ name = "ipython-pygments-lexers" version = "1.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pygments", marker = "python_full_version >= '3.11'" }, + { name = "pygments" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" } wheels = [ @@ -2383,7 +2383,7 @@ requires-dist = [ { name = "rdflib", specifier = ">=6.0.0" }, { name = "requests", specifier = ">=2.22" }, { name = "sphinx-click", specifier = ">=6.0.0" }, - { name = "sqlalchemy", specifier = ">=1.4.31" }, + { name = "sqlalchemy", specifier = ">=2.0.51" }, { name = "typing-extensions", marker = "python_full_version < '3.12'", specifier = ">=4.6.0" }, { name = "watchdog", specifier = ">=0.9.0" }, ] @@ -2517,14 +2517,14 @@ requires-dist = [ { name = "pyyaml" }, { name = "rdflib", specifier = ">=6.0.0" }, { name = "requests" }, - { name = "requests-cache", marker = "extra == 'dev'", specifier = ">=1.3.2" }, + { name = "requests-cache", marker = "extra == 'dev'", specifier = ">=1.3.3" }, ] provides-extras = ["dev"] [package.metadata.requires-dev] dev = [ { name = "coverage", specifier = ">=6.2" }, - { name = "requests-cache", specifier = ">=1.3.2" }, + { name = "requests-cache", specifier = ">=1.3.3" }, ] [[package]] @@ -4522,7 +4522,7 @@ wheels = [ [[package]] name = "requests-cache" -version = "1.3.2" +version = "1.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, @@ -4532,9 +4532,9 @@ dependencies = [ { name = "url-normalize" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c3/ae/90a0f931c7f6b5a674b98c25ecb2593a173bcee14f0d8c148471df3d7b26/requests_cache-1.3.2.tar.gz", hash = "sha256:bdc3680931f98a1dea509d339ea6b45cea526945b47b250ce63ffd2744ee0b14", size = 100167, upload-time = "2026-05-11T04:09:53.233Z" } +sdist = { url = "https://files.pythonhosted.org/packages/32/ab/a340c7f529646f16e5656a8ba1424ed0de406203e4554868491786628730/requests_cache-1.3.3.tar.gz", hash = "sha256:79b72d5ac5143992d1836ad78f4d8e65666061dd44e220548caab3723089826b", size = 101179, upload-time = "2026-07-03T19:48:57.963Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b0/ff/d87d1a7700463afc5440bec80cfbcb56ef929f05fbfdc946ce031b13d040/requests_cache-1.3.2-py3-none-any.whl", hash = "sha256:c52666c76b08daa94d05a99327dd24afc46f405abc044e8c2267b540f90673d0", size = 70633, upload-time = "2026-05-11T04:09:51.554Z" }, + { url = "https://files.pythonhosted.org/packages/a5/bf/c1775e49b350225bd851576ba75263bc728d8f05c0e31439a45f3429cc7b/requests_cache-1.3.3-py3-none-any.whl", hash = "sha256:c8df20ff874ebfc026959e3874e6c12bd6724934cdb10925915908453d4b17e4", size = 70788, upload-time = "2026-07-03T19:48:56.693Z" }, ] [[package]] @@ -4802,23 +4802,23 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "alabaster", marker = "python_full_version < '3.11'" }, - { name = "babel", marker = "python_full_version < '3.11'" }, - { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, - { name = "docutils", marker = "python_full_version < '3.11'" }, - { name = "imagesize", marker = "python_full_version < '3.11'" }, - { name = "jinja2", marker = "python_full_version < '3.11'" }, - { name = "packaging", marker = "python_full_version < '3.11'" }, - { name = "pygments", marker = "python_full_version < '3.11'" }, - { name = "requests", marker = "python_full_version < '3.11'" }, - { name = "snowballstemmer", marker = "python_full_version < '3.11'" }, - { name = "sphinxcontrib-applehelp", marker = "python_full_version < '3.11'" }, - { name = "sphinxcontrib-devhelp", marker = "python_full_version < '3.11'" }, - { name = "sphinxcontrib-htmlhelp", marker = "python_full_version < '3.11'" }, - { name = "sphinxcontrib-jsmath", marker = "python_full_version < '3.11'" }, - { name = "sphinxcontrib-qthelp", marker = "python_full_version < '3.11'" }, - { name = "sphinxcontrib-serializinghtml", marker = "python_full_version < '3.11'" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "alabaster" }, + { name = "babel" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "docutils" }, + { name = "imagesize" }, + { name = "jinja2" }, + { name = "packaging" }, + { name = "pygments" }, + { name = "requests" }, + { name = "snowballstemmer" }, + { name = "sphinxcontrib-applehelp" }, + { name = "sphinxcontrib-devhelp" }, + { name = "sphinxcontrib-htmlhelp" }, + { name = "sphinxcontrib-jsmath" }, + { name = "sphinxcontrib-qthelp" }, + { name = "sphinxcontrib-serializinghtml" }, + { name = "tomli" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611, upload-time = "2024-10-13T20:27:13.93Z" } wheels = [ @@ -4836,23 +4836,23 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "alabaster", marker = "python_full_version >= '3.11'" }, - { name = "babel", marker = "python_full_version >= '3.11'" }, - { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, - { name = "docutils", marker = "python_full_version >= '3.11'" }, - { name = "imagesize", marker = "python_full_version >= '3.11'" }, - { name = "jinja2", marker = "python_full_version >= '3.11'" }, - { name = "packaging", marker = "python_full_version >= '3.11'" }, - { name = "pygments", marker = "python_full_version >= '3.11'" }, - { name = "requests", marker = "python_full_version >= '3.11'" }, - { name = "roman-numerals-py", marker = "python_full_version >= '3.11'" }, - { name = "snowballstemmer", marker = "python_full_version >= '3.11'" }, - { name = "sphinxcontrib-applehelp", marker = "python_full_version >= '3.11'" }, - { name = "sphinxcontrib-devhelp", marker = "python_full_version >= '3.11'" }, - { name = "sphinxcontrib-htmlhelp", marker = "python_full_version >= '3.11'" }, - { name = "sphinxcontrib-jsmath", marker = "python_full_version >= '3.11'" }, - { name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.11'" }, - { name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= '3.11'" }, + { name = "alabaster" }, + { name = "babel" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "docutils" }, + { name = "imagesize" }, + { name = "jinja2" }, + { name = "packaging" }, + { name = "pygments" }, + { name = "requests" }, + { name = "roman-numerals-py" }, + { name = "snowballstemmer" }, + { name = "sphinxcontrib-applehelp" }, + { name = "sphinxcontrib-devhelp" }, + { name = "sphinxcontrib-htmlhelp" }, + { name = "sphinxcontrib-jsmath" }, + { name = "sphinxcontrib-qthelp" }, + { name = "sphinxcontrib-serializinghtml" }, ] sdist = { url = "https://files.pythonhosted.org/packages/38/ad/4360e50ed56cb483667b8e6dadf2d3fda62359593faabbe749a27c4eaca6/sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348", size = 8321876, upload-time = "2025-03-02T22:31:59.658Z" } wheels = [ @@ -5027,47 +5027,57 @@ wheels = [ [[package]] name = "sqlalchemy" -version = "2.0.44" +version = "2.0.51" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "greenlet", marker = "platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64'" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f0/f2/840d7b9496825333f532d2e3976b8eadbf52034178aac53630d09fe6e1ef/sqlalchemy-2.0.44.tar.gz", hash = "sha256:0ae7454e1ab1d780aee69fd2aae7d6b8670a581d8847f2d1e0f7ddfbf47e5a22", size = 9819830, upload-time = "2025-10-10T14:39:12.935Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/a7/e9ccfa7eecaf34c6f57d8cb0bb7cbdeeff27017cc0f5d0ca90fdde7a7c0d/sqlalchemy-2.0.44-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c77f3080674fc529b1bd99489378c7f63fcb4ba7f8322b79732e0258f0ea3ce", size = 2137282, upload-time = "2025-10-10T15:36:10.965Z" }, - { url = "https://files.pythonhosted.org/packages/b1/e1/50bc121885bdf10833a4f65ecbe9fe229a3215f4d65a58da8a181734cae3/sqlalchemy-2.0.44-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4c26ef74ba842d61635b0152763d057c8d48215d5be9bb8b7604116a059e9985", size = 2127322, upload-time = "2025-10-10T15:36:12.428Z" }, - { url = "https://files.pythonhosted.org/packages/46/f2/a8573b7230a3ce5ee4b961a2d510d71b43872513647398e595b744344664/sqlalchemy-2.0.44-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4a172b31785e2f00780eccab00bc240ccdbfdb8345f1e6063175b3ff12ad1b0", size = 3214772, upload-time = "2025-10-10T15:34:15.09Z" }, - { url = "https://files.pythonhosted.org/packages/4a/d8/c63d8adb6a7edaf8dcb6f75a2b1e9f8577960a1e489606859c4d73e7d32b/sqlalchemy-2.0.44-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9480c0740aabd8cb29c329b422fb65358049840b34aba0adf63162371d2a96e", size = 3214434, upload-time = "2025-10-10T15:47:00.473Z" }, - { url = "https://files.pythonhosted.org/packages/ee/a6/243d277a4b54fae74d4797957a7320a5c210c293487f931cbe036debb697/sqlalchemy-2.0.44-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:17835885016b9e4d0135720160db3095dc78c583e7b902b6be799fb21035e749", size = 3155365, upload-time = "2025-10-10T15:34:17.932Z" }, - { url = "https://files.pythonhosted.org/packages/5f/f8/6a39516ddd75429fd4ee5a0d72e4c80639fab329b2467c75f363c2ed9751/sqlalchemy-2.0.44-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cbe4f85f50c656d753890f39468fcd8190c5f08282caf19219f684225bfd5fd2", size = 3178910, upload-time = "2025-10-10T15:47:02.346Z" }, - { url = "https://files.pythonhosted.org/packages/43/f0/118355d4ad3c39d9a2f5ee4c7304a9665b3571482777357fa9920cd7a6b4/sqlalchemy-2.0.44-cp310-cp310-win32.whl", hash = "sha256:2fcc4901a86ed81dc76703f3b93ff881e08761c63263c46991081fd7f034b165", size = 2105624, upload-time = "2025-10-10T15:38:15.552Z" }, - { url = "https://files.pythonhosted.org/packages/61/83/6ae5f9466f8aa5d0dcebfff8c9c33b98b27ce23292df3b990454b3d434fd/sqlalchemy-2.0.44-cp310-cp310-win_amd64.whl", hash = "sha256:9919e77403a483ab81e3423151e8ffc9dd992c20d2603bf17e4a8161111e55f5", size = 2129240, upload-time = "2025-10-10T15:38:17.175Z" }, - { url = "https://files.pythonhosted.org/packages/e3/81/15d7c161c9ddf0900b076b55345872ed04ff1ed6a0666e5e94ab44b0163c/sqlalchemy-2.0.44-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fe3917059c7ab2ee3f35e77757062b1bea10a0b6ca633c58391e3f3c6c488dd", size = 2140517, upload-time = "2025-10-10T15:36:15.64Z" }, - { url = "https://files.pythonhosted.org/packages/d4/d5/4abd13b245c7d91bdf131d4916fd9e96a584dac74215f8b5bc945206a974/sqlalchemy-2.0.44-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:de4387a354ff230bc979b46b2207af841dc8bf29847b6c7dbe60af186d97aefa", size = 2130738, upload-time = "2025-10-10T15:36:16.91Z" }, - { url = "https://files.pythonhosted.org/packages/cb/3c/8418969879c26522019c1025171cefbb2a8586b6789ea13254ac602986c0/sqlalchemy-2.0.44-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3678a0fb72c8a6a29422b2732fe423db3ce119c34421b5f9955873eb9b62c1e", size = 3304145, upload-time = "2025-10-10T15:34:19.569Z" }, - { url = "https://files.pythonhosted.org/packages/94/2d/fdb9246d9d32518bda5d90f4b65030b9bf403a935cfe4c36a474846517cb/sqlalchemy-2.0.44-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cf6872a23601672d61a68f390e44703442639a12ee9dd5a88bbce52a695e46e", size = 3304511, upload-time = "2025-10-10T15:47:05.088Z" }, - { url = "https://files.pythonhosted.org/packages/7d/fb/40f2ad1da97d5c83f6c1269664678293d3fe28e90ad17a1093b735420549/sqlalchemy-2.0.44-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:329aa42d1be9929603f406186630135be1e7a42569540577ba2c69952b7cf399", size = 3235161, upload-time = "2025-10-10T15:34:21.193Z" }, - { url = "https://files.pythonhosted.org/packages/95/cb/7cf4078b46752dca917d18cf31910d4eff6076e5b513c2d66100c4293d83/sqlalchemy-2.0.44-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:70e03833faca7166e6a9927fbee7c27e6ecde436774cd0b24bbcc96353bce06b", size = 3261426, upload-time = "2025-10-10T15:47:07.196Z" }, - { url = "https://files.pythonhosted.org/packages/f8/3b/55c09b285cb2d55bdfa711e778bdffdd0dc3ffa052b0af41f1c5d6e582fa/sqlalchemy-2.0.44-cp311-cp311-win32.whl", hash = "sha256:253e2f29843fb303eca6b2fc645aca91fa7aa0aa70b38b6950da92d44ff267f3", size = 2105392, upload-time = "2025-10-10T15:38:20.051Z" }, - { url = "https://files.pythonhosted.org/packages/c7/23/907193c2f4d680aedbfbdf7bf24c13925e3c7c292e813326c1b84a0b878e/sqlalchemy-2.0.44-cp311-cp311-win_amd64.whl", hash = "sha256:7a8694107eb4308a13b425ca8c0e67112f8134c846b6e1f722698708741215d5", size = 2130293, upload-time = "2025-10-10T15:38:21.601Z" }, - { url = "https://files.pythonhosted.org/packages/62/c4/59c7c9b068e6813c898b771204aad36683c96318ed12d4233e1b18762164/sqlalchemy-2.0.44-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:72fea91746b5890f9e5e0997f16cbf3d53550580d76355ba2d998311b17b2250", size = 2139675, upload-time = "2025-10-10T16:03:31.064Z" }, - { url = "https://files.pythonhosted.org/packages/d6/ae/eeb0920537a6f9c5a3708e4a5fc55af25900216bdb4847ec29cfddf3bf3a/sqlalchemy-2.0.44-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:585c0c852a891450edbb1eaca8648408a3cc125f18cf433941fa6babcc359e29", size = 2127726, upload-time = "2025-10-10T16:03:35.934Z" }, - { url = "https://files.pythonhosted.org/packages/d8/d5/2ebbabe0379418eda8041c06b0b551f213576bfe4c2f09d77c06c07c8cc5/sqlalchemy-2.0.44-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b94843a102efa9ac68a7a30cd46df3ff1ed9c658100d30a725d10d9c60a2f44", size = 3327603, upload-time = "2025-10-10T15:35:28.322Z" }, - { url = "https://files.pythonhosted.org/packages/45/e5/5aa65852dadc24b7d8ae75b7efb8d19303ed6ac93482e60c44a585930ea5/sqlalchemy-2.0.44-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:119dc41e7a7defcefc57189cfa0e61b1bf9c228211aba432b53fb71ef367fda1", size = 3337842, upload-time = "2025-10-10T15:43:45.431Z" }, - { url = "https://files.pythonhosted.org/packages/41/92/648f1afd3f20b71e880ca797a960f638d39d243e233a7082c93093c22378/sqlalchemy-2.0.44-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0765e318ee9179b3718c4fd7ba35c434f4dd20332fbc6857a5e8df17719c24d7", size = 3264558, upload-time = "2025-10-10T15:35:29.93Z" }, - { url = "https://files.pythonhosted.org/packages/40/cf/e27d7ee61a10f74b17740918e23cbc5bc62011b48282170dc4c66da8ec0f/sqlalchemy-2.0.44-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2e7b5b079055e02d06a4308d0481658e4f06bc7ef211567edc8f7d5dce52018d", size = 3301570, upload-time = "2025-10-10T15:43:48.407Z" }, - { url = "https://files.pythonhosted.org/packages/3b/3d/3116a9a7b63e780fb402799b6da227435be878b6846b192f076d2f838654/sqlalchemy-2.0.44-cp312-cp312-win32.whl", hash = "sha256:846541e58b9a81cce7dee8329f352c318de25aa2f2bbe1e31587eb1f057448b4", size = 2103447, upload-time = "2025-10-10T15:03:21.678Z" }, - { url = "https://files.pythonhosted.org/packages/25/83/24690e9dfc241e6ab062df82cc0df7f4231c79ba98b273fa496fb3dd78ed/sqlalchemy-2.0.44-cp312-cp312-win_amd64.whl", hash = "sha256:7cbcb47fd66ab294703e1644f78971f6f2f1126424d2b300678f419aa73c7b6e", size = 2130912, upload-time = "2025-10-10T15:03:24.656Z" }, - { url = "https://files.pythonhosted.org/packages/45/d3/c67077a2249fdb455246e6853166360054c331db4613cda3e31ab1cadbef/sqlalchemy-2.0.44-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ff486e183d151e51b1d694c7aa1695747599bb00b9f5f604092b54b74c64a8e1", size = 2135479, upload-time = "2025-10-10T16:03:37.671Z" }, - { url = "https://files.pythonhosted.org/packages/2b/91/eabd0688330d6fd114f5f12c4f89b0d02929f525e6bf7ff80aa17ca802af/sqlalchemy-2.0.44-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0b1af8392eb27b372ddb783b317dea0f650241cea5bd29199b22235299ca2e45", size = 2123212, upload-time = "2025-10-10T16:03:41.755Z" }, - { url = "https://files.pythonhosted.org/packages/b0/bb/43e246cfe0e81c018076a16036d9b548c4cc649de241fa27d8d9ca6f85ab/sqlalchemy-2.0.44-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b61188657e3a2b9ac4e8f04d6cf8e51046e28175f79464c67f2fd35bceb0976", size = 3255353, upload-time = "2025-10-10T15:35:31.221Z" }, - { url = "https://files.pythonhosted.org/packages/b9/96/c6105ed9a880abe346b64d3b6ddef269ddfcab04f7f3d90a0bf3c5a88e82/sqlalchemy-2.0.44-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b87e7b91a5d5973dda5f00cd61ef72ad75a1db73a386b62877d4875a8840959c", size = 3260222, upload-time = "2025-10-10T15:43:50.124Z" }, - { url = "https://files.pythonhosted.org/packages/44/16/1857e35a47155b5ad927272fee81ae49d398959cb749edca6eaa399b582f/sqlalchemy-2.0.44-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:15f3326f7f0b2bfe406ee562e17f43f36e16167af99c4c0df61db668de20002d", size = 3189614, upload-time = "2025-10-10T15:35:32.578Z" }, - { url = "https://files.pythonhosted.org/packages/88/ee/4afb39a8ee4fc786e2d716c20ab87b5b1fb33d4ac4129a1aaa574ae8a585/sqlalchemy-2.0.44-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1e77faf6ff919aa8cd63f1c4e561cac1d9a454a191bb864d5dd5e545935e5a40", size = 3226248, upload-time = "2025-10-10T15:43:51.862Z" }, - { url = "https://files.pythonhosted.org/packages/32/d5/0e66097fc64fa266f29a7963296b40a80d6a997b7ac13806183700676f86/sqlalchemy-2.0.44-cp313-cp313-win32.whl", hash = "sha256:ee51625c2d51f8baadf2829fae817ad0b66b140573939dd69284d2ba3553ae73", size = 2101275, upload-time = "2025-10-10T15:03:26.096Z" }, - { url = "https://files.pythonhosted.org/packages/03/51/665617fe4f8c6450f42a6d8d69243f9420f5677395572c2fe9d21b493b7b/sqlalchemy-2.0.44-cp313-cp313-win_amd64.whl", hash = "sha256:c1c80faaee1a6c3428cecf40d16a2365bcf56c424c92c2b6f0f9ad204b899e9e", size = 2127901, upload-time = "2025-10-10T15:03:27.548Z" }, - { url = "https://files.pythonhosted.org/packages/9c/5e/6a29fa884d9fb7ddadf6b69490a9d45fded3b38541713010dad16b77d015/sqlalchemy-2.0.44-py3-none-any.whl", hash = "sha256:19de7ca1246fbef9f9d1bff8f1ab25641569df226364a0e40457dc5457c54b05", size = 1928718, upload-time = "2025-10-10T15:29:45.32Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/02/f1/a7a892f18d4d224e6b26f706531eafccc41e37594d37d304786969ee13cb/sqlalchemy-2.0.51.tar.gz", hash = "sha256:804dccd8a4a6242c4e30ad961e540e18a588f6527202f2d6791b01845d59fdc9", size = 9912201, upload-time = "2026-06-15T15:41:20.012Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/76/b3ea1d8842e7b62c718a88d302809003d65ed82011460ca48907dde658c4/sqlalchemy-2.0.51-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e8203d2fbd5c6254692ef0a72c740d75b2f3c7ca345404f4c1a4604813c77c0", size = 2162087, upload-time = "2026-06-15T16:05:15.795Z" }, + { url = "https://files.pythonhosted.org/packages/6c/22/f19552eb7876774d50cfd025337ef5d67acc10cd8f29adab7716cf47c352/sqlalchemy-2.0.51-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1af05726b3d0cdba1c55284bf408fd3b792e690fe2399bfb8304565551cda652", size = 3244579, upload-time = "2026-06-15T16:10:36.165Z" }, + { url = "https://files.pythonhosted.org/packages/fc/97/e4a2eb5a8ec5cd3c2a0615a2f15f0afca89ac039229599b9ed0c0ed28e5e/sqlalchemy-2.0.51-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e54ff2dd657f2e3e0fbf2b097db1182f7bfea263eca4353f00065bae2a67c3d", size = 3243515, upload-time = "2026-06-15T16:12:22.627Z" }, + { url = "https://files.pythonhosted.org/packages/74/c6/5900ec624fab3360aa2ec59b99bb2046dd79799e310bb78a0514eaa4038e/sqlalchemy-2.0.51-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1e47b1199c2e832e325eacabc8d32d2487f58c9358f97e9a00f5eb93c5680d84", size = 3195492, upload-time = "2026-06-15T16:10:38.097Z" }, + { url = "https://files.pythonhosted.org/packages/8f/41/2ee3c4e1ac4fd22309349823fe13f33febeab1a71db1d7e9d60293a07dcb/sqlalchemy-2.0.51-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c68568f3facf8f66fa76c60e0ced69b67666ffa9941d1d0a3756fda196049080", size = 3215782, upload-time = "2026-06-15T16:12:24.051Z" }, + { url = "https://files.pythonhosted.org/packages/ce/1c/3bd72c341f1cb5faed5a7457ea840228a46be51cfbaf31a9db72fc963f11/sqlalchemy-2.0.51-cp310-cp310-win32.whl", hash = "sha256:0592bdadf86ddcabfd72d9ab66ea8a5d8d2cc6be1cc51fa7e66c03868ac5eac1", size = 2122119, upload-time = "2026-06-15T16:13:26.915Z" }, + { url = "https://files.pythonhosted.org/packages/2a/63/b6dfdd646abf91c3bedb13727226a5e765e5f8365e898d43818e6672fa46/sqlalchemy-2.0.51-cp310-cp310-win_amd64.whl", hash = "sha256:740cf6f35351b1ac3d82369152acf1d51d37e3dcf85d4dc0a22ca01410eabe2a", size = 2145158, upload-time = "2026-06-15T16:13:28.386Z" }, + { url = "https://files.pythonhosted.org/packages/3a/69/a67c69e5f28fc9c99d6f7bd60bd50e91f2fed2423e3b30fb228fa00e51f3/sqlalchemy-2.0.51-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1aa10c0daee6705294d181daadaa793221e1a59ed55000a3fab1d42b088ce4ba", size = 2161838, upload-time = "2026-06-15T16:05:17.144Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a4/c8c22b8438bddc0a030157c6ec0f6ef97b3c38effa444bdab2a27af04090/sqlalchemy-2.0.51-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5b2ed6d828f1f09bd812861f4f59ca3bc3803f9df871f4555187f0faf018604", size = 3319402, upload-time = "2026-06-15T16:10:40.002Z" }, + { url = "https://files.pythonhosted.org/packages/90/54/44012d32fd77d991256d2ff793ba3807c51d40cb27a85b4796224f6744df/sqlalchemy-2.0.51-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:436728ce18a80f6951a1e11cc6112c2ede9faf20766f1a26195a7c441ca12dbd", size = 3319675, upload-time = "2026-06-15T16:12:25.658Z" }, + { url = "https://files.pythonhosted.org/packages/29/a5/de0592acaf5906cd7430874392d6f7e8b4a7c8437610953ee2d1501c0b44/sqlalchemy-2.0.51-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dc261707bf5739aea8a541593f3cc1d463c2701fb05fbcbba0ce031b69a21260", size = 3270777, upload-time = "2026-06-15T16:10:42.125Z" }, + { url = "https://files.pythonhosted.org/packages/cb/14/a44c90739c780b362238e4ac3cb19dd0ca40d13e6ddc5daa112166ddab4f/sqlalchemy-2.0.51-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a6d26094615306d116dd5e4a51b0304c99dd2356fc569eed6922a80a6bd3b265", size = 3293940, upload-time = "2026-06-15T16:12:27.156Z" }, + { url = "https://files.pythonhosted.org/packages/65/eb/fbd0f206a330e66f8c602a99c37c4e731f107faed62954b41b01f16dd9d9/sqlalchemy-2.0.51-cp311-cp311-win32.whl", hash = "sha256:ca8435d13829b92f4a97362d91975154a4015db3a2634154e1754e9a915e6b86", size = 2121183, upload-time = "2026-06-15T16:13:29.905Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fd/005bf80f3cf6e5c62b5dd68616280f51cd012c60840fa74781b3ed7b1623/sqlalchemy-2.0.51-cp311-cp311-win_amd64.whl", hash = "sha256:4a011ea4510683319ce4ed274b56ee05194b39b6da9d09ca7a39388f0fa84dcc", size = 2145796, upload-time = "2026-06-15T16:13:31.283Z" }, + { url = "https://files.pythonhosted.org/packages/d5/70/e868bc5412acd101a8280f25c95f10eeae0771c4eb806b02491142810ee8/sqlalchemy-2.0.51-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d78702b26ba1c18b2d0fb2ea940ba7f17a9581b42e8361ff93920ebbee1235a", size = 2160291, upload-time = "2026-06-15T16:08:48.918Z" }, + { url = "https://files.pythonhosted.org/packages/e5/1c/71ee0f8a6b9d7316a1ccd30430b4c62b6c2e36adc96017a4e3a72dce49d6/sqlalchemy-2.0.51-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581921d849d6e6f994d560389192955e80e2950e18fcdfe2ccea863e01158e6e", size = 3343835, upload-time = "2026-06-15T16:19:42.613Z" }, + { url = "https://files.pythonhosted.org/packages/2b/7c/7ab9f9aadc5944fdd06612484ed7918fe376ad871a5f50404dc1536e0194/sqlalchemy-2.0.51-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1d21ce524ab86c23046e992a5b81cb54c21079c6df6e78b8fc77d77cac70a6b9", size = 3358470, upload-time = "2026-06-15T16:26:38.011Z" }, + { url = "https://files.pythonhosted.org/packages/d0/7d/ff77169fee6186de145a7f2b87006c39638391130abbab2b1f63ac6ea583/sqlalchemy-2.0.51-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c5d98a2709840027f5a347c3af0a7c3d5f6c1ff93af2ca1c54494e23cba8f389", size = 3289874, upload-time = "2026-06-15T16:19:45.212Z" }, + { url = "https://files.pythonhosted.org/packages/6f/3b/6c505903710d781b55bc3141ee34a062bf9745a6b5bc7333305b9ed63b33/sqlalchemy-2.0.51-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1181256e0f16479691b5616d36375dc2620ad8332b25978763c3d206ad3f3f1d", size = 3321692, upload-time = "2026-06-15T16:26:39.747Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b7/c5ffe50aa2f4d947c9250e1519d939260329a07fe6272edfccd784b3d007/sqlalchemy-2.0.51-cp312-cp312-win32.whl", hash = "sha256:9f380393be5abeb6815f68fd39271b95127173511b6706b0a630a9995d53f8f5", size = 2119674, upload-time = "2026-06-15T16:23:09.543Z" }, + { url = "https://files.pythonhosted.org/packages/25/dc/46a65916af68a06ef6b972c6050ba4c8f97070fe3fb33097d34229d9bef6/sqlalchemy-2.0.51-cp312-cp312-win_amd64.whl", hash = "sha256:2cf39aabdf48e87c1c2c2ed6d20d33ffa0733b3071ce9c5f66357947dd009080", size = 2146670, upload-time = "2026-06-15T16:23:11.048Z" }, + { url = "https://files.pythonhosted.org/packages/54/fe/a210d52fd1a90ecfae8a78e9d8b27e18d733d60818a8bf250ff690b75120/sqlalchemy-2.0.51-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7c2056838b6685b72fdb36c99996cf862753461a62f2e84f4196371d3b2d6a07", size = 2157184, upload-time = "2026-06-15T16:08:50.374Z" }, + { url = "https://files.pythonhosted.org/packages/17/6b/2dce8369b199cb855110e056032f94a9f66dacc2237d3d39c115a86eac56/sqlalchemy-2.0.51-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:483b11bd46bf35fc14c52faf338b04300c9e6ce554bce9b11be85bfec3bc3195", size = 3284735, upload-time = "2026-06-15T16:19:46.934Z" }, + { url = "https://files.pythonhosted.org/packages/53/ff/dbc495b8a14da840faffb353857a72d4190113cac33727906fb997047f0f/sqlalchemy-2.0.51-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1bed1ee8b01da6088210aa9412023326fb98a599ba502e6118308601dcbef77f", size = 3302756, upload-time = "2026-06-15T16:26:41.336Z" }, + { url = "https://files.pythonhosted.org/packages/cf/d5/fde8f4dddcf518ee15ab35a7c6a28acc32c8ba548d1d2aa451f96e6dbb0b/sqlalchemy-2.0.51-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:72ca54c952107ba5cd58854b67a5a6268631289d21651a1235396f3b98b47400", size = 3232055, upload-time = "2026-06-15T16:19:49.286Z" }, + { url = "https://files.pythonhosted.org/packages/67/d1/43d3a0ac955a58601c24fa23038b1c55ee3a1ec02c0f96ebb1eae2bcf614/sqlalchemy-2.0.51-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b3e693d15533a45cd5906f0589f9c35090bef6ef45bf1e8195c424aa0ae06a8d", size = 3269850, upload-time = "2026-06-15T16:26:43.017Z" }, + { url = "https://files.pythonhosted.org/packages/94/df/de669c7054cd47c4439ac34b1b2ee8b804a794791fbb10720e997a2c87c7/sqlalchemy-2.0.51-cp313-cp313-win32.whl", hash = "sha256:b93ab07b5292dbe7e6b8da89475275e7042744283921344b56105f3eeb0f828b", size = 2117721, upload-time = "2026-06-15T16:23:12.36Z" }, + { url = "https://files.pythonhosted.org/packages/d0/8a/403c51d064196bae20a0bc2476577f83a3f8dd299719a97417086b7f2ec5/sqlalchemy-2.0.51-cp313-cp313-win_amd64.whl", hash = "sha256:0f053118c30e53161857a953e4de667d90e274980dccbe5dd3829bbbeece72a5", size = 2143615, upload-time = "2026-06-15T16:23:13.906Z" }, + { url = "https://files.pythonhosted.org/packages/b1/49/a739be2e1d02a96a658eb71ab45d921c874249252358ad24a5bffdd02525/sqlalchemy-2.0.51-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6ea306caaae6bd5afd0a46050003c88f6bf33227377a49298c498c3cb88ff491", size = 2158999, upload-time = "2026-06-15T16:08:51.759Z" }, + { url = "https://files.pythonhosted.org/packages/23/6b/2e0e38cf75c8780eca78d9b2e78164f8bcfd70125e5caa588ff5cbb9c9f4/sqlalchemy-2.0.51-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c45a496d6bc05dec41dcd4c3a2b183723f47473255c159cd80b503c8f246424d", size = 3282539, upload-time = "2026-06-15T16:19:51.065Z" }, + { url = "https://files.pythonhosted.org/packages/dd/a1/e77854cb5336fd37dc3c6ae3b71de242c98caac5725120be0b526b31cbd0/sqlalchemy-2.0.51-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4004ada0aafe8ae1991b2cd1d99c6d9146126e123bd6f883c260d974aa012e54", size = 3287545, upload-time = "2026-06-15T16:26:44.735Z" }, + { url = "https://files.pythonhosted.org/packages/f6/ab/9e17272fd4dac8df3b83c4fbe52b998a1c9d89a843c8c35ff29b74ff7364/sqlalchemy-2.0.51-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0f6bcad487aee1c638d707235682fc96f741de00663619881ab235400d03289e", size = 3230929, upload-time = "2026-06-15T16:19:52.625Z" }, + { url = "https://files.pythonhosted.org/packages/02/3c/52f408ea701781caee975606beccc48845f2aee8711ac29843d612c0306c/sqlalchemy-2.0.51-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:39a76529db6305693d8d4affa58ad5b5e2e18edd62daea628b29b97930b3513d", size = 3252888, upload-time = "2026-06-15T16:26:46.454Z" }, + { url = "https://files.pythonhosted.org/packages/24/16/3efd2ee6bc4ca4693a30a1dd17a91b606cae15d517d2a4746611d9b73ce8/sqlalchemy-2.0.51-cp314-cp314-win32.whl", hash = "sha256:08a204d8b5638717c26a24df18fcf40af45a6b22e35b70b1d62f0113c2e278e8", size = 2120551, upload-time = "2026-06-15T16:23:15.629Z" }, + { url = "https://files.pythonhosted.org/packages/7b/78/55b12e70f45bccc40d9e483925c065027b3b98ea4cbbdf6f8c2546feaf6c/sqlalchemy-2.0.51-cp314-cp314-win_amd64.whl", hash = "sha256:96747bfbadb055466e5b46d572618170046b45ce5a4879167f50d70a5319a499", size = 2146318, upload-time = "2026-06-15T16:23:17.108Z" }, + { url = "https://files.pythonhosted.org/packages/21/db/a9574ed40fed418924b1b1a3e54f47ee3963053b3d3d325a0d36b41f2c08/sqlalchemy-2.0.51-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e5ea1a213be1fcd5e49d9904c3b9939211ded90bc2a64e93f4c01963474285de", size = 2178920, upload-time = "2026-06-15T15:59:56.285Z" }, + { url = "https://files.pythonhosted.org/packages/bf/90/a1bb5c7cbba76b7bc1fbd586d0a5479a7bc9c27b4a8298f22ec9423b2bb3/sqlalchemy-2.0.51-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7c6b36ed71f41942bdcd2ad2522be46bfce09d5705be5640ecf19bbc7660e4b7", size = 3566534, upload-time = "2026-06-15T15:58:35.024Z" }, + { url = "https://files.pythonhosted.org/packages/15/4b/481f1fed30e0e9e8dd24aecbb49f29eb57fe7657ece5cf06ee9b84bb97d8/sqlalchemy-2.0.51-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0c2c62877097e1a0db401fba5cb4debee33265e5b2a55c4ccb489c02c53b4f72", size = 3535844, upload-time = "2026-06-15T16:02:43.973Z" }, + { url = "https://files.pythonhosted.org/packages/02/71/0aa64aeda645510af0a43f7d9ee70932f0d1dc4263aed34c50ee891d9df3/sqlalchemy-2.0.51-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0378d055e9e8cd6ce4d8dff683bdd3d7d413533c4ee51d67a2b1e0f9eacc0f23", size = 3475355, upload-time = "2026-06-15T15:58:36.592Z" }, + { url = "https://files.pythonhosted.org/packages/05/db/6061db32316446135a3abae5f308d144ab988a34234726042da3e58b1c63/sqlalchemy-2.0.51-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6e46fc36029eff666391e0531e5387b62ce6c4f1d8e50b3fb3099eaca1b42522", size = 3486591, upload-time = "2026-06-15T16:02:45.346Z" }, + { url = "https://files.pythonhosted.org/packages/0d/c9/f14fdf71bb8957e0c7e39db69bbdf12b5c80f4ef775fdfa127bf4e0d6760/sqlalchemy-2.0.51-cp314-cp314t-win32.whl", hash = "sha256:9161cfc9efce70d1715f47d6ff40f79c6778c00d53be4fbc09d70301e4b83ba7", size = 2151313, upload-time = "2026-06-15T16:03:39.127Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c6/673e618e6f4f297e126d9b56ea2f6478708f6c1af4e3223835c22e2c3697/sqlalchemy-2.0.51-cp314-cp314t-win_amd64.whl", hash = "sha256:159bb6ba32059f57ad7375a8f50d844dd2f19d14954ecf820cd33e20debd46b2", size = 2186280, upload-time = "2026-06-15T16:03:40.569Z" }, + { url = "https://files.pythonhosted.org/packages/e2/22/dbf013a12ec759e54a34a119e9e217435b3f71b2dd5c61a7ade0a25dae87/sqlalchemy-2.0.51-py3-none-any.whl", hash = "sha256:bb024d8b621d0be75f4f44ecc7c950450026e76d66dc8f791bb5331d7fed59d5", size = 1944334, upload-time = "2026-06-15T16:09:22.418Z" }, ] [[package]] From c8441d6f03213e40de28f301260e7f6dffa6c9eb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Aug 2026 14:09:06 -0500 Subject: [PATCH 34/72] build(deps-dev): bump ipykernel from 7.1.0 to 7.3.0 (#3740) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Corey Cox <69321580+amc-corey-cox@users.noreply.github.com> --- uv.lock | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/uv.lock b/uv.lock index f356553de4..cc377a2e4c 100644 --- a/uv.lock +++ b/uv.lock @@ -1561,7 +1561,7 @@ wheels = [ [[package]] name = "ipykernel" -version = "7.1.0" +version = "7.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "appnope", marker = "sys_platform == 'darwin'" }, @@ -1572,16 +1572,16 @@ dependencies = [ { name = "jupyter-client" }, { name = "jupyter-core" }, { name = "matplotlib-inline" }, - { name = "nest-asyncio" }, + { name = "nest-asyncio2" }, { name = "packaging" }, { name = "psutil" }, { name = "pyzmq" }, { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b9/a4/4948be6eb88628505b83a1f2f40d90254cab66abf2043b3c40fa07dfce0f/ipykernel-7.1.0.tar.gz", hash = "sha256:58a3fc88533d5930c3546dc7eac66c6d288acde4f801e2001e65edc5dc9cf0db", size = 174579, upload-time = "2025-10-27T09:46:39.471Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3d/c4/e4a38f579de4225a561305666f7541cdabb30075def2aa1ac17bd73c1fb5/ipykernel-7.3.0.tar.gz", hash = "sha256:9acaaaf97d16355166e4085afe9d225bfbdf2b7ef520f9df3be8f2b248275e09", size = 184899, upload-time = "2026-06-10T08:41:25.481Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/17/20c2552266728ceba271967b87919664ecc0e33efca29c3efc6baf88c5f9/ipykernel-7.1.0-py3-none-any.whl", hash = "sha256:763b5ec6c5b7776f6a8d7ce09b267693b4e5ce75cb50ae696aaefb3c85e1ea4c", size = 117968, upload-time = "2025-10-27T09:46:37.805Z" }, + { url = "https://files.pythonhosted.org/packages/3d/02/77b271f5dc58bfbc0b577c877b2365d1ffea2afe66a80c13f2312820348c/ipykernel-7.3.0-py3-none-any.whl", hash = "sha256:897eb64da762549ef610698fca5e9675195ec6ac8ec7f19d81ce1ca20c876057", size = 120583, upload-time = "2026-06-10T08:41:23.648Z" }, ] [[package]] @@ -1899,7 +1899,7 @@ wheels = [ [[package]] name = "jupyter-client" -version = "8.6.3" +version = "8.9.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-core" }, @@ -1907,10 +1907,11 @@ dependencies = [ { name = "pyzmq" }, { name = "tornado" }, { name = "traitlets" }, + { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019, upload-time = "2024-09-17T10:44:17.613Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/dc/5512503b088997c2250b8bf18258fba9d9ce5ead641183700960d3c9d342/jupyter_client-8.9.1.tar.gz", hash = "sha256:a58f730dd9e728ba16ba1d62ebccf7ffe1ebbdbce4e95cfae941b7321ae1f4fa", size = 359256, upload-time = "2026-06-09T13:15:01.033Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105, upload-time = "2024-09-17T10:44:15.218Z" }, + { url = "https://files.pythonhosted.org/packages/3f/6f/56d39bf385c5c27988aebaf0c18a2a17e960575740100973511018bd904e/jupyter_client-8.9.1-py3-none-any.whl", hash = "sha256:0b7a295bc46e8751e9adae84781f726c851c1d911bd793edc4a3bde942e3da81", size = 109828, upload-time = "2026-06-09T13:14:58.835Z" }, ] [[package]] @@ -3021,12 +3022,12 @@ wheels = [ ] [[package]] -name = "nest-asyncio" -version = "1.6.0" +name = "nest-asyncio2" +version = "1.7.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload-time = "2024-01-21T14:25:19.227Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b4/73/731debf26e27e0a0323d7bda270dc2f634b398e38f040a09da1f4351d0aa/nest_asyncio2-1.7.2.tar.gz", hash = "sha256:1921d70b92cc4612c374928d081552efb59b83d91b2b789d935c665fa01729a8", size = 14743, upload-time = "2026-02-13T00:34:04.386Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" }, + { url = "https://files.pythonhosted.org/packages/c5/3c/3179b85b0e1c3659f0369940200cd6d0fa900e6cefcc7ea0bc6dd0e29ffb/nest_asyncio2-1.7.2-py3-none-any.whl", hash = "sha256:f5dfa702f3f81f6a03857e9a19e2ba578c0946a4ad417b4c50a24d7ba641fe01", size = 7843, upload-time = "2026-02-13T00:34:02.691Z" }, ] [[package]] From c52ab09976c37e2d9a56c333c7349b1d2e2f7bd8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Aug 2026 19:43:45 +0000 Subject: [PATCH 35/72] build(deps-dev): bump tox-uv from 1.29.0 to 1.36.0 (#3741) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Corey Cox <69321580+amc-corey-cox@users.noreply.github.com> --- uv.lock | 142 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 112 insertions(+), 30 deletions(-) diff --git a/uv.lock b/uv.lock index cc377a2e4c..156731a27f 100644 --- a/uv.lock +++ b/uv.lock @@ -216,7 +216,7 @@ dependencies = [ { name = "pathspec" }, { name = "platformdirs" }, { name = "pytokens" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "tomli", version = "2.4.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c0/37/5628dd55bf2b34257fc7603f0fe97c40e3aaf24265f416a9c85c95ca1436/black-26.5.1.tar.gz", hash = "sha256:dd321f668053961824bcc1be1cc1df748b2d7e4fa28086b08331e577b0100a73", size = 679439, upload-time = "2026-05-18T16:53:36.107Z" } @@ -268,11 +268,11 @@ css = [ [[package]] name = "cachetools" -version = "6.2.1" +version = "7.1.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cc/7e/b975b5814bd36faf009faebe22c1072a1fa1168db34d285ef0ba071ad78c/cachetools-6.2.1.tar.gz", hash = "sha256:3f391e4bd8f8bf0931169baf7456cc822705f4e2a31f840d218f445b9a854201", size = 31325, upload-time = "2025-10-12T14:55:30.139Z" } +sdist = { url = "https://files.pythonhosted.org/packages/55/af/861ebc2e318a5c3300e3eb63bc4d30f3d70a46d13b360093728ac0705eed/cachetools-7.1.6.tar.gz", hash = "sha256:c7a79e7f30ba9943c1cefd08cc36f006aaae086e017af9166f1d59d6170c47e1", size = 40572, upload-time = "2026-07-23T22:47:53.737Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/96/c5/1e741d26306c42e2bf6ab740b2202872727e0f606033c9dd713f8b93f5a8/cachetools-6.2.1-py3-none-any.whl", hash = "sha256:09868944b6dde876dfd44e1d47e18484541eaf12f26f29b7af91b26cc892d701", size = 11280, upload-time = "2025-10-12T14:55:28.382Z" }, + { url = "https://files.pythonhosted.org/packages/9f/f2/2086ba18a925a73586c4d4e61d25f4a6058e56fd00d77ce8f1d361ab4c9b/cachetools-7.1.6-py3-none-any.whl", hash = "sha256:2c12e255780330af28b91bb7fb96cce4c766f04e38396b9a24510190a5827096", size = 16954, upload-time = "2026-07-23T22:47:52.397Z" }, ] [[package]] @@ -810,7 +810,8 @@ wheels = [ [package.optional-dependencies] toml = [ - { name = "tomli", marker = "python_full_version <= '3.11'" }, + { name = "tomli", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.11'" }, + { name = "tomli", version = "2.4.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] [[package]] @@ -1870,7 +1871,7 @@ version = "1.0.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-core" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "tomli", version = "2.4.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "traitlets" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fb/45/d0df8b43c10a61529c0f4a8af5e19ebe108f0c3af8f57e0fc358969907af/jupyter_builder-1.0.2.tar.gz", hash = "sha256:6155d78a5325010532a6419ffcba89eac643fd1aa56ea83115e661924d6f6aab", size = 968638, upload-time = "2026-06-12T02:33:25.767Z" } @@ -2037,7 +2038,7 @@ dependencies = [ { name = "jupyterlab-server" }, { name = "notebook-shim" }, { name = "packaging" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "tomli", version = "2.4.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "tornado" }, { name = "traitlets" }, { name = "typing-extensions", marker = "python_full_version < '3.12'" }, @@ -2717,7 +2718,7 @@ name = "maturin" version = "1.14.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "tomli", version = "2.4.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e7/b3/addd877f871fb1860d46d3a4f206ecb10b946c85846805e6367631926fd3/maturin-1.14.1.tar.gz", hash = "sha256:9d6577a62cd08e0ceba7a0db06fb098e0c9b1b3429bad747a4f3a18215a1b3df", size = 369637, upload-time = "2026-06-19T05:19:49.774Z" } wheels = [ @@ -3295,11 +3296,11 @@ wheels = [ [[package]] name = "packaging" -version = "25.0" +version = "26.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, + { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, ] [[package]] @@ -3530,11 +3531,11 @@ wheels = [ [[package]] name = "platformdirs" -version = "4.5.0" +version = "4.11.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/61/33/9611380c2bdb1225fdef633e2a9610622310fed35ab11dac9620972ee088/platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312", size = 21632, upload-time = "2025-10-08T17:44:48.791Z" } +sdist = { url = "https://files.pythonhosted.org/packages/78/9b/560e4be8e26f6fd133a03630a8df0c663b9e8d61b4ade152b72005aec83b/platformdirs-4.11.0.tar.gz", hash = "sha256:0555d18370482847566ffabcaa53ad7c6c1c29f195989ae1ed634a05f76ea1e0", size = 31953, upload-time = "2026-07-21T13:09:36.565Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/73/cb/ac7874b3e5d58441674fb70742e6c374b28b0c7cb988d37d991cde47166c/platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3", size = 18651, upload-time = "2025-10-08T17:44:47.223Z" }, + { url = "https://files.pythonhosted.org/packages/7d/68/d8d58938dfb1370b266a1a729e6d77a985be23689a0496498ee17b2cbf90/platformdirs-4.11.0-py3-none-any.whl", hash = "sha256:360ccded2b7fce0af0ff80cc8f5942a1c5d99b0e856033acb030bfc634709e74", size = 23247, upload-time = "2026-07-21T13:09:35.422Z" }, ] [[package]] @@ -4057,7 +4058,7 @@ version = "1.10.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "tomli", version = "2.4.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/45/7b/c0e1333b61d41c69e59e5366e727b18c4992688caf0de1be10b3e5265f6b/pyproject_api-1.10.0.tar.gz", hash = "sha256:40c6f2d82eebdc4afee61c773ed208c04c19db4c4a60d97f8d7be3ebc0bbb330", size = 22785, upload-time = "2025-10-09T19:12:27.21Z" } wheels = [ @@ -4128,7 +4129,7 @@ dependencies = [ { name = "packaging" }, { name = "pluggy" }, { name = "pygments" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "tomli", version = "2.4.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } wheels = [ @@ -4198,15 +4199,15 @@ wheels = [ [[package]] name = "python-discovery" -version = "1.4.2" +version = "1.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "filelock" }, { name = "platformdirs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0b/1a/cbbaf13b730abb0a16b964d984e19f2fe520c21a4dc664051359a3f5a9e7/python_discovery-1.4.2.tar.gz", hash = "sha256:8f3746c4b4968d22afbb97d36e1a0e5b66e6c0f297290f2e95f05b9b8bf18690", size = 70277, upload-time = "2026-06-11T16:10:42.383Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/51/276f964496a5714ab9f320896195639086881c2b39c03b5ad13de84acbb8/python_discovery-1.5.0.tar.gz", hash = "sha256:3e014c6327154d3dda27939a9a0dc9c5c000439f1906d3f303b48f984bd2ecef", size = 72483, upload-time = "2026-07-21T13:14:14.641Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1a/82/a70006589557f267f15bd384c0642ad49f0d97b690c3a05b166b9dcbad3b/python_discovery-1.4.2-py3-none-any.whl", hash = "sha256:475803f53b7b2ed6e490e27373f9d8340f7d2eebf9acdaf645d7d714c97bb500", size = 33886, upload-time = "2026-06-11T16:10:41.192Z" }, + { url = "https://files.pythonhosted.org/packages/c7/7b/14882602ddee241d7984a742fcb423cb4a30fb0d6efc546ac3129fba475a/python_discovery-1.5.0-py3-none-any.whl", hash = "sha256:70c4fc61b4e7404e44f01d6fc44a715c4d685ca6cea83d295922f05891877c98", size = 34205, upload-time = "2026-07-21T13:14:13.398Z" }, ] [[package]] @@ -4819,7 +4820,7 @@ dependencies = [ { name = "sphinxcontrib-jsmath" }, { name = "sphinxcontrib-qthelp" }, { name = "sphinxcontrib-serializinghtml" }, - { name = "tomli" }, + { name = "tomli", version = "2.4.1", source = { registry = "https://pypi.org/simple" } }, ] sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611, upload-time = "2024-10-13T20:27:13.93Z" } wheels = [ @@ -5163,6 +5164,9 @@ wheels = [ name = "tomli" version = "2.3.0" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version == '3.11.*'", +] sdist = { url = "https://files.pythonhosted.org/packages/52/ed/3f73f72945444548f33eba9a87fc7a6e969915e7b1acc8260b30e1f76a2f/tomli-2.3.0.tar.gz", hash = "sha256:64be704a875d2a59753d80ee8a533c3fe183e3f06807ff7dc2232938ccb01549", size = 17392, upload-time = "2025-10-08T22:01:47.119Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/b3/2e/299f62b401438d5fe1624119c723f5d877acc86a4c2492da405626665f12/tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45", size = 153236, upload-time = "2025-10-08T22:01:00.137Z" }, @@ -5208,6 +5212,72 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/77/b8/0135fadc89e73be292b473cb820b4f5a08197779206b33191e801feeae40/tomli-2.3.0-py3-none-any.whl", hash = "sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b", size = 14408, upload-time = "2025-10-08T22:01:46.04Z" }, ] +[[package]] +name = "tomli" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, + { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, + { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561, upload-time = "2026-03-25T20:21:13.098Z" }, + { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824, upload-time = "2026-03-25T20:21:14.569Z" }, + { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227, upload-time = "2026-03-25T20:21:15.712Z" }, + { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859, upload-time = "2026-03-25T20:21:17.001Z" }, + { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204, upload-time = "2026-03-25T20:21:18.079Z" }, + { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084, upload-time = "2026-03-25T20:21:18.978Z" }, + { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285, upload-time = "2026-03-25T20:21:20.309Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924, upload-time = "2026-03-25T20:21:21.626Z" }, + { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018, upload-time = "2026-03-25T20:21:23.002Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948, upload-time = "2026-03-25T20:21:24.04Z" }, + { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341, upload-time = "2026-03-25T20:21:25.177Z" }, + { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159, upload-time = "2026-03-25T20:21:26.364Z" }, + { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290, upload-time = "2026-03-25T20:21:27.46Z" }, + { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141, upload-time = "2026-03-25T20:21:28.492Z" }, + { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847, upload-time = "2026-03-25T20:21:29.386Z" }, + { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088, upload-time = "2026-03-25T20:21:30.677Z" }, + { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866, upload-time = "2026-03-25T20:21:31.65Z" }, + { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887, upload-time = "2026-03-25T20:21:33.028Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704, upload-time = "2026-03-25T20:21:34.51Z" }, + { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628, upload-time = "2026-03-25T20:21:36.012Z" }, + { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180, upload-time = "2026-03-25T20:21:37.136Z" }, + { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674, upload-time = "2026-03-25T20:21:38.298Z" }, + { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976, upload-time = "2026-03-25T20:21:39.316Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755, upload-time = "2026-03-25T20:21:40.248Z" }, + { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265, upload-time = "2026-03-25T20:21:41.219Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726, upload-time = "2026-03-25T20:21:42.23Z" }, + { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859, upload-time = "2026-03-25T20:21:43.386Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713, upload-time = "2026-03-25T20:21:44.474Z" }, + { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084, upload-time = "2026-03-25T20:21:45.62Z" }, + { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973, upload-time = "2026-03-25T20:21:46.937Z" }, + { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223, upload-time = "2026-03-25T20:21:48.467Z" }, + { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973, upload-time = "2026-03-25T20:21:49.526Z" }, + { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082, upload-time = "2026-03-25T20:21:50.506Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490, upload-time = "2026-03-25T20:21:51.474Z" }, + { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263, upload-time = "2026-03-25T20:21:52.543Z" }, + { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736, upload-time = "2026-03-25T20:21:53.674Z" }, + { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717, upload-time = "2026-03-25T20:21:55.129Z" }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461, upload-time = "2026-03-25T20:21:56.228Z" }, + { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855, upload-time = "2026-03-25T20:21:57.653Z" }, + { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144, upload-time = "2026-03-25T20:21:59.089Z" }, + { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683, upload-time = "2026-03-25T20:22:00.214Z" }, + { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196, upload-time = "2026-03-25T20:22:01.169Z" }, + { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393, upload-time = "2026-03-25T20:22:02.137Z" }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, +] + +[[package]] +name = "tomli-w" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/19/75/241269d1da26b624c0d5e110e8149093c759b7a286138f4efd61a60e75fe/tomli_w-1.2.0.tar.gz", hash = "sha256:2dd14fac5a47c27be9cd4c976af5a12d87fb1f0b4512f81d69cce3b35ae25021", size = 7184, upload-time = "2025-01-15T12:07:24.262Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl", hash = "sha256:188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90", size = 6675, upload-time = "2025-01-15T12:07:22.074Z" }, +] + [[package]] name = "tornado" version = "6.5.7" @@ -5227,39 +5297,51 @@ wheels = [ [[package]] name = "tox" -version = "4.32.0" +version = "4.58.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cachetools" }, - { name = "chardet" }, { name = "colorama" }, { name = "filelock" }, { name = "packaging" }, { name = "platformdirs" }, { name = "pluggy" }, { name = "pyproject-api" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "python-discovery" }, + { name = "tomli", version = "2.4.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "tomli-w" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, { name = "virtualenv" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/59/bf/0e4dbd42724cbae25959f0e34c95d0c730df03ab03f54d52accd9abfc614/tox-4.32.0.tar.gz", hash = "sha256:1ad476b5f4d3679455b89a992849ffc3367560bbc7e9495ee8a3963542e7c8ff", size = 203330, upload-time = "2025-10-24T18:03:38.132Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6e/8e/4d2b1b2a81f4de1cd4e54fa40df1ab5f9bb88fe2e37461fc44aba8f9d302/tox-4.58.0.tar.gz", hash = "sha256:ab0b126a04dd56bc18e6d216386db09335247f2289b54cf534deb5c4ae3a8d2e", size = 296926, upload-time = "2026-07-21T13:10:36.622Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/cc/e09c0d663a004945f82beecd4f147053567910479314e8d01ba71e5d5dea/tox-4.32.0-py3-none-any.whl", hash = "sha256:451e81dc02ba8d1ed20efd52ee409641ae4b5d5830e008af10fe8823ef1bd551", size = 175905, upload-time = "2025-10-24T18:03:36.337Z" }, + { url = "https://files.pythonhosted.org/packages/6b/3d/7ba55871e9d794d40b6c8424f2e5d1b267ea5d9a4bd2175e08b57960ba13/tox-4.58.0-py3-none-any.whl", hash = "sha256:dcae21f5f015f3a67658e35644cce0d1aa0dedcd06f3927f95d84e1717f6cea5", size = 223298, upload-time = "2026-07-21T13:10:34.731Z" }, ] [[package]] name = "tox-uv" -version = "1.29.0" +version = "1.36.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "tox-uv-bare" }, + { name = "uv" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/d7/3fce976b9e295218a2d7e541e0f1e9b1259cb893de7a8d277952a66a798d/tox_uv-1.36.0-py3-none-any.whl", hash = "sha256:5f81b39be3fe4e14c6b9bb7ba637ed97d34efa6214efd5f525d95ee9559a99ac", size = 6564, upload-time = "2026-07-21T13:09:54.316Z" }, +] + +[[package]] +name = "tox-uv-bare" +version = "1.36.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "tomli", version = "2.4.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "tox" }, - { name = "uv" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4f/90/06752775b8cfadba8856190f5beae9f552547e0f287e0246677972107375/tox_uv-1.29.0.tar.gz", hash = "sha256:30fa9e6ad507df49d3c6a2f88894256bcf90f18e240a00764da6ecab1db24895", size = 23427, upload-time = "2025-10-09T20:40:27.384Z" } +sdist = { url = "https://files.pythonhosted.org/packages/56/df/9f90a59de8c87cece6e691eee53dc1cb0a824d73aea8f380ae2f6ecb71de/tox_uv_bare-1.36.0.tar.gz", hash = "sha256:d9b0a2fd0f74fa65d9597108f8a0ef7abb08651c9196a998a6073b781b45cfd0", size = 32548, upload-time = "2026-07-21T13:09:56.435Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/17/221d62937c4130b044bb437caac4181e7e13d5536bbede65264db1f0ac9f/tox_uv-1.29.0-py3-none-any.whl", hash = "sha256:b1d251286edeeb4bc4af1e24c8acfdd9404700143c2199ccdbb4ea195f7de6cc", size = 17254, upload-time = "2025-10-09T20:40:25.885Z" }, + { url = "https://files.pythonhosted.org/packages/f7/0a/6dc462e4fb543305283a6157c80f43e3d12ca4702da6ae6521d541c6b55c/tox_uv_bare-1.36.0-py3-none-any.whl", hash = "sha256:ba397dd0396df95a75744d4e42a50ee27207c0ffcf277b62ffba9c3de455a939", size = 22489, upload-time = "2026-07-21T13:09:55.389Z" }, ] [[package]] From 3c57807554f5dc76f6086a7216ee4cce34159c5d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Aug 2026 20:17:18 +0000 Subject: [PATCH 36/72] build(deps-dev): bump pytest-cov from 7.0.0 to 7.1.0 (#3742) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Corey Cox <69321580+amc-corey-cox@users.noreply.github.com> --- packages/linkml/pyproject.toml | 2 +- uv.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/linkml/pyproject.toml b/packages/linkml/pyproject.toml index c048c6b5ca..9b13b92e49 100644 --- a/packages/linkml/pyproject.toml +++ b/packages/linkml/pyproject.toml @@ -120,7 +120,7 @@ bigquery = [ tests-extra = [ "pytest >= 7.4.0", "pytest-subtests >= 0.11.0", - "pytest-cov >= 4.1.0", + "pytest-cov>=7.1.0", "pytest-xdist >= 3.6.1", "numpy >= 1.24.3; python_version < '3.12'", "numpy >= 1.25.2; python_version >= '3.12'", diff --git a/uv.lock b/uv.lock index 156731a27f..7f47746740 100644 --- a/uv.lock +++ b/uv.lock @@ -2415,7 +2415,7 @@ dev = [ { name = "polars-lts-cpu", specifier = ">=1.0.0" }, { name = "pyshacl", specifier = ">=0.25.0" }, { name = "pytest", specifier = ">=7.4.0" }, - { name = "pytest-cov", specifier = ">=4.1.0" }, + { name = "pytest-cov", specifier = ">=7.1.0" }, { name = "pytest-subtests", specifier = ">=0.11.0" }, { name = "pytest-xdist", specifier = ">=3.6.1" }, { name = "requests-cache", specifier = ">=1.3.2" }, @@ -2458,7 +2458,7 @@ tests-extra = [ { name = "numpy", marker = "python_full_version >= '3.12'", specifier = ">=1.25.2" }, { name = "openapi-spec-validator", specifier = ">=0.8.4" }, { name = "pytest", specifier = ">=7.4.0" }, - { name = "pytest-cov", specifier = ">=4.1.0" }, + { name = "pytest-cov", specifier = ">=7.1.0" }, { name = "pytest-subtests", specifier = ">=0.11.0" }, { name = "pytest-xdist", specifier = ">=3.6.1" }, { name = "requests-cache", specifier = ">=1.3.2" }, @@ -4138,16 +4138,16 @@ wheels = [ [[package]] name = "pytest-cov" -version = "7.0.0" +version = "7.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "coverage", extra = ["toml"] }, { name = "pluggy" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5e/f7/c933acc76f5208b3b00089573cf6a2bc26dc80a8aece8f52bb7d6b1855ca/pytest_cov-7.0.0.tar.gz", hash = "sha256:33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1", size = 54328, upload-time = "2025-09-09T10:57:02.113Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b1/51/a849f96e117386044471c8ec2bd6cfebacda285da9525c9106aeb28da671/pytest_cov-7.1.0.tar.gz", hash = "sha256:30674f2b5f6351aa09702a9c8c364f6a01c27aae0c1366ae8016160d1efc56b2", size = 55592, upload-time = "2026-03-21T20:11:16.284Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl", hash = "sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861", size = 22424, upload-time = "2025-09-09T10:57:00.695Z" }, + { url = "https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl", hash = "sha256:a0461110b7865f9a271aa1b51e516c9a95de9d696734a2f71e3e78f46e1d4678", size = 22876, upload-time = "2026-03-21T20:11:14.438Z" }, ] [[package]] From 2c7fe4393fa35ff7f7ca86f18e6fbddc63038be0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Aug 2026 21:19:00 +0000 Subject: [PATCH 37/72] build(deps-dev): bump furo from 2025.9.25 to 2025.12.19 Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/linkml/pyproject.toml | 2 +- uv.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/linkml/pyproject.toml b/packages/linkml/pyproject.toml index 9b13b92e49..1c9a7317d5 100644 --- a/packages/linkml/pyproject.toml +++ b/packages/linkml/pyproject.toml @@ -131,7 +131,7 @@ tests-extra = [ "openapi-spec-validator >= 0.8.4", ] docs = [ - "furo >= 2023.03.27", + "furo>=2025.12.19", "sphinxcontrib-mermaid>=2.0.3", "sphinx", "sphinx-click", diff --git a/uv.lock b/uv.lock index 7f47746740..4d079a1633 100644 --- a/uv.lock +++ b/uv.lock @@ -1162,7 +1162,7 @@ wheels = [ [[package]] name = "furo" -version = "2025.9.25" +version = "2025.12.19" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "accessible-pygments" }, @@ -1172,9 +1172,9 @@ dependencies = [ { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "sphinx-basic-ng" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4e/29/ff3b83a1ffce74676043ab3e7540d398e0b1ce7660917a00d7c4958b93da/furo-2025.9.25.tar.gz", hash = "sha256:3eac05582768fdbbc2bdfa1cdbcdd5d33cfc8b4bd2051729ff4e026a1d7e0a98", size = 1662007, upload-time = "2025-09-25T21:37:19.221Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/20/5f5ad4da6a5a27c80f2ed2ee9aee3f9e36c66e56e21c00fde467b2f8f88f/furo-2025.12.19.tar.gz", hash = "sha256:188d1f942037d8b37cd3985b955839fea62baa1730087dc29d157677c857e2a7", size = 1661473, upload-time = "2025-12-19T17:34:40.889Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ba/69/964b55f389c289e16ba2a5dfe587c3c462aac09e24123f09ddf703889584/furo-2025.9.25-py3-none-any.whl", hash = "sha256:2937f68e823b8e37b410c972c371bc2b1d88026709534927158e0cb3fac95afe", size = 340409, upload-time = "2025-09-25T21:37:17.244Z" }, + { url = "https://files.pythonhosted.org/packages/f4/b2/50e9b292b5cac13e9e81272c7171301abc753a60460d21505b606e15cf21/furo-2025.12.19-py3-none-any.whl", hash = "sha256:bb0ead5309f9500130665a26bee87693c41ce4dbdff864dbfb6b0dae4673d24f", size = 339262, upload-time = "2025-12-19T17:34:38.905Z" }, ] [[package]] @@ -2427,7 +2427,7 @@ dev = [ { name = "tox-uv" }, ] docs = [ - { name = "furo", specifier = ">=2023.3.27" }, + { name = "furo", specifier = ">=2025.12.19" }, { name = "matplotlib", specifier = ">=3.7" }, { name = "myst-parser" }, { name = "sphinx" }, From 1e69b5b363ae438c65460da3b65b84083691f208 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Aug 2026 21:37:30 +0000 Subject: [PATCH 38/72] build(deps): bump curies from 0.12.3 to 0.14.4 (#3747) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/linkml_runtime/pyproject.toml | 2 +- uv.lock | 128 ++++++++++++++++++++++++- 2 files changed, 125 insertions(+), 5 deletions(-) diff --git a/packages/linkml_runtime/pyproject.toml b/packages/linkml_runtime/pyproject.toml index f9b26095ef..f135d33f59 100644 --- a/packages/linkml_runtime/pyproject.toml +++ b/packages/linkml_runtime/pyproject.toml @@ -46,7 +46,7 @@ dependencies = [ "rdflib >=6.0.0", "requests", "prefixmaps >=0.1.4", - "curies >=0.5.4", + "curies>=0.14.4", "pyoxigraph >=0.5.6", "pydantic >=1.10.2, <3.0.0", "isodate >=0.7.2, <1.0.0; python_version < '3.11'", diff --git a/uv.lock b/uv.lock index 4d079a1633..d6ad86fbee 100644 --- a/uv.lock +++ b/uv.lock @@ -192,6 +192,99 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/df/73/b6e24bd22e6720ca8ee9a85a0c4a2971af8497d8f3193fa05390cbd46e09/backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8", size = 15148, upload-time = "2022-10-05T19:19:30.546Z" }, ] +[[package]] +name = "backports-zstd" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/b5/5a873da082bd08acd6a497f7aae224e94a7c27fa8f24488089cc50a16c84/backports_zstd-1.6.0.tar.gz", hash = "sha256:80a7859ffe70bf239d7a2ce15293bdeb5b4280ff7dc326ffab312b0e254dbb24", size = 1000009, upload-time = "2026-06-14T10:50:58.555Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/8d/3f8e7a0fd319b3c0dbf0c4f751336309bb50a873b9185c2f5d228ff0d21b/backports_zstd-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:73000459db113a658c4fb0510100ef0e79137b5828bf957b7709aacae4eb1b87", size = 437068, upload-time = "2026-06-14T10:49:05.528Z" }, + { url = "https://files.pythonhosted.org/packages/db/14/4700047713a60131efcb3977a9892fab60bc9dd6634272550b8f1c5a427d/backports_zstd-1.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6e78d5e28f812b39f92397806ecddd4a6f3bf35531a8c039a1f187abc931af8", size = 363456, upload-time = "2026-06-14T10:49:07.154Z" }, + { url = "https://files.pythonhosted.org/packages/c4/34/92de2f1bd5ee29b24302c871b9f3c19155bf9478cd3af5a0dfd70fa2f483/backports_zstd-1.6.0-cp310-cp310-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:32f04d54ec1fdf3aa648b24a10b1c9234ed2046cc4af7a8850cbc236c05d42f3", size = 507392, upload-time = "2026-06-14T10:49:08.63Z" }, + { url = "https://files.pythonhosted.org/packages/5a/95/ed5b8b026c6df1a59681a73396f63cfd10e17ccfbc6315974745a8b7d834/backports_zstd-1.6.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83415af3c64550a56cc20b4cce59bbaa81f21d28466d7adf98feff011ecbc66d", size = 476957, upload-time = "2026-06-14T10:49:09.894Z" }, + { url = "https://files.pythonhosted.org/packages/5a/47/1a82ede48d9df99c8245cb38622cd1a9b388b34f89e1cb7b6650913b493d/backports_zstd-1.6.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a3c17e6a267d13de9cbf14bf2ebfa87e03d26692456fc67d2dbed9da4f479b18", size = 582618, upload-time = "2026-06-14T10:49:11.097Z" }, + { url = "https://files.pythonhosted.org/packages/6b/70/441ed36e230b0f66d7d49382c58249b540139c5b1aa096ace1ff00bd7873/backports_zstd-1.6.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:75578c71644b031118ce938855a53530708db7f4af6e83e2f8840d5a1de990f8", size = 642278, upload-time = "2026-06-14T10:49:12.545Z" }, + { url = "https://files.pythonhosted.org/packages/58/a3/8f5737bdb02576577a018c10a4c345a5b4b2e63cc3811baeecc054f71c00/backports_zstd-1.6.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4ae7ed5a6d813450cc2d818284ea3db9721edcef50a56aae42ea06feec38c6e", size = 492492, upload-time = "2026-06-14T10:49:14.037Z" }, + { url = "https://files.pythonhosted.org/packages/e1/a9/c086507f535c2466a25bf83a876666c9ccde07b17ce81680217ac17355fe/backports_zstd-1.6.0-cp310-cp310-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5e9a8370c8ed873083d5de956d6b2e60adbad31e52d7a11111c96ef01d1910ae", size = 566440, upload-time = "2026-06-14T10:49:15.483Z" }, + { url = "https://files.pythonhosted.org/packages/89/bb/778aaccb58c4d2fba3482438c0d33c6a3a413710ecdb2ee8559ff28632fc/backports_zstd-1.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c2d1ccfe088e8279d605011a3575619a74526c261be357695b3258c0f636115a", size = 482894, upload-time = "2026-06-14T10:49:16.982Z" }, + { url = "https://files.pythonhosted.org/packages/3a/88/87ad188ce971c15bce933e13c4dc2939e741a9cb06a8bd692ef8614c3ed4/backports_zstd-1.6.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e73a550dbeb84e8fa50f8385f7735e9a4735b465851ef617d02f80ab10e44e7e", size = 510822, upload-time = "2026-06-14T10:49:18.274Z" }, + { url = "https://files.pythonhosted.org/packages/6e/8c/01714884a14b836abfdb1d80339acbb39515b0e92e615c4b65caf0eec257/backports_zstd-1.6.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:84f92e5a60a78c72ccda79d0417d311a1f6da18f446423ed411726d545bf7b56", size = 586941, upload-time = "2026-06-14T10:49:19.563Z" }, + { url = "https://files.pythonhosted.org/packages/63/43/e2cb44bbe3f7485d6ad8493211f0c8fffdb7e02fb94203fd968751d9fad7/backports_zstd-1.6.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:0eb4281f402b94d397b7482f6d9efd04c28274e4ed6eb57eb1f87bdd091a6a87", size = 564255, upload-time = "2026-06-14T10:49:20.968Z" }, + { url = "https://files.pythonhosted.org/packages/36/eb/eb0f00f6f7778db3710f757d77f5699c325548037dd975b52b186394125e/backports_zstd-1.6.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:d6b9b06323e3ba947c0003b2d70e02f33c90c36bc6262a92eb8201afc4a1aa08", size = 632836, upload-time = "2026-06-14T10:49:22.177Z" }, + { url = "https://files.pythonhosted.org/packages/ac/b8/5434897431de92e79ebfb2c02e1ab3cd228e92853b7ff981b2cffcce7355/backports_zstd-1.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8872a0e9f1af975966b5be6af7eebd3dc4046f15e470b719316516dc3d137cd6", size = 496501, upload-time = "2026-06-14T10:49:23.444Z" }, + { url = "https://files.pythonhosted.org/packages/db/76/754939c3914e9724e20a50b75b17fdc27aeb24d697eb61c3e93438a42920/backports_zstd-1.6.0-cp310-cp310-win32.whl", hash = "sha256:c14fa5dc39a804f1b92d63506f450eca5c59647a18d197d1a564b89dac1be1ce", size = 291527, upload-time = "2026-06-14T10:49:24.568Z" }, + { url = "https://files.pythonhosted.org/packages/84/f1/adcebdc2caa2e3d3d496ac2501f0ada49ad2942ee36e5f88a944bca9ca92/backports_zstd-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:8219d6fceae6b39535c4ac323dba0923d10f781d59962ff3504e693fdcafa92c", size = 329024, upload-time = "2026-06-14T10:49:25.773Z" }, + { url = "https://files.pythonhosted.org/packages/74/10/12edc0b401a08aba157b9d331748ac0f0e9890af0a58a9c72425063d1450/backports_zstd-1.6.0-cp310-cp310-win_arm64.whl", hash = "sha256:b7bc9a0b66097f03820a54316d2fdd0beb38859cf98f10d63e94c55450ed8920", size = 291597, upload-time = "2026-06-14T10:49:27.156Z" }, + { url = "https://files.pythonhosted.org/packages/c5/90/428dd82228b1b6d62d5a1bf312c29e6c125af6a182fcfd82768ca179dcc7/backports_zstd-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c4fc41b2df5529cad5ceb230319e82728096d4b353ce8d4df68a2ec37e291bb8", size = 437067, upload-time = "2026-06-14T10:49:28.335Z" }, + { url = "https://files.pythonhosted.org/packages/ef/48/768edf21fe33bae8d874470b1be136681d4d32eb820a32e1c98262ebe39b/backports_zstd-1.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:83391ef5935cc0f329b1abca414ae20ffe40d335fc21a4b5e664f08a74317d5f", size = 363454, upload-time = "2026-06-14T10:49:29.784Z" }, + { url = "https://files.pythonhosted.org/packages/29/8a/d462c2e5071eb573378f0d26760f6590613086fdf59c2d3c66bdfffb9f41/backports_zstd-1.6.0-cp311-cp311-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:7d3f64c503af7b60115b97c16feaf75bd191ef2c978d5c0c7725a6682bef63c5", size = 507393, upload-time = "2026-06-14T10:49:31.077Z" }, + { url = "https://files.pythonhosted.org/packages/b9/cb/af58363b0dd0b497282ecef1fa99789b03cc1885a01a41394cad42ceeff6/backports_zstd-1.6.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0308990ffc998df3c7ed35276bde049728b5c3956203cae40d80893576a41459", size = 476957, upload-time = "2026-06-14T10:49:32.53Z" }, + { url = "https://files.pythonhosted.org/packages/e4/fd/5fbdf2275cefae95c4b3509f6db2dc372d0587ebafea342d28781d51d932/backports_zstd-1.6.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8c298785e2fadeab82342040f2d9ce764ce500e6da6a6d99a2de514e63580b5a", size = 582618, upload-time = "2026-06-14T10:49:33.723Z" }, + { url = "https://files.pythonhosted.org/packages/99/6f/7dd45c53c907ea67f635c3900b58bb3347c01dc2ded441402028aae0ef9c/backports_zstd-1.6.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ae106fe16e36efc60ab098d02478d30aa0e31e1420eb4ecf0116459253bc6361", size = 642279, upload-time = "2026-06-14T10:49:34.938Z" }, + { url = "https://files.pythonhosted.org/packages/4d/25/a9e37dd035027565fa0b7e367da50e88a6ab26e7fd413269aa118e25258b/backports_zstd-1.6.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7293fefe15f0e5852bdb4ad1e0e26f3cbd4d3e61c19f751ecc4ff34bc1eb237d", size = 492486, upload-time = "2026-06-14T10:49:36.06Z" }, + { url = "https://files.pythonhosted.org/packages/a1/52/659686bf8f7c53ea279e1c44038504b82a6901cee2f5ae83c30bbf581301/backports_zstd-1.6.0-cp311-cp311-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ece8e7288db5b827ef8c64b2f78519f1a173a8991a625978fce02eccd7654fe9", size = 566440, upload-time = "2026-06-14T10:49:37.536Z" }, + { url = "https://files.pythonhosted.org/packages/d9/1a/c7ea5a0ff607a1a6066bb7c7cb65ae20e2f85da6adc69ab77fd8943e180c/backports_zstd-1.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:28eef3881164f3c23ce58ed59e4684103bdd279583eb2d299858c9e9b72fde9a", size = 482899, upload-time = "2026-06-14T10:49:38.805Z" }, + { url = "https://files.pythonhosted.org/packages/83/48/bd2b91100ee4fe6bb4d816e3659cbbb0cda5dd32760d2379c54d1752ec25/backports_zstd-1.6.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:481a1e9bd8f419fdc625307aa20234687f99368c75df511ef589693c5fea4c6f", size = 510826, upload-time = "2026-06-14T10:49:40.062Z" }, + { url = "https://files.pythonhosted.org/packages/25/fe/fa28509d7ce2ad59404e7ce738a2fd858e12dfd9a896629f10330222a7fb/backports_zstd-1.6.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:3b6713371f8987a1178df93cb36f29eef191f224021e2d656b2f11ce60d26816", size = 586941, upload-time = "2026-06-14T10:49:41.305Z" }, + { url = "https://files.pythonhosted.org/packages/45/28/757daf2399aa71bb37f9f7f48b42ab03fc51c340eccfad2fec92a23f6aa3/backports_zstd-1.6.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:b0ddbcd2866b8ff1a2836e4b0e4d44788f5b992d83fac75a38cda8f9a2bee079", size = 564261, upload-time = "2026-06-14T10:49:42.49Z" }, + { url = "https://files.pythonhosted.org/packages/4e/53/9b9db30cb2c148a69c40ad7647aa787338041f3dc81c5b22113286e590e9/backports_zstd-1.6.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2914abea516704bdafb2090acd3f15b5f9debecfabd15b8dd8285b2ad3b92209", size = 632869, upload-time = "2026-06-14T10:49:43.981Z" }, + { url = "https://files.pythonhosted.org/packages/81/a4/1692fbb88af8aaf900a53619fcc95c9e45d9ff162223a47fd672a9893c8d/backports_zstd-1.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dd085eafa2aac6f883afd28210a3231f717f25409a1e44a39bb7b04c8c5b5646", size = 496496, upload-time = "2026-06-14T10:49:45.118Z" }, + { url = "https://files.pythonhosted.org/packages/93/42/c5a66c47320bd12ce84a7341330ea582d67069bdb70214bca0b6bf394cfd/backports_zstd-1.6.0-cp311-cp311-win32.whl", hash = "sha256:b81b4cf3d6e0ad7ac92bef248f49fafc954262c5fb0f7e19d6aac497e5a856b2", size = 291613, upload-time = "2026-06-14T10:49:46.473Z" }, + { url = "https://files.pythonhosted.org/packages/2a/f2/f22c19b4cdde429805ff5ac8dd77a95569a7c4cb8991741b2ff0d538f220/backports_zstd-1.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:10b61850c4112952e05aa6e6cce8c9a5936fbeadb321e154216705cc76a14afa", size = 329078, upload-time = "2026-06-14T10:49:47.71Z" }, + { url = "https://files.pythonhosted.org/packages/ef/dc/e902a3f1eb92c4907b5f47f90cb3c2734ee315c4ff67179fc111343b45ba/backports_zstd-1.6.0-cp311-cp311-win_arm64.whl", hash = "sha256:068ef3d8c18815a2e3a752f766313e19910e7c50939b956923748d9c04ebcb1b", size = 291727, upload-time = "2026-06-14T10:49:48.929Z" }, + { url = "https://files.pythonhosted.org/packages/1e/bb/009af3a9532d4cc66d5385391c512210fae32ab2442605f26aca1d8d2957/backports_zstd-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0466b14723f3b7697669c00ee66fe16e30e25636b286b0a923fa86fa3d8a753c", size = 437407, upload-time = "2026-06-14T10:49:50.155Z" }, + { url = "https://files.pythonhosted.org/packages/0c/76/f7c02efde81ebb9993586f9e435d2fd1191a6f806f640e4eeb8d004493ed/backports_zstd-1.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1d146926e997d2d3de8212bdcbf4985344a2622ca3bec458d8908000a84fd883", size = 363519, upload-time = "2026-06-14T10:49:51.383Z" }, + { url = "https://files.pythonhosted.org/packages/2e/5e/0cf66f12472fe3e082cc4134395a7e0b8746cfb30aabd74251ce8fafa9a7/backports_zstd-1.6.0-cp312-cp312-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:460fd6b3f338c659507ae36cfd6b58ac9942a2ff233c5cf574416dfec0451a84", size = 507756, upload-time = "2026-06-14T10:49:52.497Z" }, + { url = "https://files.pythonhosted.org/packages/03/95/7ed25c90369360f96f8bfa961540845e063377c32a43b775201af66a588c/backports_zstd-1.6.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7c2b1f4a640c51130caa92cef5bf72bd3c3dbbcfbf814c37403aa0601b1811b0", size = 477578, upload-time = "2026-06-14T10:49:53.887Z" }, + { url = "https://files.pythonhosted.org/packages/e3/75/f16b1d3e33ca396525847c81d96e3de7bc74d2c6f9ca2ddee76b0c450697/backports_zstd-1.6.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:beb43e9885202c8d4f3762319ed4d5e98e197622afbff8439fbbdd81d08938b9", size = 583029, upload-time = "2026-06-14T10:49:55.132Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2b/a17b111b631e1c79a0e570881c1a266c661b936585afa395435a458b1991/backports_zstd-1.6.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fbb746522ebfc11155f1cd688e2c48ef3d74125e38b63eabdaab068a055c3e88", size = 641741, upload-time = "2026-06-14T10:49:56.42Z" }, + { url = "https://files.pythonhosted.org/packages/6b/b2/d17b2722c636d64b4e77ddc68d8d0625719d39f94021be8719a218af4c0a/backports_zstd-1.6.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a99710fbb225d459d66def4dc2bb2cd4a9a0bdc8b799fc0621cfdd863be9c93", size = 495554, upload-time = "2026-06-14T10:49:57.652Z" }, + { url = "https://files.pythonhosted.org/packages/63/12/2853e8b6c03f03795b6548ea61f82cc104d4f7ff2523a04bc69f46984663/backports_zstd-1.6.0-cp312-cp312-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f69365ee2b836939137de024a302395a1cb8654fb6dc5ffef6381105259c8f87", size = 570027, upload-time = "2026-06-14T10:49:59.003Z" }, + { url = "https://files.pythonhosted.org/packages/18/aa/83f37b81f3b8c6ea035bf260ec374648bd59372894c02323dc9de3cbdf77/backports_zstd-1.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:66cf8038893c7708ec345ffb3ac63c775d10f430f323ac2f0334fdb6a397c57c", size = 483594, upload-time = "2026-06-14T10:50:00.49Z" }, + { url = "https://files.pythonhosted.org/packages/f5/6a/d77f8cd2ff642d3b3652c1ccab5b6583114dbf10f8cb0143531357c83998/backports_zstd-1.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e514c71ca72f3b56bd8fbda1a6a5b7d1100a2764b42a3c74a38841f25f9b00ab", size = 511206, upload-time = "2026-06-14T10:50:01.86Z" }, + { url = "https://files.pythonhosted.org/packages/56/b2/99a60fe4d1aac8053769d2463271d5df37a7c11c387072fdbb0b16aed7f7/backports_zstd-1.6.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7741e44f7938ec94f9a52678c8d19b7bc548522ffdc39c9e4481af8db545fa9a", size = 587416, upload-time = "2026-06-14T10:50:03.236Z" }, + { url = "https://files.pythonhosted.org/packages/ec/1e/a9c003fe4d14bd4bf671598d4c7dcc1cef51e3513d9d7111ba1d07b6f07b/backports_zstd-1.6.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:97e8a9674652496c7612b528085dd5a296c052a2edc466ca1bfb7b0b27820413", size = 567615, upload-time = "2026-06-14T10:50:04.524Z" }, + { url = "https://files.pythonhosted.org/packages/ec/b9/955bd604f692c550c7cb66d00bd7691ead5c86df8ebd23d7254eeaa90789/backports_zstd-1.6.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:23a793f2fed4dbf0517319759a2cded0b0dd8e8d3797fe30badd5693e320c175", size = 632269, upload-time = "2026-06-14T10:50:05.86Z" }, + { url = "https://files.pythonhosted.org/packages/18/d7/9f61f612f8a4193484c78a1f26db82a50141234189885113ef0085a8a961/backports_zstd-1.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b951113113ed4b8d173418a4f155c14b739dace626b3fa3f82be1831958d39e4", size = 500066, upload-time = "2026-06-14T10:50:07.446Z" }, + { url = "https://files.pythonhosted.org/packages/81/a3/19fb8c48d94139481c5ccaf2fb54c31b543fa635fd7bd7399aadd15752ac/backports_zstd-1.6.0-cp312-cp312-win32.whl", hash = "sha256:6430b34a2ae6fcc604672f4f913102563473d9a015bdca1ce8c95041cc1f2677", size = 291825, upload-time = "2026-06-14T10:50:08.762Z" }, + { url = "https://files.pythonhosted.org/packages/58/38/40ba081c6c71f0f22c64d3d54b912ad75a4e6812caa1397cbb15b5693b12/backports_zstd-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:08793876172551a930ce4d65c712cd516184d1a97070d4a1193e05bf0cf7040d", size = 329201, upload-time = "2026-06-14T10:50:09.979Z" }, + { url = "https://files.pythonhosted.org/packages/2b/6c/f7116dd2edc6f960545f0d8616939eae3a20031b3b6669697d4f9fd83b2e/backports_zstd-1.6.0-cp312-cp312-win_arm64.whl", hash = "sha256:03b7c59c71f7a597e2bcb3f8368371e9a660a1bdf1c37afc1f1ad1496a013c19", size = 291901, upload-time = "2026-06-14T10:50:11.198Z" }, + { url = "https://files.pythonhosted.org/packages/38/06/c430537d59c55d49bcd15ecf4b1aa965453219caad810a4f2b484816f4be/backports_zstd-1.6.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:2ace939e4d620e119423606f2d3d7115f8707733bf57f279ad9a9383f875986f", size = 400327, upload-time = "2026-06-14T10:50:12.446Z" }, + { url = "https://files.pythonhosted.org/packages/36/48/2f8323bb0e3ebba88b54877a2979afeb83983fb2ca572f09ad61aae2d3a0/backports_zstd-1.6.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:4c68a9ed2df0cca51d774c521e68a34d2e3d9ebfc687ef8096adfd4f345b551d", size = 454276, upload-time = "2026-06-14T10:50:13.667Z" }, + { url = "https://files.pythonhosted.org/packages/7c/39/87a665244a65f5b87a06b848c29a8cce07e91d59c5988ee2a32c0293a21c/backports_zstd-1.6.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:30576f49b82328ec8af16c11100efe52ca88526f71bbe100ef6b4e707dc13bf2", size = 357457, upload-time = "2026-06-14T10:50:14.906Z" }, + { url = "https://files.pythonhosted.org/packages/7f/8b/854d4a47bb8b7a48bfb2ed381c7b03a70efb4fc49f0e4a1509b38a2e1727/backports_zstd-1.6.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:b4bddfcfb6679215d6f4dc5f79a1f9301af339480d70527a14b57a1f2e6b6cbf", size = 366139, upload-time = "2026-06-14T10:50:16.399Z" }, + { url = "https://files.pythonhosted.org/packages/8f/de/c3af43eb8df6f2581e157e18a3e0121eadb826055b2fde3f91ec188689cb/backports_zstd-1.6.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:65048ed08c5124f05ff9f355ab9703014bb2dbe7f8d9948ce193685b1775f442", size = 446683, upload-time = "2026-06-14T10:50:17.633Z" }, + { url = "https://files.pythonhosted.org/packages/5c/39/87cf3d883d386c10ac52f5322604fb9afdd204229f4c47d4a820a839b8ff/backports_zstd-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5918fc6b31437208721276964323933cd86077b8d5b469c59c1b3fd2c8220a05", size = 436869, upload-time = "2026-06-14T10:50:19.113Z" }, + { url = "https://files.pythonhosted.org/packages/5e/b6/9479e6f0f18824ad38e8d7dd85161ab0842a198be669421232925bb30960/backports_zstd-1.6.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4b6c8b02ab0ccb2431bb7bc238be91d158b308915e7b07937388e540466fe7e7", size = 363090, upload-time = "2026-06-14T10:50:20.302Z" }, + { url = "https://files.pythonhosted.org/packages/d9/74/a5e98fe108e17c91d9bc590a19e77f5d47d579e34d3f5bc098a949d6c27c/backports_zstd-1.6.0-cp313-cp313-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:711e6b98f8924e8b4a61ff97ab6321f33de024e1ed6a32f5123763aeda8459be", size = 507070, upload-time = "2026-06-14T10:50:21.536Z" }, + { url = "https://files.pythonhosted.org/packages/69/f5/392bb7dce7363b77bc5403060f418fad438b9cfdd3edd10d65cee7d8fd11/backports_zstd-1.6.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2ba9ac10fc393e5123a08802e0e895a107cb4a66b9973d2844dbd8a343111e59", size = 477200, upload-time = "2026-06-14T10:50:22.91Z" }, + { url = "https://files.pythonhosted.org/packages/e4/4d/dfb665806ba4f74bc48071d32006843b53568c4a17ff627a3061de5eaa09/backports_zstd-1.6.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2f723219335387d7546412d8141e0303590600949b4184a1391a0c6a3c756058", size = 582724, upload-time = "2026-06-14T10:50:24.28Z" }, + { url = "https://files.pythonhosted.org/packages/57/b2/beeca7393a8310debd82ee2f0ce5c1801e8d7cb673f7f226f4a0866ca238/backports_zstd-1.6.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:64b94d7a836568926a3309ff510c7f8261b881b341fd4992cabf4f0998878f8a", size = 643493, upload-time = "2026-06-14T10:50:25.736Z" }, + { url = "https://files.pythonhosted.org/packages/38/26/ce90e9eed6f25aaa4a4fa305a2aaf2d2ad81fd69de8eb248ddd91c80d1e0/backports_zstd-1.6.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e39258a09b1c7ca70b5e94a5c5ccfe4700b4250b8077cfeab31d0f79565d4c9b", size = 492190, upload-time = "2026-06-14T10:50:27.205Z" }, + { url = "https://files.pythonhosted.org/packages/17/9b/37b9b146df1f5452419a96071a7017cbac212ec9b137d7a88ca46dc2aa9e/backports_zstd-1.6.0-cp313-cp313-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:15b1aae0f64cd742df4bba1d989d0a09a6ec619202543fdba684640454541fd3", size = 567432, upload-time = "2026-06-14T10:50:28.386Z" }, + { url = "https://files.pythonhosted.org/packages/06/66/81b30991be83237529f36335ac3682bce26409064b906ac6122874575196/backports_zstd-1.6.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:25b5ddc789480072551af571a746e9500356b2aff0499861cf2ca07ea7431e68", size = 483021, upload-time = "2026-06-14T10:50:29.654Z" }, + { url = "https://files.pythonhosted.org/packages/49/2a/792c65dcc1e45eb0c1bdc012ee94b84867186bfe27a860d0813bd216f03b/backports_zstd-1.6.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:a13cfa3410a75e4cb87abdb669aaf79da861cb79299159054ff8f77b9671bc40", size = 510596, upload-time = "2026-06-14T10:50:31.657Z" }, + { url = "https://files.pythonhosted.org/packages/1d/22/01b92a600505620e4cb5f20429e181f30458b7207ca8b52ca5ca6068c35f/backports_zstd-1.6.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:2ddab55a5f54dec8acfad68ef70f1c704fd21919990ddc238afbd6f496e61c6a", size = 587143, upload-time = "2026-06-14T10:50:32.868Z" }, + { url = "https://files.pythonhosted.org/packages/d8/60/4672f5110b9eb01388cc6225a739e3a5fcd749a63a9c4c1450a04fa27113/backports_zstd-1.6.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:fa305a84087e10d7a85e8a8a3dcba8cdbda4868f2180173b264b7b488fd37c55", size = 565238, upload-time = "2026-06-14T10:50:34.173Z" }, + { url = "https://files.pythonhosted.org/packages/5c/3b/19928d60ea7d25820bf12ef88de74534ca85b56ff7cf13c1b0e74e3a3d7c/backports_zstd-1.6.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:df27b57d214a3124fbe4e933ef5a903d4567f154260d9aece8c797a987f2a205", size = 633970, upload-time = "2026-06-14T10:50:35.506Z" }, + { url = "https://files.pythonhosted.org/packages/df/97/c4cecb3e0ff53563ef9819f0395d919ceaae9c5147392ac23bac7afdb20f/backports_zstd-1.6.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:28fecd73459d74910ae1987ab84b7bef690d3dd860948430dd5555108b006daf", size = 496539, upload-time = "2026-06-14T10:50:37.015Z" }, + { url = "https://files.pythonhosted.org/packages/eb/f4/46b2f29d2938a80e56e61a19f11ab093f531a9f8cd0ec8eeaac1246bcd99/backports_zstd-1.6.0-cp313-cp313-win32.whl", hash = "sha256:3e689af303df287142770abe3a48bbefd24dab4a09da5807d0e1fa8c75bab026", size = 291451, upload-time = "2026-06-14T10:50:38.518Z" }, + { url = "https://files.pythonhosted.org/packages/d1/ad/b529f92166da61f496621345f95d2dc583c8ca5ac553c084a4ef6c12cd71/backports_zstd-1.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:b067b1ef9c8e41fb0882c828aa37829938b5c0dab067eca72b23fc24c563b9da", size = 329023, upload-time = "2026-06-14T10:50:39.742Z" }, + { url = "https://files.pythonhosted.org/packages/30/d8/6be904d20345fbebec583ca83676e01f30c76118b283eb666d8ec8291ca1/backports_zstd-1.6.0-cp313-cp313-win_arm64.whl", hash = "sha256:a838296f5b84c920172fb579cac894d255c1fc25457c7234613ddcfa385e49b7", size = 291636, upload-time = "2026-06-14T10:50:41.004Z" }, + { url = "https://files.pythonhosted.org/packages/f7/52/9ed88f528b9484f3847f07b9d1d014b496e048d391b4bc04cb0117bd71a5/backports_zstd-1.6.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:6c73ae37dbf9207727ac095dedef864c05d836eaec962a47b3b64eaadaf1c6b6", size = 411126, upload-time = "2026-06-14T10:50:42.253Z" }, + { url = "https://files.pythonhosted.org/packages/fe/26/bf8093d117cb6c36202ee7a2127f672c7b0c81f0c104ce28124534b75efa/backports_zstd-1.6.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:839faf90a7eb525a401978dc925df8c44bd12526e8ba1529b9f8a7106e729637", size = 340643, upload-time = "2026-06-14T10:50:43.571Z" }, + { url = "https://files.pythonhosted.org/packages/17/10/55f0860ed359d290e0eadd410da47ae720a1acf0d8362149e22acbe63223/backports_zstd-1.6.0-pp310-pypy310_pp73-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:f8f5c1c7c69a4b00889e52d9304a918a5b49010f9645768eb5fd0ad404f790ba", size = 421696, upload-time = "2026-06-14T10:50:44.915Z" }, + { url = "https://files.pythonhosted.org/packages/7c/3e/8dd9cc6f3e697e4721e53d6b9ca8c95c9d51ad2e759e7fcee6885e5b71db/backports_zstd-1.6.0-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e80bceebc9b58e959bede9b26cafe15b5b9526f3533a6dd06330c5da73cb9329", size = 395239, upload-time = "2026-06-14T10:50:46.186Z" }, + { url = "https://files.pythonhosted.org/packages/fb/bb/ab92f8599749cb6063416dd9f46e084004c4e8db68e2eb768283012a6d27/backports_zstd-1.6.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:79284c1dd702f4f24ed1a36e51555c907dd237b6c0d829595978f4089a2aeea9", size = 415202, upload-time = "2026-06-14T10:50:47.726Z" }, + { url = "https://files.pythonhosted.org/packages/2c/f4/dd3ef995f6b22e23da145ac3ecc91e1f1fc4cb572b7f95e6b2b11de16782/backports_zstd-1.6.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1e20b3ecd0a711be82e964aca28554eabbc31ee69a20e5e7b8fd42268af46212", size = 315722, upload-time = "2026-06-14T10:50:49Z" }, + { url = "https://files.pythonhosted.org/packages/e8/09/898fe2f8196fa7ab825f5fed786c68581fdac7d23a8e20baa0cc01cb2f0b/backports_zstd-1.6.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:aeef8563b82ed4af328f98e5041c1b4800d86f68f857ffd1577d4d47dc9aa6cd", size = 411023, upload-time = "2026-06-14T10:50:50.286Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ad/6ad9af1596ab5f284bb53954be41396e13d23c81cdfe3d945402e8ee0215/backports_zstd-1.6.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:9cb75e33131946fabd6319061df3b8b1d588fe0963183280e9b5f49f7772fc09", size = 340554, upload-time = "2026-06-14T10:50:51.523Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/f083d7c8a4ee5d0bb21b4d3144e76de9f655ca4dd0bffcb95baa5bc47a62/backports_zstd-1.6.0-pp311-pypy311_pp73-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:ef132cfb638e9a86bd5dc07fb4e1cb895bc55bce6bb5e759366e8b160d0747e2", size = 421694, upload-time = "2026-06-14T10:50:52.917Z" }, + { url = "https://files.pythonhosted.org/packages/41/d7/693b20f3ccae2e05d166f98fe55b1657451170b72c804ed9f6b98df520be/backports_zstd-1.6.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab70eace272d6f122b121c057e436709b50a28abf30d97aab28433c08f4a4095", size = 395237, upload-time = "2026-06-14T10:50:54.448Z" }, + { url = "https://files.pythonhosted.org/packages/53/a1/484e0f9ec994bd2285d6747e7c8028350f1a177e9210bc57637898042d3b/backports_zstd-1.6.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:17efb3d11137de5166dd51eedab9c36ad633402acba386eee8d715213ea47e49", size = 415201, upload-time = "2026-06-14T10:50:55.854Z" }, + { url = "https://files.pythonhosted.org/packages/3c/56/70860ece85cd49b564305cbc22bf6c4183975427ff6dfe2097e855f5dd5e/backports_zstd-1.6.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:994167ff6551b9c1ce226e0aab16295b98c94507b5701aa60d2c32b7d50796b1", size = 315721, upload-time = "2026-06-14T10:50:57.074Z" }, +] + [[package]] name = "beautifulsoup4" version = "4.14.2" @@ -873,15 +966,16 @@ wheels = [ [[package]] name = "curies" -version = "0.12.3" +version = "0.14.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, + { name = "pystow" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/39/2d/09009f24ee7e9f948d0aa3b4499b6c30d47d46ad0ef209dbb20b05c4d979/curies-0.12.3.tar.gz", hash = "sha256:b55e266c3f92f0ad8ce13727c3d4e81d622b2422f5df230a6ff2f9e98733f2a2", size = 280958, upload-time = "2025-10-26T23:22:06.633Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/26/6da71ec142b63f6a8cb6e6817f6b9ebf19332846412d2bdde4b6aabe48e1/curies-0.14.4.tar.gz", hash = "sha256:605c272f22466f0f3c331303b2313b1253012bcb32005da903443977044a60b8", size = 73128, upload-time = "2026-07-31T14:30:13.831Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/31/48/8850e53fe803d01f65adaf349ee9a9e3d7ad57ea0bc9777b8045acb956e4/curies-0.12.3-py3-none-any.whl", hash = "sha256:d336dfa738743f388ce53dc275d7101e9e12f9568d1b347396c29de2385123df", size = 68030, upload-time = "2025-10-26T23:22:05.019Z" }, + { url = "https://files.pythonhosted.org/packages/f2/87/b38ccafc594379d996f82ea0b417e7741b3b0eed26bebc44da496da62b22/curies-0.14.4-py3-none-any.whl", hash = "sha256:a21444f19d7b92f95c1207837f89fa7ab9040d00eac131bd78642a81eb8144f6", size = 82422, upload-time = "2026-07-31T14:30:12.472Z" }, ] [[package]] @@ -2505,7 +2599,7 @@ dev = [ requires-dist = [ { name = "click", specifier = ">=8.2" }, { name = "coverage", marker = "extra == 'dev'" }, - { name = "curies", specifier = ">=0.5.4" }, + { name = "curies", specifier = ">=0.14.4" }, { name = "deprecated" }, { name = "hbreader" }, { name = "isodate", marker = "python_full_version < '3.11'", specifier = ">=0.7.2,<1.0.0" }, @@ -4118,6 +4212,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5e/1d/d8d5be9e72e518b42f544e196de9c07161b0933143c9d0e4e2e33de60d79/pyshexc-0.10.3.post1-py3-none-any.whl", hash = "sha256:5d247f2822ef9864152545935d93a07dce66640608ea9414c96f69da7fe7a168", size = 71730, upload-time = "2026-05-01T11:34:17.836Z" }, ] +[[package]] +name = "pystow" +version = "0.8.21" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "backports-zstd", marker = "python_full_version < '3.14'" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/08/e572a7b66ba91b5335bca61afa2250d6419dc391ebf3cb5ac8795748dee0/pystow-0.8.21.tar.gz", hash = "sha256:460c299093d3e6f45433141ba0c5bc5d99c7fe98b042a6f578040d5103db7aab", size = 54881, upload-time = "2026-07-04T10:25:21.439Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/ac/991733a89b74f62d05d3ad6da773e2d36e26a3a71b6ee6b9ef82b450b486/pystow-0.8.21-py3-none-any.whl", hash = "sha256:7b14f77f0395b93a3a94d85526972c98d526d86a8efa5036363b9da3e2d34003", size = 62430, upload-time = "2026-07-04T10:25:20.274Z" }, +] + [[package]] name = "pytest" version = "9.1.1" @@ -5344,6 +5452,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f7/0a/6dc462e4fb543305283a6157c80f43e3d12ca4702da6ae6521d541c6b55c/tox_uv_bare-1.36.0-py3-none-any.whl", hash = "sha256:ba397dd0396df95a75744d4e42a50ee27207c0ffcf277b62ffba9c3de455a939", size = 22489, upload-time = "2026-07-21T13:09:55.389Z" }, ] +[[package]] +name = "tqdm" +version = "4.70.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/21/3b/6c24bec5be5e743ffd99576daa5cc077722fc7d5bbc00bd133fa0c698dc6/tqdm-4.70.0.tar.gz", hash = "sha256:55b0b0dbd97462d06ebee91e4dac24ed4d4702be82b24f07e6c1d27e08cea220", size = 795438, upload-time = "2026-07-27T11:33:15.271Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/1c/01bfd571a64e7f270e6bab5e33777debe0edc56759233ce84f27dec92d14/tqdm-4.70.0-py3-none-any.whl", hash = "sha256:7f585706bfddbdebf89daac705b2dfcc16890130727d3197ca62c732b4310953", size = 80184, upload-time = "2026-07-27T11:33:13.167Z" }, +] + [[package]] name = "traitlets" version = "5.14.3" From 36f5350d8dea0ee864370338cfb7788daae4ed89 Mon Sep 17 00:00:00 2001 From: Nico Matentzoglu Date: Mon, 10 Aug 2026 19:44:40 +0300 Subject: [PATCH 39/72] Add Codeownership for Java, Zod and OpenAPI This is an experimental change to delegating self-contained areas to trusted, established community members. --- .github/CODEOWNERS | 31 +++++++++++++++++++++++++++---- docs/maintainers/codeowners.md | 12 ++++++++++++ 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index cd49d25843..1deb997310 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -18,10 +18,14 @@ # --- Per-subsystem ownership (overrides the default for these paths) --- # javagen -/docs/generators/java.rst @gouttegd -/packages/linkml/src/linkml/generators/javagen.py @gouttegd -/packages/linkml/src/linkml/generators/javagen/ @gouttegd -/tests/linkml/test_generators/test_javagen.py @gouttegd +# +# EXPERIMENT: delegated self-contained area, see +# docs/maintainers/codeowners.md#experiment-delegating-self-contained-areas + +/docs/generators/java.rst @gouttegd @noelmcloughlin +/packages/linkml/src/linkml/generators/javagen.py @gouttegd @noelmcloughlin +/packages/linkml/src/linkml/generators/javagen/ @gouttegd @noelmcloughlin +/tests/linkml/test_generators/test_javagen.py @gouttegd @noelmcloughlin # pydanticgen: /packages/linkml/src/linkml/generators/pydanticgen/ @sneakers-the-rat @kevinschaper @@ -37,3 +41,22 @@ /docs/generators/yarrrml.rst @Ostrzyciel @lapkinvladimir /packages/linkml/src/linkml/generators/yarrrmlgen.py @Ostrzyciel @lapkinvladimir /tests/linkml/test_generators/test_yarrrmlgen.py @Ostrzyciel @lapkinvladimir + +# openapigen: +# +# EXPERIMENT: delegated self-contained area, see +# docs/maintainers/codeowners.md#experiment-delegating-self-contained-areas +# @Silvanoc and @noelmcloughlin jointly own the OpenAPI generator and can +# review each other's changes and merge them without core-team approval. + +/docs/generators/openapi.rst @Silvanoc @noelmcloughlin +/packages/linkml/src/linkml/generators/openapigen.py @Silvanoc @noelmcloughlin +/tests/linkml/test_generators/test_openapigen.py @Silvanoc @noelmcloughlin +/tests/linkml/test_generators/input/openapi/ @Silvanoc @noelmcloughlin +/tests/linkml/test_scripts/test_gen_openapi.py @Silvanoc @noelmcloughlin + +# zodgen: +/docs/generators/zod.rst @linkml/core-team @noelmcloughlin +/packages/linkml/src/linkml/generators/zodgen.py @linkml/core-team @noelmcloughlin +/packages/linkml/src/linkml/generators/zod_ifabsent_processor.py @linkml/core-team @noelmcloughlin +/tests/linkml/test_generators/test_zodgen.py @linkml/core-team @noelmcloughlin diff --git a/docs/maintainers/codeowners.md b/docs/maintainers/codeowners.md index fdfd64cda0..e05c26ec85 100644 --- a/docs/maintainers/codeowners.md +++ b/docs/maintainers/codeowners.md @@ -85,6 +85,18 @@ including PRs authored by CODEOWNERS or core developers. The mechanisms below — the 1-month fallback, the project-direction override, and the stepping-down process — exist within that frame. +## Experiment: delegating self-contained areas + +A few generators are self-contained enough that core-team review adds little. +Where trusted, established community members know such an area well, we hand +it to them outright: they review each other's changes and merge without +core-team sign-off. + +The goal is to let those areas move at the pace of the people who care about +them rather than at the pace of core-team availability. Rules covering them +are marked `EXPERIMENT` in +[`.github/CODEOWNERS`](https://github.com/linkml/linkml/blob/main/.github/CODEOWNERS). + ## Avoiding review bottlenecks: the 1-month fallback CODEOWNERS is a stewardship signal, **not a veto**. If CODEOWNERS become From c3a2db54a775ab9008b6617144e75a698d702ee2 Mon Sep 17 00:00:00 2001 From: Damien Goutte-Gattat Date: Mon, 10 Aug 2026 18:09:18 +0100 Subject: [PATCH 40/72] javagen: Misc fixes to documentation. Apply minor corrections to the java.rst documentation. Amend the main docstring of the JavaGenerator class so that it does not attempt to provide a (potentially outdated) list of the available templates. --- docs/generators/java.rst | 6 +++--- packages/linkml/src/linkml/generators/javagen.py | 6 ------ 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/docs/generators/java.rst b/docs/generators/java.rst index dbb78e8b6f..82162d2fc2 100644 --- a/docs/generators/java.rst +++ b/docs/generators/java.rst @@ -38,7 +38,7 @@ LinkML enumerations can be rendered in two ways: * as plain `String` objects: that is, the enumeration themselves are *not* rendered at all, and slots whose range is set to an enumeration are rendered as `String`-typed fields; -* as standard Java ``enum`` objects. +* as standard Java ``enum`` objects. For backwards compatibility reasons, the default behavior is to render enumerations as `String` objects. Use the ``--true-enums`` option @@ -91,7 +91,7 @@ With ``--use-aliases``, that slot will instead be rendered as: Of note, when using the ``org.incenp.linkml`` template variant, the slot alias, when present, is always used to determine how the slot is expected to be serialised in the JSON or YAML serialisations; the -``--use-aliases`` option only affects the symbol use to represent the +``--use-aliases`` option only affects the symbol used to represent the slot in the Java code. Generating Visitor Patterns @@ -228,7 +228,7 @@ first one that it finds: * ``Foo-V.jinja2`` (the *V* variant template specific for the *Foo* class); -* ``class-V.jinja``` (the generic *V* variant template for all classes); +* ``class-V.jinja2`` (the generic *V* variant template for all classes); * ``Foo.jinja2`` (default template specific for the *Foo* class); * ``class.jinja2`` (generic default template for all classes). diff --git a/packages/linkml/src/linkml/generators/javagen.py b/packages/linkml/src/linkml/generators/javagen.py index 56a56b0d52..d4d632dff4 100644 --- a/packages/linkml/src/linkml/generators/javagen.py +++ b/packages/linkml/src/linkml/generators/javagen.py @@ -196,12 +196,6 @@ class JavaGenerator(OOCodeGenerator): This generators supports an arbitrary number of different styles through the use of “template variants“. - - Currently, two variants are available: - - - the default variant represents LinkML classes as Java classes carrying - Lombok annotations (https://projectlombok.org); - - the `records` variant represents LinkML classes as Java 16 records. """ # ClassVars From 89566dfb7c02173d23d3e4402fc98087eb4efead Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Tue, 14 Jul 2026 15:39:51 +0200 Subject: [PATCH 41/72] fix(openapigen): replace raw schema with schemaview provided one self.schema returns the raw parsed schema without any imports resolution. This patch replaces it with the schema provided by the SchemaView which provides lazy resolution. Signed-off-by: Silvano Cirujano Cuesta --- packages/linkml/src/linkml/generators/openapigen.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/linkml/src/linkml/generators/openapigen.py b/packages/linkml/src/linkml/generators/openapigen.py index faab72e1ae..c57838d180 100644 --- a/packages/linkml/src/linkml/generators/openapigen.py +++ b/packages/linkml/src/linkml/generators/openapigen.py @@ -250,7 +250,9 @@ def serialize(self, template_file: str = "", **kwargs) -> str: if referenced_resource_name != class_name: self._renaming[class_name] = referenced_resource_name referenced_class_names.add(class_name) - json_schema = JsonSchemaGenerator(self.schema, include_null=False, top_class=class_name).generate() + json_schema = JsonSchemaGenerator( + self.schemaview.schema, include_null=False, top_class=class_name + ).generate() json_schema_classes = json.loads(json_schema.to_json())["$defs"] class_schemas = class_schemas | json_schema_classes class_schemas = self._sanitize_schemas(class_schemas, referenced_class_names) @@ -267,7 +269,8 @@ def serialize(self, template_file: str = "", **kwargs) -> str: def printout_template(self) -> str: """Return a generic OpenAPI template pre-filled with the first class of the schema.""" - first_class = next(iter(self.schema.classes.keys())) + class_names = self.schemaview.all_classes().keys() + first_class = next(iter(class_names)) if re.search(r"[ :\d]", first_class): first_class = f'"{first_class}"' return openapi_generic_template.format(schema_id=self.schema.id, schema_class=first_class) From 851d53bc1191f8492ed7438ae4e070d3562829ec Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Wed, 15 Jul 2026 13:22:31 +0200 Subject: [PATCH 42/72] style(openapigen): align variable names with openapi wording Replace names like "class" or "resource" with the OpenAPI wording "component schema", "data schema" or similar. "Class" does not appear even once in the OpenAPI specification and "resource" appears with a different meaning than the one used in the code until now. Signed-off-by: Silvano Cirujano Cuesta --- .../src/linkml/generators/openapigen.py | 156 ++++++++++-------- 1 file changed, 83 insertions(+), 73 deletions(-) diff --git a/packages/linkml/src/linkml/generators/openapigen.py b/packages/linkml/src/linkml/generators/openapigen.py index c57838d180..3fed6df6a2 100644 --- a/packages/linkml/src/linkml/generators/openapigen.py +++ b/packages/linkml/src/linkml/generators/openapigen.py @@ -31,27 +31,27 @@ get: responses: '200': - description: Endpoint example involving random schema class + description: Endpoint example involving random data schema content: application/json: schema: # any broken reference will cause template instantiation to fail # OpenAPI editors typically also report them - $ref: '#/components/schemas/{schema_class}' + $ref: '#/components/schemas/{data_schema}' components: - # any class schema provided here that is not used by at least + # any data schema provided here that is not used by at least # one endpoint will be eliminated from the template instantiation # OpenAPI editors typically also report them schemas: # this resource name can differ from the name in the LinkML schema # it must only match the corresponding endpoint `$ref` references - {schema_class}: + {data_schema}: type: object description: Resource schema to be generated from the LinkML data model. # schema ID mismatching with provided schema will cause template # instantiation to fail - x-linkml-schema: {schema_id} - x-linkml-source: {schema_class} + x-linkml-schema: {linkml_schema_id} + x-linkml-source: {data_schema} """ @@ -62,9 +62,9 @@ class OpenApiGenerator(Generator): The generator composes a user-provided OpenAPI template (containing the API header, paths/endpoints, and security schemes) with JSON Schema components generated from - the LinkML schema via :class:`.JsonSchemaGenerator`. Only classes referenced by the - template's endpoints (and their transitive dependencies) are included in the - ``components/schemas`` section. + the LinkML schema via :class:`.JsonSchemaGenerator`. Only data schemas referenced + by the template's endpoints (and their transitive dependencies) are included in + the ``components/schemas`` section. """ generatorname = os.path.basename(__file__) @@ -90,7 +90,7 @@ class OpenApiGenerator(Generator): repr=False, ) - def _find_referenced_resources(self) -> set[str]: + def _find_referenced_schemas(self) -> set[str]: """Return the set of resource names referenced by the template's endpoints.""" result = set() for endp_spec in self._template["paths"].values(): @@ -105,8 +105,8 @@ def _find_referenced_resources(self) -> set[str]: if "content" in response: for content_spec in response["content"].values(): if "$ref" in content_spec["schema"]: - class_name = content_spec["schema"]["$ref"].removeprefix("#/components/schemas/") - result.add(class_name) + resource_name = content_spec["schema"]["$ref"].removeprefix("#/components/schemas/") + result.add(resource_name) return result def _fix_openapi_spec(self, element: dict | list) -> dict | list | None: @@ -143,7 +143,7 @@ def _fix_openapi_spec(self, element: dict | list) -> dict | list | None: def _rename(self, element: dict | list) -> dict | list | None: """ - If the resource names do not correspond the schema class names, + If the resource names do not correspond the data schema names, then some renaming is needed so that OpenAPI resource names are properly referenced throughout the whole OpenAPI file. """ @@ -156,9 +156,9 @@ def _rename(self, element: dict | list) -> dict | list | None: if isinstance(value, dict | list): value = self._rename(value) elif isinstance(value, str) and value.startswith("#/components/schemas/"): - class_name = value[len("#/components/schemas/") :] - if class_name in self._renaming: - value = value.replace(class_name, self._renaming[class_name]) + data_schema_name = value[len("#/components/schemas/") :] + if data_schema_name in self._renaming: + value = value.replace(data_schema_name, self._renaming[data_schema_name]) renamed_element[key] = value elif isinstance(element, list): renamed_element = [] @@ -166,37 +166,37 @@ def _rename(self, element: dict | list) -> dict | list | None: if isinstance(item, dict | list): item = self._rename(item) elif isinstance(item, str) and item.startswith("#/components/schemas/"): - class_name = item[len("#/components/schemas/") :] - if class_name in self._renaming: - item = item.replace(class_name, self._renaming[class_name]) + data_schema_name = item[len("#/components/schemas/") :] + if data_schema_name in self._renaming: + item = item.replace(data_schema_name, self._renaming[data_schema_name]) renamed_element.append(item) return renamed_element - def _find_references(self, element: dict | list, referenced_classes: set[str]) -> None: - """Recursively collect all ``$ref`` target names from ``element`` into ``referenced_classes``.""" + def _find_references(self, element: dict | list, referenced_data_schemas: set[str]) -> None: + """Recursively collect all ``$ref`` target names from ``element`` into ``referenced_data_schemas``.""" if isinstance(element, dict): if "$ref" in element: - referenced_classes.add(element["$ref"].replace("#/$defs/", "")) + referenced_data_schemas.add(element["$ref"].replace("#/$defs/", "")) for value in element.values(): - self._find_references(value, referenced_classes) + self._find_references(value, referenced_data_schemas) elif isinstance(element, list): for item in element: - self._find_references(item, referenced_classes) + self._find_references(item, referenced_data_schemas) - def _sanitize_schemas(self, class_schemas: dict, endpoint_referenced_classes: set[str]) -> dict: - """Remove schemas not transitively reachable from any endpoint-referenced class.""" - referenced_classes = endpoint_referenced_classes.copy() - for class_schema in class_schemas.values(): - self._find_references(class_schema, referenced_classes) - while set(class_schemas.keys()).difference(referenced_classes): - class_schema_names = list(class_schemas.keys()) - for class_name in class_schema_names: - if class_name not in referenced_classes: - del class_schemas[class_name] - referenced_classes = endpoint_referenced_classes.copy() - for class_schema in class_schemas.values(): - self._find_references(class_schema, referenced_classes) - return class_schemas + def _sanitize_schemas(self, data_schemas: dict, endpoint_referenced_schemas: set[str]) -> dict: + """Remove schemas not transitively reachable from any endpoint-referenced data schema.""" + referenced_schemas = endpoint_referenced_schemas.copy() + for data_schema in data_schemas.values(): + self._find_references(data_schema, referenced_schemas) + while set(data_schemas.keys()).difference(referenced_schemas): + data_schema_names = list(data_schemas.keys()) + for data_schema_name in data_schema_names: + if data_schema_name not in referenced_schemas: + del data_schemas[data_schema_name] + referenced_schemas = endpoint_referenced_schemas.copy() + for data_schema in data_schemas.values(): + self._find_references(data_schema, referenced_schemas) + return data_schemas def serialize(self, template_file: str = "", **kwargs) -> str: """Generate an OpenAPI v3.0.3 spec from ``template_file`` and the loaded LinkML schema.""" @@ -225,55 +225,62 @@ def serialize(self, template_file: str = "", **kwargs) -> str: raise ValueError("OpenAPI template is missing required 'paths' section") if not isinstance(self._template.get("components"), dict): raise ValueError("OpenAPI template is missing required 'components' section") - referenced_resource_names = self._find_referenced_resources() - resource_schemas = self._template["components"]["schemas"] - class_schemas = {} - self._renaming = {} - referenced_class_names = set() - # get only the resource schemas that are really referenced from an endpoint - for referenced_resource_name in referenced_resource_names: - if referenced_resource_name not in resource_schemas: + endpoint_ref_schema_names = self._find_referenced_schemas() # schemas referenced by OpenAPI endpoint(s) + openapi_schemas = self._template["components"]["schemas"] # data schemas provided by the template + all_req_data_schemas = {} # data schemas directly or transitively required by the API + self._renaming = {} # openapi <-> linkml renaming map + directly_required_linkml_elements: set[str] = set() # LinkML class/type names of directly-referenced schemas + # get only the data schemas that are really referenced from an endpoint + for endpoint_reference_name in endpoint_ref_schema_names: + if endpoint_reference_name not in openapi_schemas: raise KeyError( - f"resource '{referenced_resource_name}' referenced in one of the endpoints " + f"data schema '{endpoint_reference_name}' referenced in one of the endpoints " "does not have a schema declaration" ) - resource_schema = resource_schemas[referenced_resource_name] + data_schema = openapi_schemas[endpoint_reference_name] # validate that linkml schema id is correct - if resource_schema["x-linkml-schema"] != self.schema.id: + if data_schema["x-linkml-schema"] != self.schema.id: raise ValueError( - f"Template resource '{referenced_resource_name}' declares " - f"x-linkml-schema '{resource_schema['x-linkml-schema']}' " + f"Template data schema '{endpoint_reference_name}' declares " + f"x-linkml-schema '{data_schema['x-linkml-schema']}' " f"but the loaded schema has id '{self.schema.id}'" ) - # if resource name differs from schema class name, keep mapping - class_name = resource_schema["x-linkml-source"] - if referenced_resource_name != class_name: - self._renaming[class_name] = referenced_resource_name - referenced_class_names.add(class_name) + # if openapi schema name differs from linkml element name, add mapping + linkml_element_name = data_schema["x-linkml-source"] + if endpoint_reference_name != linkml_element_name: + self._renaming[linkml_element_name] = endpoint_reference_name + directly_required_linkml_elements.add(linkml_element_name) json_schema = JsonSchemaGenerator( - self.schemaview.schema, include_null=False, top_class=class_name + self.schemaview.schema, include_null=False, top_class=linkml_element_name ).generate() json_schema_classes = json.loads(json_schema.to_json())["$defs"] - class_schemas = class_schemas | json_schema_classes - class_schemas = self._sanitize_schemas(class_schemas, referenced_class_names) + all_req_data_schemas = all_req_data_schemas | json_schema_classes + sanitized_data_schemas = self._sanitize_schemas(all_req_data_schemas, directly_required_linkml_elements) # title always duplicates the schema dict key, so it is redundant in components/schemas - for class_schema in class_schemas.values(): - class_schema.pop("title", None) - class_schemas = self._fix_openapi_spec(class_schemas) + for data_schema in sanitized_data_schemas.values(): + data_schema.pop("title", None) + sanitized_data_schemas = self._fix_openapi_spec(sanitized_data_schemas) if self._renaming: - class_schemas = self._rename(class_schemas) - self._template["components"]["schemas"] = class_schemas + sanitized_data_schemas = self._rename(sanitized_data_schemas) + self._template["components"]["schemas"] = sanitized_data_schemas # Validate the generated output against the OpenAPI specification validate(self._template, cls=validator_class) return yaml.dump(self._template, sort_keys=False) def printout_template(self) -> str: - """Return a generic OpenAPI template pre-filled with the first class of the schema.""" - class_names = self.schemaview.all_classes().keys() - first_class = next(iter(class_names)) - if re.search(r"[ :\d]", first_class): - first_class = f'"{first_class}"' - return openapi_generic_template.format(schema_id=self.schema.id, schema_class=first_class) + """Return a generic OpenAPI template pre-filled with the first class/type of the LinkML schema.""" + element_names = self.schemaview.all_classes().keys() + if not element_names: + element_names = self.schemaview.all_types().keys() + if not element_names: + # if no realistic schema and data can be used, put some placeholders + return openapi_generic_template.format( + linkml_schema_id="", data_schema="" + ) + first_element = next(iter(element_names)) + if re.search(r"[ :\d]", first_element): + first_element = f'"{first_element}"' + return openapi_generic_template.format(linkml_schema_id=self.schema.id, data_schema=first_element) @shared_arguments(OpenApiGenerator) @@ -287,12 +294,15 @@ def printout_template(self) -> str: def cli(yamlfile, template, **args): """Generate an OpenAPI v3.0.3 spec with resources modelled with LinkML. If no OpenAPI template is provided, - a generic one with placeholders for all the classes in the schema is printed out.""" - # if no template provided, print out a generic one with all the classes of the schema + a generic one with one exemplary class/type schema is printed out.""" + # if no template provided, print out a generic one if not template: print(OpenApiGenerator(yamlfile, **args).printout_template()) return - print(OpenApiGenerator(yamlfile, **args).serialize(template_file=template, **args), end="") + print( + OpenApiGenerator(yamlfile, **args).serialize(template_file=template, **args), + end="", + ) if __name__ == "__main__": From 0e8a32229348fa6fbe9d42e904acebed85a055cb Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Tue, 14 Jul 2026 20:00:26 +0200 Subject: [PATCH 43/72] feat(openapigen): support LinkML types as OpenAPI schemas The OpenAPI generator now accepts endpoints that reference LinkML types (via x-linkml-source in the template) alongside classes. When a referenced source is a TypeDefinition, the generator builds a JSON Schema directly from the type's base type and constraints (pattern, minimum, maximum, const, description) instead of delegating to JsonSchemaGenerator with top_class (which only handles classes). A new _generate_type_schema method converts a TypeDefinition to an OpenAPI-compatible JSON Schema dict, reusing the json_schema_types mapping from the JSON Schema generator for the base-type conversion. The type name is added to the reference set before sanitization, so it survives _sanitize_schemas and appears in components/schemas. Signed-off-by: Silvano Cirujano Cuesta --- .../src/linkml/generators/openapigen.py | 39 +++++++++++++++++-- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/packages/linkml/src/linkml/generators/openapigen.py b/packages/linkml/src/linkml/generators/openapigen.py index 3fed6df6a2..97dd3f9640 100644 --- a/packages/linkml/src/linkml/generators/openapigen.py +++ b/packages/linkml/src/linkml/generators/openapigen.py @@ -10,12 +10,12 @@ from openapi_spec_validator import OpenAPIV30SpecValidator, validate from linkml._version import __version__ -from linkml.generators.jsonschemagen import JsonSchemaGenerator +from linkml.generators.jsonschemagen import JsonSchemaGenerator, json_schema_types from linkml.utils.generator import Generator, shared_arguments openapi_generic_template = """openapi: 3.0.3 # This is a valid OpenAPI template to be used by the LinkML OpenAPI generator. -# It adds one (random) class of the schema as an example. +# It adds one (random) class or type of the LinkML schema as an example. # Please adapt it to your needs. # See more information in the online documentation: # https://linkml.io/linkml/generators/openapi.html @@ -98,8 +98,13 @@ def _find_referenced_schemas(self) -> set[str]: if "requestBody" in req_spec and "content" in req_spec["requestBody"]: for content_spec in req_spec["requestBody"]["content"].values(): if "$ref" in content_spec["schema"]: - class_name = content_spec["schema"]["$ref"].removeprefix("#/components/schemas/") - result.add(class_name) + resource_name = content_spec["schema"]["$ref"].removeprefix("#/components/schemas/") + result.add(resource_name) + if "parameters" in req_spec: + for param_spec in req_spec["parameters"]: + if "$ref" in param_spec["schema"]: + resource_name = param_spec["schema"]["$ref"].removeprefix("#/components/schemas/") + result.add(resource_name) if "responses" in req_spec: for response in req_spec["responses"].values(): if "content" in response: @@ -198,6 +203,29 @@ def _sanitize_schemas(self, data_schemas: dict, endpoint_referenced_schemas: set self._find_references(data_schema, referenced_schemas) return data_schemas + def _generate_type_schema(self, type_name: str) -> dict: + """Build an OpenAPI-compatible JSON Schema for a LinkML TypeDefinition.""" + type_def = self.schemaview.get_type(type_name) + typ, fmt = json_schema_types.get(type_def.base.lower(), ("string", None)) + schema: dict = {} + if typ: + schema["type"] = str(typ) + if fmt: + schema["format"] = str(fmt) + if type_def.pattern: + schema["pattern"] = str(type_def.pattern) + if type_def.minimum_value is not None: + schema["minimum"] = str(type_def.minimum_value) + if type_def.maximum_value is not None: + schema["maximum"] = str(type_def.maximum_value) + if type_def.equals_string is not None: + schema["const"] = str(type_def.equals_string) + if type_def.equals_number is not None: + schema["const"] = str(type_def.equals_number) + if type_def.description: + schema["description"] = str(type_def.description) + return schema + def serialize(self, template_file: str = "", **kwargs) -> str: """Generate an OpenAPI v3.0.3 spec from ``template_file`` and the loaded LinkML schema.""" if not template_file: @@ -250,6 +278,9 @@ def serialize(self, template_file: str = "", **kwargs) -> str: if endpoint_reference_name != linkml_element_name: self._renaming[linkml_element_name] = endpoint_reference_name directly_required_linkml_elements.add(linkml_element_name) + if linkml_element_name in self.schemaview.all_types().keys(): + all_req_data_schemas[linkml_element_name] = self._generate_type_schema(linkml_element_name) + continue json_schema = JsonSchemaGenerator( self.schemaview.schema, include_null=False, top_class=linkml_element_name ).generate() From 6ad45d5dcbf7d02e94b95df5eedcc7873d3d1d95 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Wed, 15 Jul 2026 14:43:29 +0200 Subject: [PATCH 44/72] test(openapigen): test linkml types as openapi schema Signed-off-by: Silvano Cirujano Cuesta --- .../input/openapi/spec-types.openapi.yaml | 23 +++++++++++++++++ .../openapi/test_schema_type_constraints.yaml | 25 +++++++++++++++++++ .../linkml/test_generators/test_openapigen.py | 16 ++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 tests/linkml/test_generators/input/openapi/spec-types.openapi.yaml create mode 100644 tests/linkml/test_generators/input/openapi/test_schema_type_constraints.yaml diff --git a/tests/linkml/test_generators/input/openapi/spec-types.openapi.yaml b/tests/linkml/test_generators/input/openapi/spec-types.openapi.yaml new file mode 100644 index 0000000000..3fcda9c57f --- /dev/null +++ b/tests/linkml/test_generators/input/openapi/spec-types.openapi.yaml @@ -0,0 +1,23 @@ +openapi: 3.0.3 +info: + title: LinkML type constraints test + version: 1.0.0 +servers: + - url: https://example.org/ +paths: + /api/code: + get: + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '#/components/schemas/CodeStringRef' + +components: + schemas: + CodeStringRef: + type: object + x-linkml-schema: https://w3id.org/linkml/tests/type_constraints + x-linkml-source: CodeString diff --git a/tests/linkml/test_generators/input/openapi/test_schema_type_constraints.yaml b/tests/linkml/test_generators/input/openapi/test_schema_type_constraints.yaml new file mode 100644 index 0000000000..11941cfc33 --- /dev/null +++ b/tests/linkml/test_generators/input/openapi/test_schema_type_constraints.yaml @@ -0,0 +1,25 @@ +id: https://w3id.org/linkml/tests/type_constraints +name: type_constraints +default_prefix: type_constraints +imports: + - linkml:types + +types: + CodeString: + base: str + pattern: "^[A-Z]{2,10}$" + description: A 2-10 character uppercase code + + PositiveInt: + base: int + minimum_value: 1 + maximum_value: 9999 + description: A positive integer between 1 and 9999 + +classes: + WithCode: + description: A thing with a code + attributes: + code: + range: CodeString + required: true diff --git a/tests/linkml/test_generators/test_openapigen.py b/tests/linkml/test_generators/test_openapigen.py index 6a6b528493..c3b12ecb72 100644 --- a/tests/linkml/test_generators/test_openapigen.py +++ b/tests/linkml/test_generators/test_openapigen.py @@ -114,6 +114,22 @@ def test_missing_schema_declaration_raises(tmp_path, kitchen_sink_path): OpenApiGenerator(kitchen_sink_path).serialize(str(template)) +def test_openapi_type_constraints(input_path): + """Test that LinkML types with constraints (e.g., pattern) are properly generated in the spec.""" + schema_path = str(input_path("openapi/test_schema_type_constraints.yaml")) + head_path = str(input_path("openapi/spec-types.openapi.yaml")) + spec = yaml.safe_load(OpenApiGenerator(schema_path).serialize(head_path)) + schemas = spec["components"]["schemas"] + # the type schema is exposed under the template's resource name + code_str = schemas["CodeStringRef"] + assert code_str["type"] == "string" + assert code_str["pattern"] == "^[A-Z]{2,10}$" + assert code_str["description"] == "A 2-10 character uppercase code" + assert validate(spec, cls=OpenAPIV30SpecValidator) is None + for schema in schemas.values(): + assert "#/$defs/" not in str(schema) + + def test_renaming(input_path, kitchen_sink_path): """Test that resource names differing from LinkML class names are renamed throughout the spec.""" head_path = str(input_path("openapi/spec-renaming.openapi.yaml")) From 05f7e917f0e71112b1398f6252026b224f6bb9f3 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Wed, 15 Jul 2026 15:54:09 +0200 Subject: [PATCH 45/72] feat(openapigen): avoid template modification yaml.safe_load -> yaml.dump roundtripping using PyYAML modifies the style of the provide template and also removes comments. To avoid it, everything except `components/schema` in the template will be handled as text instead of YAML. Signed-off-by: Silvano Cirujano Cuesta --- .../src/linkml/generators/openapigen.py | 34 ++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/packages/linkml/src/linkml/generators/openapigen.py b/packages/linkml/src/linkml/generators/openapigen.py index 97dd3f9640..88556d9ffa 100644 --- a/packages/linkml/src/linkml/generators/openapigen.py +++ b/packages/linkml/src/linkml/generators/openapigen.py @@ -3,11 +3,13 @@ import json import os import re +import textwrap from dataclasses import dataclass, field import click import yaml from openapi_spec_validator import OpenAPIV30SpecValidator, validate +from yaml import MappingNode, ScalarNode from linkml._version import __version__ from linkml.generators.jsonschemagen import JsonSchemaGenerator, json_schema_types @@ -226,12 +228,30 @@ def _generate_type_schema(self, type_name: str) -> dict: schema["description"] = str(type_def.description) return schema + def _find_schemas_line(self, template_text: str) -> int: + """Return the 0-indexed line number of the ``schemas`` key under ``components``.""" + doc = yaml.compose(template_text) + if not isinstance(doc, MappingNode): + raise ValueError("OpenAPI template is not a YAML mapping") + components_node = None + for key, value in doc.value: + if isinstance(key, ScalarNode) and key.value == "components": + components_node = value + break + if not isinstance(components_node, MappingNode): + raise ValueError("OpenAPI template is missing a valid 'components' section") + for key, _ in components_node.value: + if isinstance(key, ScalarNode) and key.value == "schemas": + return key.start_mark.line + raise ValueError("OpenAPI template is missing 'schemas' section under 'components'") + def serialize(self, template_file: str = "", **kwargs) -> str: """Generate an OpenAPI v3.0.3 spec from ``template_file`` and the loaded LinkML schema.""" if not template_file: raise ValueError("An OpenAPI template file is required") with open(template_file) as tf: - self._template = yaml.safe_load(tf) + template_text = tf.read() + self._template = yaml.safe_load(template_text) # Determine the expected OpenAPI version from the active output format format_name = getattr(self, "format", self.valid_formats[0]) or self.valid_formats[0] expected_version = self._openapi_versions.get(format_name) @@ -293,10 +313,16 @@ def serialize(self, template_file: str = "", **kwargs) -> str: sanitized_data_schemas = self._fix_openapi_spec(sanitized_data_schemas) if self._renaming: sanitized_data_schemas = self._rename(sanitized_data_schemas) - self._template["components"]["schemas"] = sanitized_data_schemas + # Replace the existing schemas section in the text template with the generated schemas + lines = template_text.splitlines(keepends=True) + schemas_line_idx = self._find_schemas_line(template_text) + text_before_schemas = "".join(lines[:schemas_line_idx]) + schemas_yaml = yaml.dump(sanitized_data_schemas, sort_keys=False) + indented_schemas = textwrap.indent(schemas_yaml, " ") + result = text_before_schemas + " schemas:\n" + indented_schemas # Validate the generated output against the OpenAPI specification - validate(self._template, cls=validator_class) - return yaml.dump(self._template, sort_keys=False) + validate(yaml.safe_load(result), cls=validator_class) + return result def printout_template(self) -> str: """Return a generic OpenAPI template pre-filled with the first class/type of the LinkML schema.""" From ef2909bd3c19d4ed061ba9f8432df812f03dff2e Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Thu, 30 Jul 2026 08:00:20 +0200 Subject: [PATCH 46/72] fix(openapigen): more replace raw schema with schemaview provided one Missed spots where the schemaview provided schema should be used instead of the raw one. Signed-off-by: Silvano Cirujano Cuesta --- packages/linkml/src/linkml/generators/openapigen.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/linkml/src/linkml/generators/openapigen.py b/packages/linkml/src/linkml/generators/openapigen.py index 88556d9ffa..d3e01bf5e1 100644 --- a/packages/linkml/src/linkml/generators/openapigen.py +++ b/packages/linkml/src/linkml/generators/openapigen.py @@ -287,11 +287,11 @@ def serialize(self, template_file: str = "", **kwargs) -> str: ) data_schema = openapi_schemas[endpoint_reference_name] # validate that linkml schema id is correct - if data_schema["x-linkml-schema"] != self.schema.id: + if data_schema["x-linkml-schema"] != self.schemaview.schema.id: raise ValueError( f"Template data schema '{endpoint_reference_name}' declares " f"x-linkml-schema '{data_schema['x-linkml-schema']}' " - f"but the loaded schema has id '{self.schema.id}'" + f"but the loaded schema has id '{self.schemaview.schema.id}'" ) # if openapi schema name differs from linkml element name, add mapping linkml_element_name = data_schema["x-linkml-source"] @@ -337,7 +337,7 @@ def printout_template(self) -> str: first_element = next(iter(element_names)) if re.search(r"[ :\d]", first_element): first_element = f'"{first_element}"' - return openapi_generic_template.format(linkml_schema_id=self.schema.id, data_schema=first_element) + return openapi_generic_template.format(linkml_schema_id=self.schemaview.schema.id, data_schema=first_element) @shared_arguments(OpenApiGenerator) From 4b3ba2f889ced75f1f28a6577e9123f2dc636eb9 Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Thu, 30 Jul 2026 09:15:13 +0200 Subject: [PATCH 47/72] refactor(openapigen): improve code readability Certain variable names were not clear enough. Renaming them to have more clarity on different namespaces (OpenAPI vs. LinkML). Signed-off-by: Silvano Cirujano Cuesta --- .../src/linkml/generators/openapigen.py | 275 ++++++++++-------- .../input/openapi/spec-fixed.openapi.yaml | 22 ++ .../linkml/test_generators/test_openapigen.py | 7 + 3 files changed, 181 insertions(+), 123 deletions(-) create mode 100644 tests/linkml/test_generators/input/openapi/spec-fixed.openapi.yaml diff --git a/packages/linkml/src/linkml/generators/openapigen.py b/packages/linkml/src/linkml/generators/openapigen.py index d3e01bf5e1..e6510d785e 100644 --- a/packages/linkml/src/linkml/generators/openapigen.py +++ b/packages/linkml/src/linkml/generators/openapigen.py @@ -5,10 +5,13 @@ import re import textwrap from dataclasses import dataclass, field +from typing import cast import click import yaml -from openapi_spec_validator import OpenAPIV30SpecValidator, validate +from openapi_spec_validator import OpenAPIV30SpecValidator +from openapi_spec_validator import validate as openapi_validate +from openapi_spec_validator.validation.validators import SpecValidator as OaSpecValidator from yaml import MappingNode, ScalarNode from linkml._version import __version__ @@ -47,6 +50,7 @@ schemas: # this resource name can differ from the name in the LinkML schema # it must only match the corresponding endpoint `$ref` references + # it creates a mapping between names in OpenAPI and LinkML {data_schema}: type: object description: Resource schema to be generated from the LinkML data model. @@ -76,7 +80,6 @@ class OpenApiGenerator(Generator): uses_schemaloader = False _template: dict = field(default_factory=dict, init=False, repr=False) - _renaming: dict[str, str] = field(default_factory=dict, init=False, repr=False) # Mapping of valid_formats entries to OpenAPI version strings. # Extend this dict when adding support for additional OpenAPI versions. _openapi_versions: dict[str, str] = field( @@ -86,12 +89,34 @@ class OpenApiGenerator(Generator): ) # Mapping of OpenAPI version strings to validators from openapi-spec-validator. # Extend this dict when adding support for additional OpenAPI versions. - _openapi_validators: dict[str, type] = field( + _openapi_validators: dict[str, type[OaSpecValidator]] = field( default_factory=lambda: {"3.0.3": OpenAPIV30SpecValidator}, init=False, repr=False, ) + def _validate_oa_template(self, oa_validator_class: type[OaSpecValidator], expected_version: str, format_name: str): + """Validate the OpenAPI template""" + # Validate that the template declares the expected OpenAPI version + declared_version = self._template.get("openapi") + if declared_version != expected_version: + raise ValueError( + f"Template OpenAPI version is '{declared_version}', " + f"but format '{format_name}' requires version '{expected_version}'" + ) + # Validate the input template against the OpenAPI specification. + # This also catches dangling $ref targets in endpoints. + openapi_validate(self._template, cls=oa_validator_class) + # Validation: every template schema must declare this LinkML schema. + if "components" in self._template and "schemas" in self._template["components"]: + for name, schema in self._template["components"]["schemas"].items(): + if schema["x-linkml-schema"] != self.schemaview.schema.id: + raise ValueError( + f"Template data schema '{name}' declares " + f"x-linkml-schema '{schema['x-linkml-schema']}' " + f"but the loaded schema has id '{self.schemaview.schema.id}'" + ) + def _find_referenced_schemas(self) -> set[str]: """Return the set of resource names referenced by the template's endpoints.""" result = set() @@ -116,7 +141,41 @@ def _find_referenced_schemas(self) -> set[str]: result.add(resource_name) return result - def _fix_openapi_spec(self, element: dict | list) -> dict | list | None: + def _generate_type_schema(self, type_name: str) -> dict: + """Build an OpenAPI-compatible JSON Schema for a LinkML TypeDefinition.""" + type_def = self.schemaview.get_type(type_name) + typ, fmt = json_schema_types.get(type_def.base.lower(), ("string", None)) + schema: dict = {} + if typ: + schema["type"] = str(typ) + if fmt: + schema["format"] = str(fmt) + if type_def.pattern: + schema["pattern"] = str(type_def.pattern) + if type_def.minimum_value is not None: + schema["minimum"] = str(type_def.minimum_value) + if type_def.maximum_value is not None: + schema["maximum"] = str(type_def.maximum_value) + if type_def.equals_string is not None: + schema["const"] = str(type_def.equals_string) + if type_def.equals_number is not None: + schema["const"] = str(type_def.equals_number) + if type_def.description: + schema["description"] = str(type_def.description) + return schema + + def _find_references(self, element: dict | list, referenced_data_schemas: set[str]) -> None: + """Recursively collect all ``$ref`` target names from ``element`` into ``referenced_data_schemas``.""" + if isinstance(element, dict): + if "$ref" in element: + referenced_data_schemas.add(element["$ref"].replace("#/$defs/", "")) + for value in element.values(): + self._find_references(value, referenced_data_schemas) + elif isinstance(element, list): + for item in element: + self._find_references(item, referenced_data_schemas) + + def _fix_openapi_spec(self, element: dict | list) -> dict | list: """ Transform JSON Schema constructs into OpenAPI v3.0.3 compatible forms: @@ -148,85 +207,63 @@ def _fix_openapi_spec(self, element: dict | list) -> dict | list | None: fixed_element.append(item) return fixed_element - def _rename(self, element: dict | list) -> dict | list | None: + def _rename(self, name_map: dict[str, str], element: dict | list) -> dict | list: """ If the resource names do not correspond the data schema names, then some renaming is needed so that OpenAPI resource names are properly referenced throughout the whole OpenAPI file. """ - renamed_element = None if isinstance(element, dict): - renamed_element = {} + renamed_element: dict | list = {} for key, value in element.items(): - if key in self._renaming: - key = self._renaming[key] + if key in name_map: + key = name_map[key] if isinstance(value, dict | list): - value = self._rename(value) + value = self._rename(name_map, value) elif isinstance(value, str) and value.startswith("#/components/schemas/"): data_schema_name = value[len("#/components/schemas/") :] - if data_schema_name in self._renaming: - value = value.replace(data_schema_name, self._renaming[data_schema_name]) + if data_schema_name in name_map: + value = value.replace(data_schema_name, name_map[data_schema_name]) renamed_element[key] = value elif isinstance(element, list): - renamed_element = [] + renamed_element: dict | list = [] for item in element: if isinstance(item, dict | list): - item = self._rename(item) + item = self._rename(name_map, item) elif isinstance(item, str) and item.startswith("#/components/schemas/"): data_schema_name = item[len("#/components/schemas/") :] - if data_schema_name in self._renaming: - item = item.replace(data_schema_name, self._renaming[data_schema_name]) + if data_schema_name in name_map: + item = item.replace(data_schema_name, name_map[data_schema_name]) renamed_element.append(item) + else: + raise TypeError(f"Unexpected type '{type(element)}', only 'dict' and 'list' supported.") return renamed_element - def _find_references(self, element: dict | list, referenced_data_schemas: set[str]) -> None: - """Recursively collect all ``$ref`` target names from ``element`` into ``referenced_data_schemas``.""" - if isinstance(element, dict): - if "$ref" in element: - referenced_data_schemas.add(element["$ref"].replace("#/$defs/", "")) - for value in element.values(): - self._find_references(value, referenced_data_schemas) - elif isinstance(element, list): - for item in element: - self._find_references(item, referenced_data_schemas) - - def _sanitize_schemas(self, data_schemas: dict, endpoint_referenced_schemas: set[str]) -> dict: - """Remove schemas not transitively reachable from any endpoint-referenced data schema.""" - referenced_schemas = endpoint_referenced_schemas.copy() - for data_schema in data_schemas.values(): - self._find_references(data_schema, referenced_schemas) - while set(data_schemas.keys()).difference(referenced_schemas): - data_schema_names = list(data_schemas.keys()) - for data_schema_name in data_schema_names: - if data_schema_name not in referenced_schemas: - del data_schemas[data_schema_name] - referenced_schemas = endpoint_referenced_schemas.copy() - for data_schema in data_schemas.values(): - self._find_references(data_schema, referenced_schemas) - return data_schemas - - def _generate_type_schema(self, type_name: str) -> dict: - """Build an OpenAPI-compatible JSON Schema for a LinkML TypeDefinition.""" - type_def = self.schemaview.get_type(type_name) - typ, fmt = json_schema_types.get(type_def.base.lower(), ("string", None)) - schema: dict = {} - if typ: - schema["type"] = str(typ) - if fmt: - schema["format"] = str(fmt) - if type_def.pattern: - schema["pattern"] = str(type_def.pattern) - if type_def.minimum_value is not None: - schema["minimum"] = str(type_def.minimum_value) - if type_def.maximum_value is not None: - schema["maximum"] = str(type_def.maximum_value) - if type_def.equals_string is not None: - schema["const"] = str(type_def.equals_string) - if type_def.equals_number is not None: - schema["const"] = str(type_def.equals_number) - if type_def.description: - schema["description"] = str(type_def.description) - return schema + def _sanitize_schemas( + self, name_map: dict[str, str], openapi_schemas: dict, endpoint_ref_linkml_names: set[str] + ) -> dict: + """ + Prune unreachable schemas, remove redundant metadata, convert JSON Schema constructs + to OpenAPI 3.0.3 compat, and apply any OpenAPI↔LinkML name renames. + """ + referenced_schemas = endpoint_ref_linkml_names.copy() + for openapi_schema in openapi_schemas.values(): + self._find_references(openapi_schema, referenced_schemas) + while set(openapi_schemas.keys()).difference(referenced_schemas): + openapi_schema_names = list(openapi_schemas.keys()) + for openapi_schema_name in openapi_schema_names: + if openapi_schema_name not in referenced_schemas: + del openapi_schemas[openapi_schema_name] + referenced_schemas = endpoint_ref_linkml_names.copy() + for openapi_schema in openapi_schemas.values(): + self._find_references(openapi_schema, referenced_schemas) + # title always duplicates the schema dict key, so it is redundant in components/schemas + for openapi_schema in openapi_schemas.values(): + openapi_schema.pop("title", None) + openapi_schemas = cast(dict, self._fix_openapi_spec(openapi_schemas)) + if name_map: + openapi_schemas = cast(dict, self._rename(name_map, openapi_schemas)) + return openapi_schemas def _find_schemas_line(self, template_text: str) -> int: """Return the 0-indexed line number of the ``schemas`` key under ``components``.""" @@ -247,81 +284,73 @@ def _find_schemas_line(self, template_text: str) -> int: def serialize(self, template_file: str = "", **kwargs) -> str: """Generate an OpenAPI v3.0.3 spec from ``template_file`` and the loaded LinkML schema.""" + # load the template if not template_file: raise ValueError("An OpenAPI template file is required") with open(template_file) as tf: template_text = tf.read() self._template = yaml.safe_load(template_text) - # Determine the expected OpenAPI version from the active output format + # determine the expected OpenAPI version from the active output format format_name = getattr(self, "format", self.valid_formats[0]) or self.valid_formats[0] expected_version = self._openapi_versions.get(format_name) if expected_version is None: raise ValueError(f"Unsupported output format '{format_name}'") - validator_class = self._openapi_validators.get(expected_version) - if validator_class is None: + + # get the corresponding OpenAPI validator + oa_validator_class = self._openapi_validators.get(expected_version) + if oa_validator_class is None: raise ValueError(f"No validator available for OpenAPI version {expected_version}") - # Validate that the template declares the expected OpenAPI version - declared_version = self._template.get("openapi") - if declared_version != expected_version: - raise ValueError( - f"Template OpenAPI version is '{declared_version}', " - f"but format '{format_name}' requires version '{expected_version}'" - ) - # Validate the input template against the OpenAPI specification - validate(self._template, cls=validator_class) - if not isinstance(self._template.get("paths"), dict): - raise ValueError("OpenAPI template is missing required 'paths' section") - if not isinstance(self._template.get("components"), dict): - raise ValueError("OpenAPI template is missing required 'components' section") - endpoint_ref_schema_names = self._find_referenced_schemas() # schemas referenced by OpenAPI endpoint(s) - openapi_schemas = self._template["components"]["schemas"] # data schemas provided by the template - all_req_data_schemas = {} # data schemas directly or transitively required by the API - self._renaming = {} # openapi <-> linkml renaming map - directly_required_linkml_elements: set[str] = set() # LinkML class/type names of directly-referenced schemas - # get only the data schemas that are really referenced from an endpoint - for endpoint_reference_name in endpoint_ref_schema_names: - if endpoint_reference_name not in openapi_schemas: - raise KeyError( - f"data schema '{endpoint_reference_name}' referenced in one of the endpoints " - "does not have a schema declaration" - ) - data_schema = openapi_schemas[endpoint_reference_name] - # validate that linkml schema id is correct - if data_schema["x-linkml-schema"] != self.schemaview.schema.id: - raise ValueError( - f"Template data schema '{endpoint_reference_name}' declares " - f"x-linkml-schema '{data_schema['x-linkml-schema']}' " - f"but the loaded schema has id '{self.schemaview.schema.id}'" - ) - # if openapi schema name differs from linkml element name, add mapping - linkml_element_name = data_schema["x-linkml-source"] - if endpoint_reference_name != linkml_element_name: - self._renaming[linkml_element_name] = endpoint_reference_name - directly_required_linkml_elements.add(linkml_element_name) - if linkml_element_name in self.schemaview.all_types().keys(): - all_req_data_schemas[linkml_element_name] = self._generate_type_schema(linkml_element_name) - continue - json_schema = JsonSchemaGenerator( - self.schemaview.schema, include_null=False, top_class=linkml_element_name - ).generate() - json_schema_classes = json.loads(json_schema.to_json())["$defs"] - all_req_data_schemas = all_req_data_schemas | json_schema_classes - sanitized_data_schemas = self._sanitize_schemas(all_req_data_schemas, directly_required_linkml_elements) - # title always duplicates the schema dict key, so it is redundant in components/schemas - for data_schema in sanitized_data_schemas.values(): - data_schema.pop("title", None) - sanitized_data_schemas = self._fix_openapi_spec(sanitized_data_schemas) - if self._renaming: - sanitized_data_schemas = self._rename(sanitized_data_schemas) - # Replace the existing schemas section in the text template with the generated schemas + # validate the OpenAPI template before further processing + self._validate_oa_template(oa_validator_class, expected_version, format_name) + # if no schemas to instantiate, return the template itself + if ( + "components" not in self._template + or "schemas" not in self._template["components"] + or not self._template["components"]["schemas"] + ): + return template_text + + # Two namespaces exist: OpenAPI schema names (from the template's + # components/schemas keys) and LinkML element names (from the LinkML schema). + # Every schema has a name in both namespaces and the template declares the + # mapping between them in the x-linkml-schema values; they may be identical or differ. + # When they differ, name_map records the synonym (LinkML element name -> OpenAPI schema name). + endpoint_ref_openapi_names = self._find_referenced_schemas() # OpenAPI names referenced by endpoints + openapi_schemas = self._template["components"]["schemas"] # schemas provided by the OpenAPI template + # collect the LinkML names referenced by endpoints (seed for sanitizing below) + endpoint_ref_linkml_names: set[str] = { + openapi_schemas[n]["x-linkml-source"] for n in endpoint_ref_openapi_names + } + # when OpenAPI and LinkML names differ, record the synonym for later renaming + name_map: dict[str, str] = { + openapi_schemas[n]["x-linkml-source"]: n + for n in endpoint_ref_openapi_names + if n != openapi_schemas[n]["x-linkml-source"] + } + + # JsonSchemaGenerator.generate() emits every class/enum of the LinkML schema into + # $defs. LinkML types are not part of $defs and are generated separately. + # all_req_schemas contains all directly or transitively required schemas from + # LinkML classes and types + json_schema = JsonSchemaGenerator(self.schemaview.schema, include_null=False).generate() + all_req_schemas: dict[str, dict] = json.loads(json_schema.to_json())["$defs"] + for linkml_name in endpoint_ref_linkml_names: + if linkml_name in self.schemaview.all_types(): + all_req_schemas[linkml_name] = self._generate_type_schema(linkml_name) + + # sanitize schemas not transitively reachable from any endpoint-referenced schema + sanitized_data_schemas = self._sanitize_schemas(name_map, all_req_schemas, endpoint_ref_linkml_names) + + # instantiate the real OpenAPI YAML replacing the schema placeholders lines = template_text.splitlines(keepends=True) schemas_line_idx = self._find_schemas_line(template_text) text_before_schemas = "".join(lines[:schemas_line_idx]) schemas_yaml = yaml.dump(sanitized_data_schemas, sort_keys=False) indented_schemas = textwrap.indent(schemas_yaml, " ") result = text_before_schemas + " schemas:\n" + indented_schemas - # Validate the generated output against the OpenAPI specification - validate(yaml.safe_load(result), cls=validator_class) + + # validate the generated output against the OpenAPI specification before returning + openapi_validate(yaml.safe_load(result), cls=oa_validator_class) return result def printout_template(self) -> str: diff --git a/tests/linkml/test_generators/input/openapi/spec-fixed.openapi.yaml b/tests/linkml/test_generators/input/openapi/spec-fixed.openapi.yaml new file mode 100644 index 0000000000..db0dffd41f --- /dev/null +++ b/tests/linkml/test_generators/input/openapi/spec-fixed.openapi.yaml @@ -0,0 +1,22 @@ +openapi: 3.0.3 +info: + title: LinkML tests + version: 1.0.0 +servers: + - url: https://example.org/ +security: + - PayloadSignature: [] +paths: + /api/endpoint1: + post: + security: + - PayloadSignature: [] + requestBody: + required: true + content: + application/json: + schema: + type: object + responses: + "200": + description: Success diff --git a/tests/linkml/test_generators/test_openapigen.py b/tests/linkml/test_generators/test_openapigen.py index c3b12ecb72..4d33b95364 100644 --- a/tests/linkml/test_generators/test_openapigen.py +++ b/tests/linkml/test_generators/test_openapigen.py @@ -34,6 +34,13 @@ def test_openapi_missing_template(kitchen_sink_path): OpenApiGenerator(kitchen_sink_path).serialize() +def test_openapi_fixed_template(input_path, kitchen_sink_path): + """Test that serialize raises ValueError when no template file is provided.""" + head_path = str(input_path("openapi/spec-fixed.openapi.yaml")) + oa_spec = OpenApiGenerator(kitchen_sink_path).serialize(head_path) + assert open(head_path).read() == oa_spec + + def test_openapi_spec_no_defs_references(openapi_spec): """Test that all $defs references are converted to components/schemas.""" for schema in openapi_spec["components"]["schemas"].values(): From 49fd032f6588b73a535edf6aa14f66a3ad0491dc Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Sat, 8 Aug 2026 10:32:31 +0200 Subject: [PATCH 48/72] fix: minor review comments Use widely used `OAS` acronym instead of `OA`. Add clarifying header comments to test input files. Improve error reporting on malformed OpenAPI template. --- .../linkml/src/linkml/generators/openapigen.py | 16 ++++++++++------ ...traints.yaml => schema_type_constraints.yaml} | 1 + .../input/openapi/spec-fixed.openapi.yaml | 2 ++ .../input/openapi/spec-types.openapi.yaml | 1 + tests/linkml/test_generators/test_openapigen.py | 2 +- 5 files changed, 15 insertions(+), 7 deletions(-) rename tests/linkml/test_generators/input/openapi/{test_schema_type_constraints.yaml => schema_type_constraints.yaml} (92%) diff --git a/packages/linkml/src/linkml/generators/openapigen.py b/packages/linkml/src/linkml/generators/openapigen.py index e6510d785e..020bd7cf4f 100644 --- a/packages/linkml/src/linkml/generators/openapigen.py +++ b/packages/linkml/src/linkml/generators/openapigen.py @@ -95,7 +95,9 @@ class OpenApiGenerator(Generator): repr=False, ) - def _validate_oa_template(self, oa_validator_class: type[OaSpecValidator], expected_version: str, format_name: str): + def _validate_oad_template( + self, oad_validator_class: type[OaSpecValidator], expected_version: str, format_name: str + ): """Validate the OpenAPI template""" # Validate that the template declares the expected OpenAPI version declared_version = self._template.get("openapi") @@ -106,10 +108,12 @@ def _validate_oa_template(self, oa_validator_class: type[OaSpecValidator], expec ) # Validate the input template against the OpenAPI specification. # This also catches dangling $ref targets in endpoints. - openapi_validate(self._template, cls=oa_validator_class) + openapi_validate(self._template, cls=oad_validator_class) # Validation: every template schema must declare this LinkML schema. if "components" in self._template and "schemas" in self._template["components"]: for name, schema in self._template["components"]["schemas"].items(): + if "x-linkml-schema" not in schema: + raise KeyError(f"Template data schema '{name}' is missing required 'x-linkml-schema'") if schema["x-linkml-schema"] != self.schemaview.schema.id: raise ValueError( f"Template data schema '{name}' declares " @@ -297,11 +301,11 @@ def serialize(self, template_file: str = "", **kwargs) -> str: raise ValueError(f"Unsupported output format '{format_name}'") # get the corresponding OpenAPI validator - oa_validator_class = self._openapi_validators.get(expected_version) - if oa_validator_class is None: + oad_validator_class = self._openapi_validators.get(expected_version) + if oad_validator_class is None: raise ValueError(f"No validator available for OpenAPI version {expected_version}") # validate the OpenAPI template before further processing - self._validate_oa_template(oa_validator_class, expected_version, format_name) + self._validate_oad_template(oad_validator_class, expected_version, format_name) # if no schemas to instantiate, return the template itself if ( "components" not in self._template @@ -350,7 +354,7 @@ def serialize(self, template_file: str = "", **kwargs) -> str: result = text_before_schemas + " schemas:\n" + indented_schemas # validate the generated output against the OpenAPI specification before returning - openapi_validate(yaml.safe_load(result), cls=oa_validator_class) + openapi_validate(yaml.safe_load(result), cls=oad_validator_class) return result def printout_template(self) -> str: diff --git a/tests/linkml/test_generators/input/openapi/test_schema_type_constraints.yaml b/tests/linkml/test_generators/input/openapi/schema_type_constraints.yaml similarity index 92% rename from tests/linkml/test_generators/input/openapi/test_schema_type_constraints.yaml rename to tests/linkml/test_generators/input/openapi/schema_type_constraints.yaml index 11941cfc33..029f5c7ee6 100644 --- a/tests/linkml/test_generators/input/openapi/test_schema_type_constraints.yaml +++ b/tests/linkml/test_generators/input/openapi/schema_type_constraints.yaml @@ -1,3 +1,4 @@ +# LinkML schema providing constrained types id: https://w3id.org/linkml/tests/type_constraints name: type_constraints default_prefix: type_constraints diff --git a/tests/linkml/test_generators/input/openapi/spec-fixed.openapi.yaml b/tests/linkml/test_generators/input/openapi/spec-fixed.openapi.yaml index db0dffd41f..075ef81b95 100644 --- a/tests/linkml/test_generators/input/openapi/spec-fixed.openapi.yaml +++ b/tests/linkml/test_generators/input/openapi/spec-fixed.openapi.yaml @@ -1,3 +1,5 @@ +# OpenAPI template provided as template that is fully fixed +# because there are no fields to be replaced openapi: 3.0.3 info: title: LinkML tests diff --git a/tests/linkml/test_generators/input/openapi/spec-types.openapi.yaml b/tests/linkml/test_generators/input/openapi/spec-types.openapi.yaml index 3fcda9c57f..b910ec9605 100644 --- a/tests/linkml/test_generators/input/openapi/spec-types.openapi.yaml +++ b/tests/linkml/test_generators/input/openapi/spec-types.openapi.yaml @@ -1,3 +1,4 @@ +# OpenAPI template referring a Type defined in the LinkML schema openapi: 3.0.3 info: title: LinkML type constraints test diff --git a/tests/linkml/test_generators/test_openapigen.py b/tests/linkml/test_generators/test_openapigen.py index 4d33b95364..151f3b7ff4 100644 --- a/tests/linkml/test_generators/test_openapigen.py +++ b/tests/linkml/test_generators/test_openapigen.py @@ -123,7 +123,7 @@ def test_missing_schema_declaration_raises(tmp_path, kitchen_sink_path): def test_openapi_type_constraints(input_path): """Test that LinkML types with constraints (e.g., pattern) are properly generated in the spec.""" - schema_path = str(input_path("openapi/test_schema_type_constraints.yaml")) + schema_path = str(input_path("openapi/schema_type_constraints.yaml")) head_path = str(input_path("openapi/spec-types.openapi.yaml")) spec = yaml.safe_load(OpenApiGenerator(schema_path).serialize(head_path)) schemas = spec["components"]["schemas"] From 66cc4c6c5a8749b7f153718f5bf097892eaef503 Mon Sep 17 00:00:00 2001 From: Nico Matentzoglu Date: Tue, 11 Aug 2026 19:34:10 +0300 Subject: [PATCH 49/72] Apply suggestion from @matentzn --- docs/maintainers/codeowners.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/maintainers/codeowners.md b/docs/maintainers/codeowners.md index e05c26ec85..18a8b90894 100644 --- a/docs/maintainers/codeowners.md +++ b/docs/maintainers/codeowners.md @@ -90,7 +90,9 @@ stepping-down process — exist within that frame. A few generators are self-contained enough that core-team review adds little. Where trusted, established community members know such an area well, we hand it to them outright: they review each other's changes and merge without -core-team sign-off. +core-team sign-off. +This does not preclude participants, at their discretion, from occasionally +explicitly requesting approval from the core-team for some reason. The goal is to let those areas move at the pace of the people who care about them rather than at the pace of core-team availability. Rules covering them From 1187da4b73f5d1022566ee1ebeb717bb83b3758e Mon Sep 17 00:00:00 2001 From: Sarah Gehrke <99770056+sagehrke@users.noreply.github.com> Date: Tue, 11 Aug 2026 10:42:01 -0600 Subject: [PATCH 50/72] Update Community-Meetings.md Updating the community meeting schedule to reflect our August and September presenters. Adding the last dates of the year for October and November! Wow...time flies. --- docs/get-involved/Community-Meetings.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/get-involved/Community-Meetings.md b/docs/get-involved/Community-Meetings.md index 5802f6fe10..9781f3aaff 100644 --- a/docs/get-involved/Community-Meetings.md +++ b/docs/get-involved/Community-Meetings.md @@ -27,8 +27,11 @@ Join the LinkML community for regular sessions featuring presentations on LinkML | Date | Presenter 1 | Topic 1 | Presenter 2 | Topic 2 | | :---: | :---: | :---: | :----: | :---: | -| August 20, 2026 | Patrick Golden | Use of LinkML in the [Zebrafish Toxicology Phenotype Atlas Project](https://zappfish.org/) | | | -| July 16, 2026 | Sierra Moxon | LinkML Microschemas |Stephan Heunis |[The ORINOCO project at Research Center Jülich - building self-hostable research information infrastructure](https://pool.psychoinformatics.de/ui/?sh%3ANodeShape=xyzri%3AXYZProject&pid=xyzrins%3Aprojects%2Forinoco) | +| November 19, 2026 |Open slot! | Volunteers welcome | Open slot! | Volunteers welcome | +| October 15, 2026 |Open slot! | Volunteers welcome | Open slot! | Volunteers welcome | +| September 17, 2026 | Matt Gehring | Use of LinkML at [sniff.world](https://sniff.world/) | Open slot! | Volunteers welcome | +| August 20, 2026 | Patrick Golden | Use of LinkML in the [Zebrafish Toxicology Phenotype Atlas Project](https://zappfish.org/) |Alex Anderson | schema-to-schema mapping and data conversion at [PNNL](https://www.pnnl.gov/) | +| [July 16, 2026](https://docs.google.com/presentation/d/1A05qfTbmI8RXyvoBSplpjSU9e4OP6BlIKJvQ1-eWhGw/edit?slide=id.g36e69bd970c_1_50#slide=id.g36e69bd970c_1_50) | Sierra Moxon | LinkML Microschemas |Stephan Heunis |[The ORINOCO project at Research Center Jülich - building self-hostable research information infrastructure](https://pool.psychoinformatics.de/ui/?sh%3ANodeShape=xyzri%3AXYZProject&pid=xyzrins%3Aprojects%2Forinoco) | | [June 18, 2026](https://docs.google.com/presentation/d/1mA3xBfPglJLtMPbDLXT8lJ7SAu6iDPNL_HBJs_DZuB0/edit?slide=id.g36e69bd970c_1_50#slide=id.g36e69bd970c_1_50) | Anh Nguyet Vu | Adopting LinkML at Sage: Workflows, Wins, and Works in Progress | Cory Levinson | OAE Data Protocol: Data standardization for carbon removal research and deployment with LinkML | | [May 21, 2026](https://docs.google.com/presentation/d/13KL_5xUkXBNg9IoGrv62OXUfzWXp-M94Pu4GF2TnIBc/edit?slide=id.g36e69bd970c_1_50#slide=id.g36e69bd970c_1_50) | Inge Vejsbjerg | [LinkML for AI Governance at IBM](https://ibm.github.io/ai-atlas-nexus/) |Joshua Send|Why TypeDB is the Natural Backend for LinkML| | | [April 16, 2026](https://docs.google.com/presentation/d/1d2AjM9TBESO6njMXBB-lw5A6WDIFMBb14ZhCRKN2GiY/edit?slide=id.g36e69bd970c_1_50#slide=id.g36e69bd970c_1_50) | Daniel Kapitan| [Introducing PLUGIN and why we fell in love with LinkML](https://docs.google.com/presentation/d/1KqwKnq-f4JsSwHVRtCXZrwqBI7JIP1aqbUqlO7iEjd0/edit?slide=id.p1#slide=id.p1)| Community Discussion Topics| RareLink/REDCap + LinkML with Adam Graefe | | From d49c66f2a57fb51050dd8d3b634123fa33a13c27 Mon Sep 17 00:00:00 2001 From: Sarah Gehrke <99770056+sagehrke@users.noreply.github.com> Date: Tue, 11 Aug 2026 10:48:19 -0600 Subject: [PATCH 51/72] Update Community-Meetings.md removing trailing white space --- docs/get-involved/Community-Meetings.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/get-involved/Community-Meetings.md b/docs/get-involved/Community-Meetings.md index 9781f3aaff..252f0539dc 100644 --- a/docs/get-involved/Community-Meetings.md +++ b/docs/get-involved/Community-Meetings.md @@ -27,11 +27,11 @@ Join the LinkML community for regular sessions featuring presentations on LinkML | Date | Presenter 1 | Topic 1 | Presenter 2 | Topic 2 | | :---: | :---: | :---: | :----: | :---: | -| November 19, 2026 |Open slot! | Volunteers welcome | Open slot! | Volunteers welcome | -| October 15, 2026 |Open slot! | Volunteers welcome | Open slot! | Volunteers welcome | -| September 17, 2026 | Matt Gehring | Use of LinkML at [sniff.world](https://sniff.world/) | Open slot! | Volunteers welcome | -| August 20, 2026 | Patrick Golden | Use of LinkML in the [Zebrafish Toxicology Phenotype Atlas Project](https://zappfish.org/) |Alex Anderson | schema-to-schema mapping and data conversion at [PNNL](https://www.pnnl.gov/) | -| [July 16, 2026](https://docs.google.com/presentation/d/1A05qfTbmI8RXyvoBSplpjSU9e4OP6BlIKJvQ1-eWhGw/edit?slide=id.g36e69bd970c_1_50#slide=id.g36e69bd970c_1_50) | Sierra Moxon | LinkML Microschemas |Stephan Heunis |[The ORINOCO project at Research Center Jülich - building self-hostable research information infrastructure](https://pool.psychoinformatics.de/ui/?sh%3ANodeShape=xyzri%3AXYZProject&pid=xyzrins%3Aprojects%2Forinoco) | +| November 19, 2026|Open slot!| Volunteers welcome| Open slot!| Volunteers welcome| +| October 15, 2026|Open slot!| Volunteers welcome| Open slot!| Volunteers welcome| +| September 17, 2026| Matt Gehring | Use of LinkML at [sniff.world](https://sniff.world/) | Open slot! | Volunteers welcome | +| August 20, 2026| Patrick Golden| Use of LinkML in the [Zebrafish Toxicology Phenotype Atlas Project](https://zappfish.org/)|Alex Anderson| schema-to-schema mapping and data conversion at [PNNL](https://www.pnnl.gov/)| +| [July 16, 2026](https://docs.google.com/presentation/d/1A05qfTbmI8RXyvoBSplpjSU9e4OP6BlIKJvQ1-eWhGw/edit?slide=id.g36e69bd970c_1_50#slide=id.g36e69bd970c_1_50)| Sierra Moxon | LinkML Microschemas |Stephan Heunis |[The ORINOCO project at Research Center Jülich - building self-hostable research information infrastructure](https://pool.psychoinformatics.de/ui/?sh%3ANodeShape=xyzri%3AXYZProject&pid=xyzrins%3Aprojects%2Forinoco) | | [June 18, 2026](https://docs.google.com/presentation/d/1mA3xBfPglJLtMPbDLXT8lJ7SAu6iDPNL_HBJs_DZuB0/edit?slide=id.g36e69bd970c_1_50#slide=id.g36e69bd970c_1_50) | Anh Nguyet Vu | Adopting LinkML at Sage: Workflows, Wins, and Works in Progress | Cory Levinson | OAE Data Protocol: Data standardization for carbon removal research and deployment with LinkML | | [May 21, 2026](https://docs.google.com/presentation/d/13KL_5xUkXBNg9IoGrv62OXUfzWXp-M94Pu4GF2TnIBc/edit?slide=id.g36e69bd970c_1_50#slide=id.g36e69bd970c_1_50) | Inge Vejsbjerg | [LinkML for AI Governance at IBM](https://ibm.github.io/ai-atlas-nexus/) |Joshua Send|Why TypeDB is the Natural Backend for LinkML| | | [April 16, 2026](https://docs.google.com/presentation/d/1d2AjM9TBESO6njMXBB-lw5A6WDIFMBb14ZhCRKN2GiY/edit?slide=id.g36e69bd970c_1_50#slide=id.g36e69bd970c_1_50) | Daniel Kapitan| [Introducing PLUGIN and why we fell in love with LinkML](https://docs.google.com/presentation/d/1KqwKnq-f4JsSwHVRtCXZrwqBI7JIP1aqbUqlO7iEjd0/edit?slide=id.p1#slide=id.p1)| Community Discussion Topics| RareLink/REDCap + LinkML with Adam Graefe | | From 821a7a61d0c81acbeabdfd66b279086078ebc7f1 Mon Sep 17 00:00:00 2001 From: Sarah Gehrke <99770056+sagehrke@users.noreply.github.com> Date: Tue, 11 Aug 2026 10:54:16 -0600 Subject: [PATCH 52/72] Update Community-Meetings.md more white space... --- docs/get-involved/Community-Meetings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-involved/Community-Meetings.md b/docs/get-involved/Community-Meetings.md index 252f0539dc..85495e195e 100644 --- a/docs/get-involved/Community-Meetings.md +++ b/docs/get-involved/Community-Meetings.md @@ -29,7 +29,7 @@ Join the LinkML community for regular sessions featuring presentations on LinkML | :---: | :---: | :---: | :----: | :---: | | November 19, 2026|Open slot!| Volunteers welcome| Open slot!| Volunteers welcome| | October 15, 2026|Open slot!| Volunteers welcome| Open slot!| Volunteers welcome| -| September 17, 2026| Matt Gehring | Use of LinkML at [sniff.world](https://sniff.world/) | Open slot! | Volunteers welcome | +| September 17, 2026| Matt Gehring| Use of LinkML at [sniff.world](https://sniff.world/)| Open slot!| Volunteers welcome| | August 20, 2026| Patrick Golden| Use of LinkML in the [Zebrafish Toxicology Phenotype Atlas Project](https://zappfish.org/)|Alex Anderson| schema-to-schema mapping and data conversion at [PNNL](https://www.pnnl.gov/)| | [July 16, 2026](https://docs.google.com/presentation/d/1A05qfTbmI8RXyvoBSplpjSU9e4OP6BlIKJvQ1-eWhGw/edit?slide=id.g36e69bd970c_1_50#slide=id.g36e69bd970c_1_50)| Sierra Moxon | LinkML Microschemas |Stephan Heunis |[The ORINOCO project at Research Center Jülich - building self-hostable research information infrastructure](https://pool.psychoinformatics.de/ui/?sh%3ANodeShape=xyzri%3AXYZProject&pid=xyzrins%3Aprojects%2Forinoco) | | [June 18, 2026](https://docs.google.com/presentation/d/1mA3xBfPglJLtMPbDLXT8lJ7SAu6iDPNL_HBJs_DZuB0/edit?slide=id.g36e69bd970c_1_50#slide=id.g36e69bd970c_1_50) | Anh Nguyet Vu | Adopting LinkML at Sage: Workflows, Wins, and Works in Progress | Cory Levinson | OAE Data Protocol: Data standardization for carbon removal research and deployment with LinkML | From fee9668ff5451ea71ca2c1bea4bffb21d1f0f10f Mon Sep 17 00:00:00 2001 From: Nico Matentzoglu Date: Tue, 11 Aug 2026 20:03:14 +0300 Subject: [PATCH 53/72] Update codeowners.md Co-authored-by: Damien Goutte-Gattat --- docs/maintainers/codeowners.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/maintainers/codeowners.md b/docs/maintainers/codeowners.md index 18a8b90894..4624c245a1 100644 --- a/docs/maintainers/codeowners.md +++ b/docs/maintainers/codeowners.md @@ -90,7 +90,7 @@ stepping-down process — exist within that frame. A few generators are self-contained enough that core-team review adds little. Where trusted, established community members know such an area well, we hand it to them outright: they review each other's changes and merge without -core-team sign-off. +core-team sign-off. This does not preclude participants, at their discretion, from occasionally explicitly requesting approval from the core-team for some reason. From e27c0a0d0f26039ad3f5cbbeacddd7f1bfb71abd Mon Sep 17 00:00:00 2001 From: Silvano Cirujano Cuesta Date: Wed, 12 Aug 2026 22:30:59 +0200 Subject: [PATCH 54/72] tests: diverting from model `main` only raises warning (#3709) Signed-off-by: Silvano Cirujano Cuesta Co-authored-by: Corey Cox <69321580+amc-corey-cox@users.noreply.github.com> --- .github/workflows/main.yaml | 8 +- .github/workflows/metamodel-compat.yaml | 104 +- packages/linkml_runtime/Makefile | 36 +- .../linkml_runtime/linkml_model/UPSTREAM_SHA | 1 + .../linkml_model/annotations.py | 4 +- .../src/linkml_runtime/linkml_model/array.py | 4 +- .../linkml_runtime/linkml_model/datasets.py | 4 +- .../linkml_model/excel/meta.xlsx | Bin 31601 -> 31599 bytes .../linkml_runtime/linkml_model/extensions.py | 4 +- .../linkml_model/jsonld/meta.jsonld | 69 +- .../linkml_model/jsonschema/meta.schema.json | 50 +- .../linkml_model/linkml_files.py | 19 +- .../linkml_runtime/linkml_model/mappings.py | 4 +- .../src/linkml_runtime/linkml_model/meta.py | 2 +- .../model/docs/specification/02instances.md | 6 +- .../model/docs/specification/03schemas.md | 2 +- .../model/docs/specification/07codegen.md | 4 + .../model/docs/specification/index.md | 15 +- .../linkml_model/model/schema/datasets.yaml | 1 + .../linkml_model/model/schema/meta.yaml | 2 +- .../linkml_model/model/schema/units.yaml | 1 + .../linkml_model/owl/meta.owl.ttl | 2220 ++--- .../linkml_model/protobuf/meta.proto | 2 +- .../linkml_model/rdf/annotations.model.ttl | 27 +- .../linkml_model/rdf/annotations.ttl | 27 +- .../linkml_model/rdf/datasets.model.ttl | 46 +- .../linkml_model/rdf/datasets.ttl | 46 +- .../linkml_model/rdf/extensions.model.ttl | 4 +- .../linkml_model/rdf/extensions.ttl | 4 +- .../linkml_model/rdf/mappings.model.ttl | 12 +- .../linkml_model/rdf/mappings.ttl | 10 +- .../linkml_model/rdf/meta.model.ttl | 164 +- .../linkml_runtime/linkml_model/rdf/meta.ttl | 162 +- .../linkml_model/rdf/types.model.ttl | 10 +- .../linkml_runtime/linkml_model/rdf/types.ttl | 14 +- .../linkml_model/rdf/units.model.ttl | 47 +- .../linkml_runtime/linkml_model/rdf/units.ttl | 43 +- .../linkml_model/rdf/validation.model.ttl | 16 +- .../linkml_model/rdf/validation.ttl | 12 +- .../linkml_model/shacl/meta.shacl.ttl | 8694 ++++++++--------- .../linkml_model/shex/meta.shex | 118 +- .../linkml_model/sqlddl/meta.sql | 622 +- .../linkml_model/sqlschema/meta.sql | 680 +- .../src/linkml_runtime/linkml_model/types.py | 4 +- .../src/linkml_runtime/linkml_model/units.py | 4 +- .../linkml_runtime/linkml_model/validation.py | 4 +- pyproject.toml | 1 + tests/conftest.py | 7 + .../linkml/test_base/__snapshots__/meta.json | 2 +- tests/linkml/test_base/__snapshots__/meta.owl | 2168 ++-- tests/linkml/test_base/__snapshots__/meta.ttl | 2 +- .../test_linkml_model/test_linkml_files.py | 116 +- 52 files changed, 7995 insertions(+), 7633 deletions(-) create mode 100644 packages/linkml_runtime/src/linkml_runtime/linkml_model/UPSTREAM_SHA diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 70138c7f8b..a368288331 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -121,8 +121,8 @@ jobs: strategy: fail-fast: false matrix: - os: [ ubuntu-latest, windows-latest ] - python-version: [ "3.10", "3.13" ] + os: [ubuntu-latest, windows-latest] + python-version: ["3.10", "3.13"] needs: - quality-checks runs-on: ${{ matrix.os }} @@ -171,8 +171,8 @@ jobs: strategy: fail-fast: false matrix: - os: [ ubuntu-latest ] - python-version: [ "3.10", "3.13" ] + os: [ubuntu-latest] + python-version: ["3.10", "3.13"] needs: - quality-checks runs-on: ${{ matrix.os }} diff --git a/.github/workflows/metamodel-compat.yaml b/.github/workflows/metamodel-compat.yaml index b6293d933f..fff2904423 100644 --- a/.github/workflows/metamodel-compat.yaml +++ b/.github/workflows/metamodel-compat.yaml @@ -3,6 +3,9 @@ # This workflow downloads the latest metamodel from linkml-model and runs # the compatibility tests to ensure the linkml toolkit can process it. # If tests pass and the metamodel has changed, it creates a PR with the update. +# +# It also checks whether the vendored linkml-model files have drifted from +# upstream main, and opens (or updates) a tracking issue when drift is found. name: Metamodel Compatibility env: @@ -63,7 +66,11 @@ jobs: if: steps.run_tests.outcome == 'failure' run: | ISSUE_TITLE="Metamodel compatibility test failure" - ISSUE_BODY=$(cat <<'EOF' + + # Build the body in a file rather than a shell variable: the test output is + # untrusted text that must not be re-evaluated by the shell. + { + cat < temp/issue_body.md if [ -n "${{ steps.check_issue.outputs.existing_issue }}" ]; then - gh issue comment "${{ steps.check_issue.outputs.existing_issue }}" --body "${ISSUE_BODY}" + gh issue comment "${{ steps.check_issue.outputs.existing_issue }}" --body-file temp/issue_body.md else gh issue create \ --title "${ISSUE_TITLE}" \ - --body "${ISSUE_BODY}" \ + --body-file temp/issue_body.md \ --label "metamodel-compat" fi env: @@ -113,3 +122,84 @@ jobs: branch: update-metamodel-fixtures delete-branch: true labels: metamodel-compat + + # Only the soft upstream-main comparison runs here. Scoping to that single test + # keeps an unrelated failure -- a hard UPSTREAM_SHA mismatch, a collection error -- + # from being reported as upstream drift. + # + # pytest exit 1 means "tests failed", i.e. genuine drift. Anything else (2 interrupted, + # 3 internal error, 4 usage error, or a network blip killing the run) is a broken job, + # not drift, so it fails loudly instead of filing a misleading issue. + - name: Check vendored files for drift against upstream main + id: drift_tests + if: always() + run: | + mkdir -p temp + set +e + uv run pytest tests/linkml_runtime/test_linkml_model/test_linkml_files.py \ + -k test_vendored_files_match_upstream_main \ + --with-network --with-upstream-main -v 2>&1 | tee temp/drift_output.txt + PYTEST_RC=${PIPESTATUS[0]} + set -e + case "$PYTEST_RC" in + 0) echo "drifted=false" >> $GITHUB_OUTPUT ;; + 1) echo "drifted=true" >> $GITHUB_OUTPUT ;; + *) echo "::error::Drift check did not run cleanly (pytest exit $PYTEST_RC); not reporting drift." + exit "$PYTEST_RC" ;; + esac + + - name: Check for existing drift issue + if: always() && steps.drift_tests.outputs.drifted == 'true' + id: check_drift_issue + run: | + EXISTING_ISSUE=$(gh issue list --label "vendored-model-drift" --state open --json number --jq '.[0].number // empty') + echo "existing_issue=${EXISTING_ISSUE}" >> $GITHUB_OUTPUT + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Create or update issue on drift + if: always() && steps.drift_tests.outputs.drifted == 'true' + run: | + ISSUE_TITLE="Vendored linkml-model files have drifted from upstream main" + + { + cat < temp/drift_issue_body.md + + if [ -n "${{ steps.check_drift_issue.outputs.existing_issue }}" ]; then + gh issue comment "${{ steps.check_drift_issue.outputs.existing_issue }}" --body-file temp/drift_issue_body.md + else + gh issue create \ + --title "${ISSUE_TITLE}" \ + --body-file temp/drift_issue_body.md \ + --label "vendored-model-drift" + fi + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Close drift issue if drift is resolved + if: always() && steps.drift_tests.outputs.drifted == 'false' + run: | + EXISTING_ISSUE=$(gh issue list --label "vendored-model-drift" --state open --json number --jq '.[0].number // empty') + if [ -n "${EXISTING_ISSUE}" ]; then + gh issue close "${EXISTING_ISSUE}" \ + --comment "Vendored files are now in sync with upstream main. Closing." + fi + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/packages/linkml_runtime/Makefile b/packages/linkml_runtime/Makefile index 1ed931acf7..9d5cebc35e 100644 --- a/packages/linkml_runtime/Makefile +++ b/packages/linkml_runtime/Makefile @@ -1,26 +1,46 @@ -# Currently the main purposing of this makefile is to synchronize -# latest releases of linkml-model into linkml_runtime/linkml_model +# Currently the main purpose of this makefile is to synchronize the +# latest release of linkml-model (including release candidates) into +# linkml_runtime/linkml_model. # -# Set LINKML_MODEL_RELEASE to the linkml-model release tag to sync from -# (see https://github.com/linkml/linkml-model/releases). Bump manually -# when pulling in a new linkml-model release. +# Run `make update_model` to pull the newest release or pre-release from +# https://github.com/linkml/linkml-model/releases, copy the vendored files, +# and record the upstream commit SHA in src/linkml_runtime/linkml_model/UPSTREAM_SHA. +# Commit the resulting changes together. -LINKML_MODEL_RELEASE = v1.11.0 +UPSTREAM_SHA_FILE = src/linkml_runtime/linkml_model/UPSTREAM_SHA all: update_model update_validation_model update_model: + # Resolve the latest release or pre-release tag from the GitHub Releases API + $(eval LINKML_MODEL_TAG := $(shell \ + curl -fsSL "https://api.github.com/repos/linkml/linkml-model/releases?per_page=1" \ + | python3 -c "import sys, json; releases = json.load(sys.stdin); print(releases[0]['tag_name'])")) + + # Resolve the tag to its commit SHA. The commits endpoint dereferences the ref for + # us, so this yields a commit SHA for annotated tags as well as lightweight ones -- + # /git/refs/tags returns the tag *object* SHA for annotated tags, which is not + # something `git fetch ` can resolve. + $(eval LINKML_MODEL_SHA := $(shell \ + curl -fsSL "https://api.github.com/repos/linkml/linkml-model/commits/$(LINKML_MODEL_TAG)" \ + | python3 -c "import sys, json; print(json.load(sys.stdin)['sha'])")) + + @echo "Vendoring linkml-model $(LINKML_MODEL_TAG) @ $(LINKML_MODEL_SHA)" + # Clean up rm -rf linkml-model-github/ mkdir -p linkml-model-github/ rm -rf src/linkml_runtime/linkml_model mkdir -p src/linkml_runtime/linkml_model - # Clone from the pinned linkml-model release tag - git clone --depth 1 --branch $(LINKML_MODEL_RELEASE) https://github.com/linkml/linkml-model.git linkml-model-github/ + # Clone from the resolved tag + git clone --depth 1 --branch $(LINKML_MODEL_TAG) https://github.com/linkml/linkml-model.git linkml-model-github/ cp -pr linkml-model-github/linkml_model/* src/linkml_runtime/linkml_model + # Record the upstream commit SHA so tests can compare against the exact vendored revision + echo "$(LINKML_MODEL_SHA)" > $(UPSTREAM_SHA_FILE) + # Clean up some files that are not needed at the moment, https://github.com/linkml/linkml/issues/3129 rm src/linkml_runtime/linkml_model/model/schema/extended_types.yaml cd ../../ && pre-commit run --all-files || pre-commit run --all-files diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/UPSTREAM_SHA b/packages/linkml_runtime/src/linkml_runtime/linkml_model/UPSTREAM_SHA new file mode 100644 index 0000000000..29a14d1e81 --- /dev/null +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/UPSTREAM_SHA @@ -0,0 +1 @@ +7657de64dc7098a55dc51dbc9ec500e66f2a1b4f diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/annotations.py b/packages/linkml_runtime/src/linkml_runtime/linkml_model/annotations.py index be9d7cd2cb..f4b438c9a4 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/annotations.py +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/annotations.py @@ -1,5 +1,5 @@ # Auto generated from annotations.yaml by pythongen.py version: 0.0.1 -# Generation date: 2026-05-05T18:49:09 +# Generation date: 2026-08-12T09:42:07 # Schema: annotations # # id: https://w3id.org/linkml/annotations @@ -18,7 +18,7 @@ from .extensions import AnyValue, Extension, ExtensionTag -metamodel_version = "1.7.0" +metamodel_version = "1.11.0" version = "2.0.0" # Namespaces diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/array.py b/packages/linkml_runtime/src/linkml_runtime/linkml_model/array.py index 033bee6728..1c1aa8b7f3 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/array.py +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/array.py @@ -1,5 +1,5 @@ # Auto generated from array.yaml by pythongen.py version: 0.0.1 -# Generation date: 2026-05-05T18:49:10 +# Generation date: 2026-08-12T09:42:08 # Schema: arrays # # id: https://w3id.org/linkml/lib/arrays @@ -19,7 +19,7 @@ from linkml_runtime.utils.slot import Slot from linkml_runtime.utils.yamlutils import YAMLRoot -metamodel_version = "1.7.0" +metamodel_version = "1.11.0" version = None # Namespaces diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/datasets.py b/packages/linkml_runtime/src/linkml_runtime/linkml_model/datasets.py index 8fe878ee68..7b90913ec0 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/datasets.py +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/datasets.py @@ -1,5 +1,5 @@ # Auto generated from datasets.yaml by pythongen.py version: 0.0.1 -# Generation date: 2026-05-05T18:49:10 +# Generation date: 2026-08-12T09:42:09 # Schema: datasets # # id: https://w3id.org/linkml/datasets @@ -17,7 +17,7 @@ from linkml_runtime.utils.slot import Slot from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str -metamodel_version = "1.7.0" +metamodel_version = "1.11.0" version = None # Namespaces diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/excel/meta.xlsx b/packages/linkml_runtime/src/linkml_runtime/linkml_model/excel/meta.xlsx index ba15ecefe56c07be0d9cfb9c44f3c8d0a646539e..04e0b0bd9c1b5095fc6c6adf1deb8e5c06ee11bf 100644 GIT binary patch delta 2177 zcmZuxdrVVT9KQFqFdiMy77#9sH{&59Re=q4c7%sebVYn zlpcOcyD1d{p(jOAPE^?v(TXOw@5TJ@yu|d3#}MtMDM}22w4ODGn!1+u#ECYQls>vp z(ciM6C1yt39(nRg$!CSlRfVb7)3#)Hv`5S;d}D*(<%!oXZ|1d*c8}Bhl80r=I$iwv zGY#Dn6{fH;Cg`isq_-MUj8S)P_DHf?ryCJ`Wk$&{MM`Ton7y&A15HcQ36zut^oUY0ZQFH2>njz`YL#pR_f!&ad0G z{f3iNnG^W4v1!q^qxG6p^WImv@{UZYaL){Y}b45pn=^q1G@a-6GQ zB%G@rFWGpk{YvNa&7&boN%gC*{}x(jva4u!s0TMjzvC$6qv2wm(rCP@a;_t**Dj4T z3eNl1%HDl2w1WbQ@&V#hZ|;of7$$*Or%g4;N>*LQ{8D)a!f!k0@3o-4#^Yr{_q-sBkz z#x5HZ4i z=guQ0*@-*3wi5l zWD|aSwNEY#U<(SMG{2M(`U>i4bZph=vl~~TD(wnXDweYp-XpR_#m}(sV2U)o8!|GX zFC?h?2|>APJrNryHDe4cD;vZem|yNgdiSCF5T>2{qz5m+WlfUv)W`uBZ9*Xbgf5*U zMeUBDC@CDo$xkhP7nEp2aR2w{SULdg*GAySUMgGQ%!FX7-MY zty-&ADrm-2Fg@>9*LBhZ{?@Lq6G0&sY}1LRyqJ79B;KbJ2l0Efy24h)E$)cusmH{_ zf#EAJz}&xuH^;|{_^A{Tk4qguiJmxV^em(CLim2Y7^QJKXB1NHge6tGAqLQV%gmP3vX(k z;Lfa-yrYn1hLLQe*vK*mq7l|;#78=nxLhKK^RI+QvMw$H7mblP^dVSxeKr`K?H6O) zx#>x?t$#2F8I@KLb4vxwyq}1$Ba>Jc#5xzEjK?Y@sGGlMm%n6SgU*U=1v})3_@~?v zEHaU7J}|M&cnZR6O%l|kFNelv@lSsjtg|#C$tqbS@%BR}mL^70VpW zL)iU1N4wysULtlvbMpB)1Lvwp@O@CIvw+98n{m^p-!HZirGYpziKxiTGFin)sc-CQfQQiMLFZ4`s(Gq}Kzs8jJlMaTv!;7L=D^5CiWr@OG(d$@x1f;He+wru9 G=ll!83UYb? delta 2164 zcmZuxdrVVT7{9$mRvs%aVf0cF1%yIJDX2IC8yko~l@$;aC?J9_l(ax8rA9!(Z6GdV z2a!1^IEOLB1!pxp42mPZ0%{yVi!O66Xb^`8QP{x8&OPTei~@gfzy9v``<>tSedoKQ z6P&RL4qqXrX~u`t{gG=aWhW8>+=#= zjkG_fFIL>jayyVGZ992TFasKss`GFAXIpn|@1X6-+E;rrUiMVVT%_94 z65S7Vw{u;h&ohCd>LPZW%h?H2l&Ll)fOotECiV%qBoY`kf_G`4vv7B=dQ2hyA%A3&0Q{LRXL0jY>#6r!Bz=eNVGwiOrt!oLFl13 zxURsz^ma><%rJka=XtIL>m=l*^5S~XmE@{lBg!U{Ek3Oz$`Kb3$wv|!E}tb74L=rn zm{HVHJCG@4^v;2SMDp{XVp3dh=)dH^8(}NV5NrP+x8o*FQ7oMy4#vl)KM>ra)A3~{43);1Zk?Jc;?^dF|->GNYze2 z&NBn;Dr+~En>NYskArPE2%S0`iSSvrH^&0xiv zfp{evdsM~DrknDn)}X{I8hhM=2axogfOKRcggd?R_8=WuAD<& z4jQ$jOTCcSmCWuMc#%B!CeM6)OlyfsMWofmWX37Q3>}+}uxcZA9AeR#2!bVN|1V>s79j82FrlA~jSBeqjiM*fyv1rk5@zvFgEkJrcP}$ str: return filename +# Published schema/artifact files live under the ``linkml_model`` package directory +# on GitHub (raw + GitHub Pages), so GitHub URLs need this prefix even though +# ``LOCAL_PATH_FOR`` does not (its base already points inside the package). +PACKAGE_DIR = "linkml_model" + + def _build_loc(base: str, source: Source, fmt: Format) -> str: - return f"{base}{_build_path(source, fmt)}".replace("blob/", "") + return f"{base}{PACKAGE_DIR}/{_build_path(source, fmt)}".replace("blob/", "") def URL_FOR(source: Source, fmt: Format) -> str: @@ -137,8 +143,13 @@ def LOCAL_PATH_FOR(source: Source, fmt: Format) -> str: return os.path.join(LOCAL_BASE, _build_path(source, fmt)) -def GITHUB_IO_PATH_FOR(source: Source, fmt: Format) -> str: - return _build_loc(GITHUB_IO_BASE, source, fmt) +def GITHUB_IO_PATH_FOR(source: Source, fmt: Format, version: str = "latest") -> str: + """Return the GitHub Pages URL for source in format. + + The docs site is versioned, so files live under ``/linkml_model/``; + ``version`` defaults to the ``latest`` alias. + """ + return f"{GITHUB_IO_BASE}{version}/{PACKAGE_DIR}/{_build_path(source, fmt)}" def GITHUB_PATH_FOR( @@ -165,7 +176,7 @@ def tag_to_commit(tag: str) -> str: # Return the absolute latest entry for branch if release is ReleaseTag.LATEST or (release is ReleaseTag.CURRENT and branch != "main"): - return f"{GITHUB_BASE}{branch}/{_build_path(source, fmt)}" + return f"{GITHUB_BASE}{branch}/{PACKAGE_DIR}/{_build_path(source, fmt)}" # Return the latest published version elif release is ReleaseTag.CURRENT: diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/mappings.py b/packages/linkml_runtime/src/linkml_runtime/linkml_model/mappings.py index a707995388..4420cd62ba 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/mappings.py +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/mappings.py @@ -1,5 +1,5 @@ # Auto generated from mappings.yaml by pythongen.py version: 0.0.1 -# Generation date: 2026-05-05T18:49:12 +# Generation date: 2026-08-12T09:42:11 # Schema: mappings # # id: https://w3id.org/linkml/mappings @@ -12,7 +12,7 @@ from linkml_runtime.utils.metamodelcore import URIorCURIE from linkml_runtime.utils.slot import Slot -metamodel_version = "1.7.0" +metamodel_version = "1.11.0" version = "2.0.0" # Namespaces diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/meta.py b/packages/linkml_runtime/src/linkml_runtime/linkml_model/meta.py index 74a83a56bb..9f6e1d3020 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/meta.py +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/meta.py @@ -1,5 +1,5 @@ # Auto generated from meta.yaml by pythongen.py version: 0.0.1 -# Generation date: 2026-05-05T18:49:13 +# Generation date: 2026-08-12T09:42:13 # Schema: meta # # id: https://w3id.org/linkml/meta diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/docs/specification/02instances.md b/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/docs/specification/02instances.md index 10235edac3..fc08647cb1 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/docs/specification/02instances.md +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/docs/specification/02instances.md @@ -6,7 +6,7 @@ This specification provides a grammar for a **functional syntax** for expressing This syntax is not intended for data exchange, but instead for unambiguous describing data in LinkML in a way that is independent of any particular syntax. -[Section 6](../06mapping) specifies how the instance model is serialized as JSON, YAML, and RDF, and guidelines for mapping to object-oriented programming representations. +[Section 6](06mapping.md) specifies how the instance model is serialized as JSON, YAML, and RDF, and guidelines for mapping to object-oriented programming representations. This section uses BNF to define the structure of the LinkML instance abstract model. We also include UML-style diagrams for informative purposes. @@ -33,7 +33,7 @@ classDiagram ### Definition Types and Names -Definition names are used to unambiguously indicate *elements* specified in a **Schema** (described in [Part 3](../03schemas)): +Definition names are used to unambiguously indicate *elements* specified in a **Schema** (described in [Part 3](03schemas.md)): > **ClassDefinitionName** := **ElementName** @@ -223,7 +223,7 @@ Examples of collections: * `[Person(name=..., ...), Integer^5, None]` -- a heterogeneous collection * `[]` -- an empty collection -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. +Note that collections can be serialized in different ways depending on the target syntax, for examples, lists vs dictionaries. See section [6](06mapping.md) for details of serializations. ### None (Null) instances diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/docs/specification/03schemas.md b/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/docs/specification/03schemas.md index 206c1959b9..7b22c65326 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/docs/specification/03schemas.md +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/docs/specification/03schemas.md @@ -37,7 +37,7 @@ This part of the specification specifies schemas in terms of the abstract functi For practical purposes, the canonical serialization of a schema is in YAML. The rules for serializing and deserializing LinkML schemas are the same as for instances, because every schema is an object that instantiates a SchemaDefinition class in the metamodel. -See [section 6](06mapping) for rules for mapping to YAML. +See [section 6](06mapping.md) for rules for mapping to YAML. ### Analogies to other modeling frameworks diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/docs/specification/07codegen.md b/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/docs/specification/07codegen.md index c5c4d4807f..58bd91ca15 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/docs/specification/07codegen.md +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/docs/specification/07codegen.md @@ -42,6 +42,7 @@ Current implementations: | Pydantic | One file per schema | | Java | One file per class | | Typescript | One file per schema | +| Scala | One file per class | ### Imports @@ -75,6 +76,7 @@ Current implementations: | Pydantic | underscore | | Java | CamelCase | | Typescript | CamelCase | +| Scala | CamelCase | ## Mapping of LinkML Classes @@ -87,6 +89,7 @@ appropriate targets for LinkML classes. For example: * Scala has traits and sealed traits * Rust has structs, traits, and enums * Typescript has classes and interfaces +* Scala has final case classes and abstract classes or traits The choice should reflect whatever is most idiomatic for the target language. The generation MAY allow for different mappings, controlled by either user configuration, @@ -130,6 +133,7 @@ Current implementations: | Pydantic | none (planned) | | Java | none (planned) | | Typescript | none | +| Scala | none | ### Inheritance diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/docs/specification/index.md b/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/docs/specification/index.md index 1eefb0f390..49abd97acd 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/docs/specification/index.md +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/docs/specification/index.md @@ -2,10 +2,11 @@ ## Table of Contents -- [Preamble](00preamble) -- [Introduction](01introduction) -- [Instances](02instances) -- [Schemas](03schemas) -- [Derived Schemas](D04derived-schemas) -- [Validation](05validation) -- [Mapping](06mapping) +- [Preamble](00preamble.md) +- [Introduction](01introduction.md) +- [Instances](02instances.md) +- [Schemas](03schemas.md) +- [Derived Schemas](04derived-schemas.md) +- [Validation](05validation.md) +- [Mapping](06mapping.md) +- [Code Generation](07codegen.md) diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/schema/datasets.yaml b/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/schema/datasets.yaml index 2edc3a57f2..e0d92dc198 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/schema/datasets.yaml +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/schema/datasets.yaml @@ -23,6 +23,7 @@ prefixes: mediatypes: https://www.iana.org/assignments/media-types/ oslc: http://open-services.net/ns/core# bibo: http://purl.org/ontology/bibo/ + dcterms: http://purl.org/dc/terms/ default_prefix: datasets default_range: string diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/schema/meta.yaml b/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/schema/meta.yaml index c8ccef4e41..adcbf14b05 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/schema/meta.yaml +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/schema/meta.yaml @@ -1313,7 +1313,7 @@ slots: multivalued: true inlined: true description: >- - A collection of named unique keys for this class. Such unique keys may be spread over several slots, which is why there + A collection of named unique keys for this class. Such unique keys may be spread over several slots, which is why they are also called "compound keys". A unique key uniquely identifies instances of the class within a given container, meaning there cannot be two (or more) instances of the class with the same values for all the slots that make up the unique key. comments: diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/schema/units.yaml b/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/schema/units.yaml index fc05247f31..15e201359b 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/schema/units.yaml +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/model/schema/units.yaml @@ -6,6 +6,7 @@ license: https://creativecommons.org/publicdomain/zero/1.0/ prefixes: linkml: https://w3id.org/linkml/ qudt: http://qudt.org/schema/qudt/ + rdfs: http://www.w3.org/2000/01/rdf-schema# default_prefix: linkml default_range: string diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/owl/meta.owl.ttl b/packages/linkml_runtime/src/linkml_runtime/linkml_model/owl/meta.owl.ttl index 5c86b1291c..b63b5c6c33 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/owl/meta.owl.ttl +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/owl/meta.owl.ttl @@ -155,41 +155,41 @@ linkml:DimensionExpression a owl:Class, rdfs:label "dimension_expression" ; bibo:status ; rdfs:subClassOf [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:minimum_cardinality ], + [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:maximum_cardinality ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:exact_cardinality ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:alias ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; owl:onProperty linkml:maximum_cardinality ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty linkml:minimum_cardinality ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:alias ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:alias ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:maximum_cardinality ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:exact_cardinality ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:minimum_cardinality ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:alias ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; owl:onProperty linkml:exact_cardinality ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:minimum_cardinality ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:alias ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:minimum_cardinality ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:maximum_cardinality ], + owl:onProperty linkml:exact_cardinality ], linkml:Annotatable, linkml:CommonMetadata, linkml:Extensible ; @@ -200,19 +200,19 @@ linkml:ExtraSlotsExpression a owl:Class, linkml:ClassDefinition ; rdfs:label "extra_slots_expression" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; + owl:minCardinality 0 ; owl:onProperty linkml:allowed ], [ a owl:Restriction ; owl:allValuesFrom linkml:AnonymousSlotExpression ; owl:onProperty linkml:range_expression ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:allowed ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty linkml:range_expression ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:range_expression ], [ a owl:Restriction ; owl:maxCardinality 1 ; @@ -316,32 +316,32 @@ linkml:TypeMapping a owl:Class, linkml:ClassDefinition ; rdfs:label "type_mapping" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:framework_key ], + [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:string_serialization ], + owl:onProperty linkml:mapped_type ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:string_serialization ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty linkml:framework_key ], + owl:maxCardinality 1 ; + owl:onProperty linkml:string_serialization ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:framework_key ], [ a owl:Restriction ; - owl:allValuesFrom linkml:TypeDefinition ; - owl:onProperty linkml:mapped_type ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:mapped_type ], + owl:minCardinality 1 ; + owl:onProperty linkml:framework_key ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty linkml:string_serialization ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:mapped_type ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:framework_key ], + owl:allValuesFrom linkml:TypeDefinition ; + owl:onProperty linkml:mapped_type ], linkml:Annotatable, linkml:CommonMetadata, linkml:Extensible ; @@ -763,10 +763,10 @@ linkml:Annotation a owl:Class, linkml:ClassDefinition ; rdfs:label "annotation" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:Annotation ; owl:onProperty linkml:annotations ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Annotation ; + owl:minCardinality 0 ; owl:onProperty linkml:annotations ], linkml:Annotatable, linkml:Extension ; @@ -777,47 +777,47 @@ linkml:ClassExpression a owl:Class, linkml:ClassDefinition ; rdfs:label "class_expression" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:exactly_one_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:minCardinality 0 ; - owl:onProperty linkml:any_of ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:none_of ], + owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:allValuesFrom linkml:AnonymousClassExpression ; - owl:onProperty linkml:exactly_one_of ], + owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:slot_conditions ], [ a owl:Restriction ; owl:minCardinality 0 ; - 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:all_of ], + owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:all_of ], + owl:onProperty linkml:any_of ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:AnonymousClassExpression ; owl:onProperty linkml:any_of ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty linkml:exactly_one_of ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:any_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:AnonymousClassExpression ; + owl:onProperty linkml:none_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:none_of ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:exactly_one_of ] ; + owl:maxCardinality 1 ; + owl:onProperty linkml:all_of ] ; skos:definition "A boolean expression that can be used to dynamically determine membership of a class" ; skos:inScheme linkml:meta . @@ -825,20 +825,23 @@ linkml:ClassRule a owl:Class, linkml:ClassDefinition ; rdfs:label "class_rule" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:bidirectional ], + owl:allValuesFrom linkml:AnonymousClassExpression ; + owl:onProperty linkml:elseconditions ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:open_world ], + owl:onProperty linkml:rank ], [ a owl:Restriction ; owl:minCardinality 0 ; + owl:onProperty linkml:bidirectional ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; owl:onProperty linkml:rank ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:deactivated ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:bidirectional ], + owl:minCardinality 0 ; + owl:onProperty linkml:rank ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:postconditions ], @@ -846,47 +849,44 @@ linkml:ClassRule a owl:Class, owl:allValuesFrom linkml:AnonymousClassExpression ; owl:onProperty linkml:preconditions ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:elseconditions ], + owl:maxCardinality 1 ; + owl:onProperty linkml:preconditions ], [ 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:maxCardinality 1 ; - owl:onProperty linkml:elseconditions ], + owl:onProperty linkml:deactivated ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:rank ], + owl:maxCardinality 1 ; + owl:onProperty linkml:elseconditions ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:bidirectional ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:open_world ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:rank ], + owl:onProperty linkml:bidirectional ], [ a owl:Restriction ; owl:allValuesFrom linkml:AnonymousClassExpression ; - owl:onProperty linkml:elseconditions ], + owl:onProperty linkml:postconditions ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:open_world ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousClassExpression ; - owl:onProperty linkml:postconditions ], + owl:onProperty linkml:elseconditions ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:postconditions ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:deactivated ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:deactivated ], + owl:onProperty linkml:open_world ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:preconditions ], + owl:onProperty linkml:open_world ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:open_world ], linkml:Annotatable, linkml:ClassLevelRule, linkml:CommonMetadata, @@ -901,6 +901,9 @@ 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 ], + [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:source_ontology ], [ a owl:Restriction ; @@ -908,15 +911,12 @@ linkml:MatchQuery a owl:Class, owl:onProperty linkml:source_ontology ], [ a owl:Restriction ; owl:maxCardinality 1 ; - 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 ], + owl:onProperty linkml:source_ontology ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:minCardinality 0 ; owl:onProperty linkml:identifier_pattern ] ; skos:definition "A query that is used on an enum expression to dynamically obtain a set of permissible values via a query that matches on properties of the external concepts." ; skos:inScheme linkml:meta . @@ -925,119 +925,119 @@ linkml:TypeExpression a owl:Class, linkml:ClassDefinition ; rdfs:label "type_expression" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:implicit_prefix ], + [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:pattern ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:structured_pattern ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:pattern ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:implicit_prefix ], - [ 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:structured_pattern ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Anything ; - owl:onProperty linkml:maximum_value ], + owl:minCardinality 0 ; + owl:onProperty linkml:equals_number ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:pattern ], + owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:none_of ], + owl:maxCardinality 1 ; + owl:onProperty linkml:any_of ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:equals_string_in ], + owl:allValuesFrom linkml:AnonymousTypeExpression ; + owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:all_of ], + owl:onProperty linkml:structured_pattern ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:exactly_one_of ], + owl:allValuesFrom linkml:PatternExpression ; + owl:onProperty linkml:structured_pattern ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:any_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:equals_number ], + owl:onProperty linkml:none_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:equals_number ], + owl:onProperty linkml:pattern ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:maximum_value ], + owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:minimum_value ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; owl:onProperty linkml:implicit_prefix ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:equals_string ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:UnitOfMeasure ; owl:onProperty linkml:unit ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:equals_string_in ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:implicit_prefix ], [ a owl:Restriction ; owl:allValuesFrom linkml:AnonymousTypeExpression ; + owl:onProperty linkml:any_of ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty linkml:all_of ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:equals_number ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:any_of ], + owl:onProperty linkml:equals_string_in ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:all_of ], + owl:onProperty linkml:maximum_value ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty linkml:equals_number ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:PatternExpression ; - owl:onProperty linkml:structured_pattern ], + owl:allValuesFrom linkml:Anything ; + owl:onProperty linkml:maximum_value ], [ a owl:Restriction ; owl:allValuesFrom linkml:AnonymousTypeExpression ; owl:onProperty linkml:none_of ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:String ; owl:onProperty linkml:equals_string ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:Anything ; + owl:onProperty linkml:minimum_value ], + [ a owl:Restriction ; + owl:minCardinality 0 ; owl:onProperty linkml:maximum_value ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:structured_pattern ], + owl:onProperty linkml:unit ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:equals_string ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:minimum_value ], [ a owl:Restriction ; - owl:allValuesFrom linkml:UnitOfMeasure ; - owl:onProperty linkml:unit ], + owl:maxCardinality 1 ; + owl:onProperty linkml:equals_string ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:AnonymousTypeExpression ; + owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:equals_string ], + owl:onProperty linkml:any_of ], [ a owl:Restriction ; owl:minCardinality 0 ; + owl:onProperty linkml:none_of ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty linkml:unit ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousTypeExpression ; - owl:onProperty linkml:any_of ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:implicit_prefix ], linkml:Expression ; skos:definition "An abstract class grouping named types and anonymous type expressions" ; skos:inScheme linkml:meta . @@ -1045,7 +1045,7 @@ linkml:TypeExpression a owl:Class, linkml:abbreviation a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "abbreviation" ; - skos:definition "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)" ; + skos:definition "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)" ; skos:inScheme linkml:units . linkml:abstract a owl:ObjectProperty, @@ -1360,7 +1360,8 @@ linkml:extension_value a owl:ObjectProperty, rdfs:range linkml:AnyValue ; skos:definition "the actual annotation" ; skos:inScheme linkml:extensions ; - skos:prefLabel "value" . + skos:prefLabel "value" ; + linkml:simple_dict_value true . linkml:extra_slots a owl:ObjectProperty, linkml:SlotDefinition ; @@ -1444,25 +1445,6 @@ linkml:id_prefixes_are_closed a owl:ObjectProperty, skos:definition "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." ; skos:inScheme linkml:meta . -linkml:identifier a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "identifier" ; - rdfs:domain linkml:SlotDefinition ; - rdfs:range linkml:Boolean ; - rdfs:seeAlso , - linkml:unique_keys ; - skos:altLabel "ID", - "UID", - "code", - "primary key" ; - skos:definition "True means that the key slot(s) uniquely identifies the elements. There can be at most one identifier or key per container" ; - skos:inScheme linkml:meta ; - skos:note "a given domain can have at most one identifier", - "a key slot is automatically required. Identifiers cannot be optional", - "identifier is inherited", - "identifiers and keys are mutually exclusive. A given domain cannot have both" ; - sh:order 5 . - linkml:identifier_pattern a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "identifier_pattern" ; @@ -1623,19 +1605,6 @@ linkml:is_usage_slot a owl:ObjectProperty, skos:definition "True means that this slot was defined in a slot_usage situation" ; skos:inScheme linkml:meta . -linkml:key a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "key" ; - rdfs:domain linkml:SlotDefinition ; - rdfs:range linkml:Boolean ; - rdfs:seeAlso linkml:unique_keys ; - skos:definition "True means that the key slot(s) uniquely identify the elements within a single container" ; - skos:inScheme linkml:meta ; - skos:note "a given domain can have at most one key slot (restriction to be removed in the future)", - "a key slot is automatically required. Keys cannot be optional", - "identifiers and keys are mutually exclusive. A given domain cannot have both", - "key is inherited" . - linkml:last_updated_on a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "last_updated_on" ; @@ -2244,6 +2213,12 @@ linkml:AltDescription a owl:Class, linkml:ClassDefinition ; rdfs:label "alt_description" ; rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:alt_description_text ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty linkml:alt_description_text ], + [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:alt_description_source ], [ a owl:Restriction ; @@ -2252,14 +2227,8 @@ linkml:AltDescription a owl:Class, [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:alt_description_source ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:alt_description_text ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:alt_description_text ], - [ a owl:Restriction ; - owl:minCardinality 1 ; owl:onProperty linkml:alt_description_text ] ; skos:altLabel "structured description" ; skos:definition "an attributed description" ; @@ -2283,41 +2252,41 @@ linkml:EnumBinding a owl:Class, linkml:ClassDefinition ; rdfs:label "enum_binding" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:obligation_level ], - [ a owl:Restriction ; owl:allValuesFrom linkml:ObligationLevelEnum ; owl:onProperty linkml:obligation_level ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:EnumDefinition ; + owl:onProperty linkml:range ], + [ a owl:Restriction ; + owl:minCardinality 0 ; owl:onProperty linkml:binds_value_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:pv_formula ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:pv_formula ], - [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:range ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:obligation_level ], [ 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 ], + owl:onProperty linkml:binds_value_of ], [ 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:allValuesFrom linkml:PvFormulaOptions ; owl:onProperty linkml:pv_formula ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:binds_value_of ], + owl:onProperty linkml:pv_formula ], linkml:Annotatable, linkml:CommonMetadata, linkml:Extensible ; @@ -2329,28 +2298,28 @@ linkml:ImportExpression a owl:Class, rdfs:label "import_expression" ; bibo:status ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:Setting ; owl:onProperty linkml:import_map ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:import_as ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Setting ; + owl:maxCardinality 1 ; + owl:onProperty linkml:import_from ], + [ a owl:Restriction ; + owl:minCardinality 0 ; owl:onProperty linkml:import_map ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty linkml:import_from ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty linkml:import_as ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:import_from ], [ a owl:Restriction ; owl:allValuesFrom linkml:Ncname ; owl:onProperty linkml:import_as ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:import_from ], linkml:Annotatable, linkml:CommonMetadata, @@ -2362,23 +2331,23 @@ linkml:LocalName a owl:Class, linkml:ClassDefinition ; rdfs:label "local_name" ; rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:local_name_value ], + [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty linkml:local_name_source ], [ 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:maxCardinality 1 ; - owl:onProperty linkml:local_name_value ], + owl:allValuesFrom linkml:Ncname ; + 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 ] ; + owl:maxCardinality 1 ; + owl:onProperty linkml:local_name_value ] ; skos:definition "an attributed label" ; skos:inScheme linkml:meta . @@ -2386,23 +2355,23 @@ linkml:Prefix a owl:Class, linkml:ClassDefinition ; rdfs:label "prefix" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty linkml:prefix_reference ], + owl:maxCardinality 1 ; + owl:onProperty linkml:prefix_prefix ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty linkml:prefix_prefix ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uri ; + owl:maxCardinality 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:allValuesFrom linkml:Uri ; owl:onProperty linkml:prefix_reference ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:prefix_prefix ] ; + owl:minCardinality 1 ; + owl:onProperty linkml:prefix_reference ] ; skos:definition "prefix URI tuple" ; skos:inScheme linkml:meta ; sh:order 12 . @@ -2528,29 +2497,30 @@ linkml:unique_keys a owl:ObjectProperty, rdfs:label "unique_keys" ; rdfs:domain linkml:ClassDefinition ; rdfs:range linkml:UniqueKey ; - rdfs:seeAlso ; - skos:definition "A collection of named unique keys for this class. Unique keys may be singular or compound." ; + rdfs:seeAlso , + linkml:identifier, + linkml:key ; + skos:definition "A collection of named unique keys for this class. Such unique keys may be spread over several slots, which is why they are also called \"compound keys\". A unique key uniquely identifies instances of the class within a given container, meaning there cannot be two (or more) instances of the class with the same values for all the slots that make up the unique key." ; skos:exactMatch owl:hasKey ; - skos:inScheme linkml:meta . + skos:inScheme linkml:meta ; + skos:note """Not to be confused with a "singular unique key", which is defined by means of the `key` slot, or with an "identifier", which is defined by means of the "identifier" slot. Compound keys, singular unique keys, and identifiers all create a unicity constraint, but singular unique keys and identifiers have additional effects that compound keys do not have. +""" . linkml:Example a owl:Class, linkml:ClassDefinition ; rdfs:label "example" ; rdfs:subClassOf [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:value ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Anything ; owl:onProperty linkml:value_object ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:value_object ], + owl:onProperty linkml:value_description ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:value ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:value ], + owl:onProperty linkml:value_description ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:value_description ], @@ -2559,10 +2529,13 @@ linkml:Example a owl:Class, owl:onProperty linkml:value_object ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:value_description ], + owl:onProperty linkml:value ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:value_description ] ; + owl:onProperty linkml:value ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Anything ; + owl:onProperty linkml:value_object ] ; skos:definition "usage example and description" ; skos:inScheme linkml:meta . @@ -2570,269 +2543,269 @@ linkml:SlotExpression a owl:Class, linkml:ClassDefinition ; rdfs:label "slot_expression" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Anything ; - owl:onProperty linkml:minimum_value ], - [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:inlined_as_list ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:enum_range ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:equals_expression ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:multivalued ], + owl:minCardinality 0 ; + owl:onProperty linkml:none_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:AnonymousClassExpression ; + owl:onProperty linkml:range_expression ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:equals_string_in ], + owl:onProperty linkml:equals_expression ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:maximum_value ], + owl:onProperty linkml:implicit_prefix ], [ a owl:Restriction ; - owl:allValuesFrom linkml:PatternExpression ; - owl:onProperty linkml:structured_pattern ], + owl:allValuesFrom linkml:EnumBinding ; + owl:onProperty linkml:bindings ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:equals_string_in ], + owl:maxCardinality 1 ; + owl:onProperty linkml:exact_cardinality ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty linkml:equals_number ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:inlined ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:pattern ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:unit ], + owl:onProperty linkml:none_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousSlotExpression ; - owl:onProperty linkml:has_member ], + owl:maxCardinality 1 ; + 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:minCardinality 0 ; - owl:onProperty linkml:exact_cardinality ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:implicit_prefix ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:structured_pattern ], + owl:allValuesFrom linkml:AnonymousSlotExpression ; + owl:onProperty linkml:any_of ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:minimum_value ], + owl:maxCardinality 1 ; + owl:onProperty linkml:any_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:equals_number ], + owl:onProperty linkml:array ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:minimum_cardinality ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:equals_string ], [ a owl:Restriction ; - owl:allValuesFrom linkml:EnumBinding ; - owl:onProperty linkml:bindings ], + owl:allValuesFrom linkml:AnonymousSlotExpression ; + owl:onProperty linkml:none_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:equals_expression ], + owl:minCardinality 0 ; + owl:onProperty linkml:array ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:required ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:inlined_as_list ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:recommended ], + owl:maxCardinality 1 ; + owl:onProperty linkml:implicit_prefix ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:all_members ], + owl:onProperty linkml:inlined ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:required ], + owl:onProperty linkml:equals_number ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousSlotExpression ; - owl:onProperty linkml:any_of ], + owl:allValuesFrom linkml:UnitOfMeasure ; + owl:onProperty linkml:unit ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:Integer ; owl:onProperty linkml:exact_cardinality ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:multivalued ], + owl:minCardinality 0 ; + owl:onProperty linkml:equals_string ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:inlined ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:equals_number ], + owl:onProperty linkml:multivalued ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:range ], + owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:array ], + owl:onProperty linkml:equals_number ], [ a owl:Restriction ; owl:allValuesFrom linkml:AnonymousSlotExpression ; - owl:onProperty linkml:all_members ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:all_of ], + owl:onProperty linkml:has_member ], [ a owl:Restriction ; - owl:allValuesFrom linkml:UnitOfMeasure ; - owl:onProperty linkml:unit ], + owl:maxCardinality 1 ; + owl:onProperty linkml:multivalued ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousClassExpression ; - owl:onProperty linkml:range_expression ], + owl:minCardinality 0 ; + owl:onProperty linkml:minimum_value ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:has_member ], + owl:onProperty linkml:required ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:all_members ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:implicit_prefix ], + owl:allValuesFrom linkml:AnonymousSlotExpression ; + owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:multivalued ], + owl:allValuesFrom linkml:Anything ; + owl:onProperty linkml:minimum_value ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:maximum_value ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:unit ], + owl:allValuesFrom linkml:AnonymousSlotExpression ; + owl:onProperty linkml:all_members ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:maximum_cardinality ], + owl:allValuesFrom linkml:Anything ; + owl:onProperty linkml:maximum_value ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:bindings ], + owl:onProperty linkml:required ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:equals_number ], + owl:onProperty linkml:structured_pattern ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:equals_string ], + owl:onProperty linkml:exact_cardinality ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:array ], + owl:onProperty linkml:any_of ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:inlined ], + owl:maxCardinality 1 ; + owl:onProperty linkml:range_expression ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousSlotExpression ; - owl:onProperty linkml:all_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Element ; - owl:onProperty linkml:range ], + owl:allValuesFrom linkml:PresenceEnum ; + owl:onProperty linkml:value_presence ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:exactly_one_of ], + owl:onProperty linkml:maximum_cardinality ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:inlined ], + owl:onProperty linkml:recommended ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:exact_cardinality ], + owl:onProperty linkml:minimum_cardinality ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:pattern ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:recommended ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:recommended ], + owl:onProperty linkml:unit ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:any_of ], + owl:minCardinality 0 ; + owl:onProperty linkml:equals_expression ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:minimum_cardinality ], + owl:onProperty linkml:range_expression ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:inlined_as_list ], + owl:onProperty linkml:multivalued ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousSlotExpression ; - owl:onProperty linkml:exactly_one_of ], + owl:allValuesFrom linkml:ArrayExpression ; + owl:onProperty linkml:array ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:range ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:range_expression ], + owl:onProperty linkml:inlined ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:enum_range ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:structured_pattern ], + owl:onProperty linkml:pattern ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty linkml:maximum_cardinality ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:range_expression ], + owl:onProperty linkml:recommended ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:equals_string ], + owl:minCardinality 0 ; + owl:onProperty linkml:has_member ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:minimum_cardinality ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:exactly_one_of ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:equals_string_in ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; + owl:onProperty linkml:equals_string_in ], + [ a owl:Restriction ; + owl:minCardinality 0 ; owl:onProperty linkml:pattern ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:none_of ], + owl:onProperty linkml:range ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:value_presence ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:exactly_one_of ], + owl:onProperty linkml:minimum_cardinality ], [ a owl:Restriction ; - owl:allValuesFrom linkml:ArrayExpression ; - owl:onProperty linkml:array ], + owl:allValuesFrom linkml:Element ; + owl:onProperty linkml:range ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:equals_string ], + owl:onProperty linkml:unit ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:minimum_cardinality ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Anything ; - owl:onProperty linkml:maximum_value ], + owl:onProperty linkml:equals_string ], [ a owl:Restriction ; owl:allValuesFrom linkml:EnumExpression ; owl:onProperty linkml:enum_range ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:required ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:maximum_cardinality ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:required ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:pattern ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:value_presence ], + owl:onProperty linkml:inlined_as_list ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:any_of ], + owl:onProperty linkml:enum_range ], [ a owl:Restriction ; owl:allValuesFrom linkml:AnonymousSlotExpression ; - owl:onProperty linkml:none_of ], + owl:onProperty linkml:all_of ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:implicit_prefix ], + owl:allValuesFrom linkml:PatternExpression ; + owl:onProperty linkml:structured_pattern ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:none_of ], + owl:onProperty linkml:range ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:value_presence ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:equals_expression ], + owl:onProperty linkml:bindings ], [ a owl:Restriction ; - owl:allValuesFrom linkml:PresenceEnum ; - owl:onProperty linkml:value_presence ], + owl:maxCardinality 1 ; + owl:onProperty linkml:maximum_cardinality ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:recommended ], + owl:onProperty linkml:minimum_value ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:implicit_prefix ], + owl:maxCardinality 1 ; + owl:onProperty linkml:has_member ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:maximum_cardinality ], + owl:minCardinality 0 ; + owl:onProperty linkml:maximum_value ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:has_member ], + owl:onProperty linkml:all_members ], linkml:Expression ; skos:definition "an expression that constrains the range of values a slot can take" ; skos:inScheme linkml:meta . @@ -2841,14 +2814,8 @@ linkml:StructuredAlias a owl:Class, linkml:ClassDefinition ; rdfs:label "structured_alias" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 1 ; owl:onProperty linkml:literal_form ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:categories ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:AliasPredicateEnum ; - owl:onProperty linkml:alias_predicate ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uri ; owl:onProperty linkml:alias_contexts ], @@ -2856,19 +2823,25 @@ linkml:StructuredAlias a owl:Class, owl:maxCardinality 1 ; owl:onProperty linkml:alias_predicate ], [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:maxCardinality 1 ; owl:onProperty linkml:literal_form ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:literal_form ], + [ a owl:Restriction ; + owl:minCardinality 0 ; owl:onProperty linkml:categories ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:alias_contexts ], + owl:onProperty linkml:alias_predicate ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:literal_form ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:categories ], [ a owl:Restriction ; owl:minCardinality 0 ; + owl:onProperty linkml:alias_contexts ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:AliasPredicateEnum ; owl:onProperty linkml:alias_predicate ], linkml:Annotatable, linkml:CommonMetadata, @@ -2890,29 +2863,29 @@ linkml:UniqueKey a owl:Class, linkml:ClassDefinition ; rdfs:label "unique_key" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:unique_key_name ], + 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_name ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:consider_nulls_inequal ], + 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 ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty linkml:unique_key_slots ], - [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:consider_nulls_inequal ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:unique_key_slots ], linkml:Annotatable, linkml:CommonMetadata, linkml:Extensible ; @@ -2924,35 +2897,44 @@ linkml:UnitOfMeasure a owl:Class, linkml:ClassDefinition ; rdfs:label "UnitOfMeasure" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:symbol ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:descriptive_name ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:abbreviation ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:exact_mappings ], + owl:onProperty linkml:symbol ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:abbreviation ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:iec61360code ], + [ 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:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:has_quantity_kind ], + owl:onProperty linkml:exact_mappings ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:has_quantity_kind ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:iec61360code ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:iec61360code ], + owl:onProperty linkml:ucum_code ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:has_quantity_kind ], + owl:onProperty linkml:symbol ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:descriptive_name ], + owl:maxCardinality 1 ; + owl:onProperty linkml:ucum_code ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:abbreviation ], + owl:minCardinality 0 ; + owl:onProperty linkml:iec61360code ], [ owl:unionOf ( [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:ucum_code ] [ a owl:Restriction ; @@ -2963,45 +2945,36 @@ linkml:UnitOfMeasure a owl:Class, owl:allValuesFrom linkml:String ; owl:onProperty linkml:exact_mappings ] ) ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:iec61360code ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:ucum_code ], + owl:minCardinality 0 ; + owl:onProperty linkml:abbreviation ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:derivation ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:ucum_code ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:exact_mappings ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:derivation ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:symbol ], + owl:minCardinality 0 ; + owl:onProperty linkml:descriptive_name ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:symbol ], + owl:minCardinality 0 ; + owl:onProperty linkml:exact_mappings ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:has_quantity_kind ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:descriptive_name ], + owl:onProperty linkml:has_quantity_kind ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:descriptive_name ], - [ a owl:Restriction ; - owl:minCardinality 0 ; owl:onProperty linkml:ucum_code ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:abbreviation ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:symbol ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:derivation ] ; - 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)." ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:has_quantity_kind ] ; + 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 ; skos:inScheme linkml:units . @@ -3024,6 +2997,29 @@ 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:identifier a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "identifier" ; + rdfs:domain linkml:SlotDefinition ; + rdfs:range linkml:Boolean ; + rdfs:seeAlso , + , + , + linkml:key, + linkml:unique_keys ; + skos:altLabel "ID", + "UID", + "code", + "primary key" ; + skos:definition "True means that the slot is the identifier slot of its class. Such a slot uniquely identifies instances of the class throughout an entire document, meaning there cannot be two (or more) instances of the class (or instances of any of its descendants) with the same value for the identifier slot anywhere in the document." ; + skos:inScheme linkml:meta ; + skos:note "A domain can have at most one identifier slot OR a key slot. However a domain can have both an identifier slot and any number of compound keys.", + "An identifier slot is automatically required. Identifiers cannot be optional.", + "The identifier slot is inherited.", + "The presence of an identifier slot makes a class eligible for being referenced rather than inlined.", + "The presence of an identifier slot makes a class eligible for inlining as a dictionary." ; + sh:order 5 . + linkml:implements a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "implements" ; @@ -3041,44 +3037,60 @@ linkml:is_grouping_slot a owl:ObjectProperty, skos:definition "true if this slot is a grouping slot" ; 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:allValuesFrom linkml:Integer ; +linkml:key a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "key" ; + rdfs:domain linkml:SlotDefinition ; + rdfs:range linkml:Boolean ; + rdfs:seeAlso , + , + linkml:identifier, + linkml:unique_keys ; + skos:definition "True means that the slot is the \"singular unique key\" (also known more simply as the \"key slot\") of its class. Such a slot uniquely identifies instances of the class within a single container, meaning there cannot be two (or more) instances of the class (or instances of any of its descendants) with the same value for the key slot within the container." ; + skos:inScheme linkml:meta ; + skos:note "A domain can have at most one key slot OR one identifier slot. However a domain can have both a key slot and any number of compound keys.", + "A key slot is automatically required. Singular unique keys cannot be optional.", + "The key slot is inherited.", + "The presence of a key slot makes a class eligible for inlining as a dictionary." . + +linkml:ArrayExpression a owl:Class, + linkml:ClassDefinition ; + rdfs:label "array_expression" ; + bibo:status ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty linkml:minimum_number_dimensions ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:minimum_number_dimensions ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:maximum_number_dimensions ], + owl:allValuesFrom linkml:DimensionExpression ; + owl:onProperty linkml:dimensions ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty linkml:exact_number_dimensions ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + 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 ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:dimensions ], + owl:maxCardinality 1 ; + owl:onProperty linkml:exact_number_dimensions ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:maximum_number_dimensions ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:exact_number_dimensions ], + owl:onProperty linkml:dimensions ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:exact_number_dimensions ], + owl:minCardinality 0 ; + owl:onProperty linkml:maximum_number_dimensions ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty linkml:exact_number_dimensions ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:minimum_number_dimensions ], linkml:Annotatable, linkml:CommonMetadata, linkml:Extensible ; @@ -3089,14 +3101,17 @@ linkml:Extension a owl:Class, linkml:ClassDefinition ; rdfs:label "extension" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Extension ; + owl:minCardinality 0 ; owl:onProperty linkml:extensions ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty linkml:extension_tag ], + 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:maxCardinality 1 ; owl:onProperty linkml:extension_tag ], @@ -3104,14 +3119,11 @@ linkml:Extension a owl:Class, owl:maxCardinality 1 ; owl:onProperty linkml:extension_value ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty linkml:extension_value ], + owl:allValuesFrom linkml:Extension ; + owl:onProperty linkml:extensions ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:extension_tag ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:extensions ] ; + owl:onProperty linkml:extension_tag ] ; skos:definition "a tag/value pair used to add non-model information to an entry" ; skos:inScheme linkml:extensions . @@ -3120,31 +3132,31 @@ linkml:PatternExpression a owl:Class, rdfs:label "pattern_expression" ; rdfs:subClassOf [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:syntax ], + owl:onProperty linkml:partial_match ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:syntax ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:interpolated ], + owl:onProperty linkml:partial_match ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:syntax ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:interpolated ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:partial_match ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:partial_match ], + owl:maxCardinality 1 ; + owl:onProperty linkml:interpolated ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:interpolated ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:partial_match ], + owl:onProperty linkml:syntax ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:interpolated ], linkml:Annotatable, linkml:CommonMetadata, linkml:Extensible ; @@ -3155,68 +3167,68 @@ linkml:PermissibleValue a owl:Class, linkml:ClassDefinition ; rdfs:label "permissible_value" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:description ], - [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:unit ], + owl:onProperty linkml:text ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:is_a ], + owl:onProperty linkml:meaning ], [ a owl:Restriction ; owl:allValuesFrom linkml:PermissibleValue ; - owl:onProperty linkml:is_a ], + owl:onProperty linkml:mixins ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:implements ], + owl:minCardinality 0 ; + owl:onProperty linkml:description ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:meaning ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:mixins ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:description ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:minCardinality 1 ; + owl:onProperty linkml:text ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:implements ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:description ], + owl:onProperty linkml:is_a ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:is_a ], + owl:onProperty linkml:meaning ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:description ], + owl:onProperty linkml:text ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:unit ], + owl:onProperty linkml:implements ], [ a owl:Restriction ; owl:allValuesFrom linkml:UnitOfMeasure ; owl:onProperty linkml:unit ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:meaning ], + owl:minCardinality 0 ; + owl:onProperty linkml:unit ], [ a owl:Restriction ; - owl:allValuesFrom linkml:PermissibleValue ; - owl:onProperty linkml:mixins ], + owl:maxCardinality 1 ; + owl:onProperty linkml:unit ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty linkml:text ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:instantiates ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:text ], + owl:onProperty linkml:description ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:instantiates ], + owl:onProperty linkml:is_a ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:text ], + owl:allValuesFrom linkml:PermissibleValue ; + owl:onProperty linkml:is_a ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:meaning ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:instantiates ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:mixins ], linkml:Annotatable, linkml:CommonMetadata, linkml:Extensible ; @@ -3230,23 +3242,23 @@ linkml:Setting a owl:Class, linkml:ClassDefinition ; rdfs:label "setting" ; rdfs:subClassOf [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty linkml:setting_value ], + [ a owl:Restriction ; owl:allValuesFrom linkml:Ncname ; owl:onProperty linkml:setting_key ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:maxCardinality 1 ; owl:onProperty linkml:setting_value ], [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:allValuesFrom linkml:String ; owl:onProperty linkml:setting_value ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:setting_key ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty linkml:setting_key ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:setting_value ] ; + owl:onProperty linkml:setting_key ] ; skos:definition "assignment of a key to a value" ; skos:inScheme linkml:meta . @@ -3478,32 +3490,32 @@ linkml:PathExpression a owl:Class, linkml:ClassDefinition ; rdfs:label "path_expression" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:PathExpression ; - owl:onProperty linkml:followed_by ], + owl:minCardinality 0 ; + owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:range_expression ], + owl:onProperty linkml:reversed ], [ a owl:Restriction ; owl:allValuesFrom linkml:SlotDefinition ; owl:onProperty linkml:traverse ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:none_of ], + owl:onProperty linkml:traverse ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:all_of ], + owl:allValuesFrom linkml:PathExpression ; + owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; + owl:onProperty linkml:traverse ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:reversed ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:exactly_one_of ], + owl:onProperty linkml:all_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; + owl:maxCardinality 1 ; owl:onProperty linkml:reversed ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:PathExpression ; - owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:none_of ], @@ -3511,44 +3523,44 @@ linkml:PathExpression a owl:Class, owl:allValuesFrom linkml:AnonymousClassExpression ; owl:onProperty linkml:range_expression ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:PathExpression ; + 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:traverse ], + owl:onProperty linkml:all_of ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:traverse ], + owl:maxCardinality 1 ; + owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:any_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:followed_by ], + owl:onProperty linkml:none_of ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:exactly_one_of ], + owl:allValuesFrom linkml:PathExpression ; + owl:onProperty linkml:any_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:PathExpression ; + owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:reversed ], + owl:onProperty linkml:range_expression ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:followed_by ], [ a owl:Restriction ; - owl:allValuesFrom linkml:PathExpression ; - owl:onProperty linkml:none_of ], + owl:minCardinality 0 ; + owl:onProperty linkml:followed_by ], [ a owl:Restriction ; owl:allValuesFrom linkml:PathExpression ; - owl:onProperty linkml:any_of ], + owl:onProperty linkml:followed_by ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:any_of ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:all_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:PathExpression ; - owl:onProperty linkml:all_of ], linkml:Annotatable, linkml:CommonMetadata, linkml:Expression, @@ -3560,53 +3572,53 @@ linkml:ReachabilityQuery a owl:Class, linkml:ClassDefinition ; rdfs:label "reachability_query" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; + owl:maxCardinality 1 ; owl:onProperty linkml:is_direct ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:source_ontology ], + owl:onProperty linkml:is_direct ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:source_ontology ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:traverse_up ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:relationship_types ], + owl:minCardinality 0 ; + owl:onProperty linkml:include_self ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:traverse_up ], + owl:minCardinality 0 ; + owl:onProperty linkml:source_ontology ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:source_nodes ], + owl:onProperty linkml:relationship_types ], [ 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:onProperty linkml:source_nodes ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:include_self ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:relationship_types ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:traverse_up ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:include_self ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:include_self ], + owl:onProperty linkml:source_ontology ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:is_direct ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:source_nodes ], + owl:onProperty linkml:relationship_types ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:is_direct ], + owl:onProperty linkml:source_nodes ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:traverse_up ] ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:source_ontology ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:include_self ] ; 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 . @@ -3714,13 +3726,13 @@ linkml:EnumDefinition a owl:Class, linkml:ClassDefinition ; rdfs:label "enum_definition" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:enum_uri ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; + owl:minCardinality 0 ; owl:onProperty linkml:enum_uri ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:enum_uri ], linkml:Definition, linkml:EnumExpression ; @@ -3816,248 +3828,248 @@ linkml:CommonMetadata a owl:Class, linkml:ClassDefinition ; rdfs:label "common_metadata" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:source ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:close_mappings ], - [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:status ], + owl:onProperty linkml:deprecated_element_has_possible_replacement ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:in_language ], + owl:onProperty linkml:aliases ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:exact_mappings ], + owl:minCardinality 0 ; + owl:onProperty linkml:created_by ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:modified_by ], + owl:allValuesFrom linkml:Uri ; + owl:onProperty linkml:from_schema ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:aliases ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:categories ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:mappings ], + owl:onProperty linkml:description ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:modified_by ], + owl:onProperty linkml:rank ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:last_updated_on ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:categories ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty linkml:rank ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:close_mappings ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:notes ], + owl:onProperty linkml:in_language ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:in_language ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:title ], + owl:onProperty linkml:status ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:from_schema ], + owl:onProperty linkml:alt_descriptions ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:imported_from ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:status ], + owl:onProperty linkml:categories ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:in_language ], + owl:onProperty linkml:status ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:mappings ], + owl:minCardinality 0 ; + owl:onProperty linkml:see_also ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:created_on ], + owl:onProperty linkml:imported_from ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:deprecated ], + owl:onProperty linkml:title ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:broad_mappings ], + owl:maxCardinality 1 ; + owl:onProperty linkml:title ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:exact_mappings ], + owl:onProperty linkml:keywords ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:deprecated_element_has_exact_replacement ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:contributors ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Datetime ; - owl:onProperty linkml:created_on ], + owl:minCardinality 0 ; + owl:onProperty linkml:deprecated ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:comments ], + owl:onProperty linkml:contributors ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:deprecated_element_has_exact_replacement ], + owl:onProperty linkml:narrow_mappings ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty linkml:deprecated ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:status ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:rank ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:comments ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:examples ], + owl:maxCardinality 1 ; + owl:onProperty linkml:description ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:source ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:title ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:deprecated_element_has_possible_replacement ], + owl:onProperty linkml:rank ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:broad_mappings ], + owl:allValuesFrom linkml:SubsetDefinition ; + owl:onProperty linkml:in_subset ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:deprecated_element_has_exact_replacement ], + owl:onProperty linkml:exact_mappings ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:imported_from ], + owl:minCardinality 0 ; + owl:onProperty linkml:description ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:alt_descriptions ], + owl:onProperty linkml:todos ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:rank ], + owl:maxCardinality 1 ; + owl:onProperty linkml:from_schema ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:related_mappings ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:notes ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:notes ], + owl:onProperty linkml:deprecated_element_has_possible_replacement ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:narrow_mappings ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:AltDescription ; + owl:onProperty linkml:alt_descriptions ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:source ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:from_schema ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:created_by ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:modified_by ], + owl:onProperty linkml:from_schema ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:imported_from ], + owl:onProperty linkml:created_by ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:contributors ], + owl:onProperty linkml:exact_mappings ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:keywords ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:deprecated ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:categories ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:last_updated_on ], + owl:onProperty linkml:structured_aliases ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:created_by ], + owl:onProperty linkml:mappings ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:imported_from ], + owl:onProperty linkml:related_mappings ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:created_by ], + owl:onProperty linkml:source ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:created_by ], + owl:onProperty linkml:title ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:deprecated ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:todos ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:narrow_mappings ], + owl:onProperty linkml:close_mappings ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:aliases ], + owl:onProperty linkml:modified_by ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Datetime ; + owl:onProperty linkml:last_updated_on ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:deprecated_element_has_possible_replacement ], + owl:onProperty linkml:created_on ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:todos ], + owl:maxCardinality 1 ; + owl:onProperty linkml:deprecated_element_has_exact_replacement ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:title ], + owl:onProperty linkml:deprecated_element_has_possible_replacement ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:description ], + owl:minCardinality 0 ; + owl:onProperty linkml:in_language ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Example ; - owl:onProperty linkml:examples ], + owl:minCardinality 0 ; + owl:onProperty linkml:mappings ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:keywords ], + owl:onProperty linkml:examples ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:narrow_mappings ], + owl:onProperty linkml:deprecated_element_has_exact_replacement ], [ a owl:Restriction ; owl:allValuesFrom linkml:Datetime ; + owl:onProperty linkml:created_on ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:modified_by ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:imported_from ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty linkml:last_updated_on ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:rank ], + owl:onProperty linkml:broad_mappings ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:todos ], + owl:maxCardinality 1 ; + owl:onProperty linkml:modified_by ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:comments ], + owl:minCardinality 0 ; + owl:onProperty linkml:deprecated_element_has_exact_replacement ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:deprecated_element_has_possible_replacement ], + owl:onProperty linkml:broad_mappings ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:description ], + owl:onProperty linkml:created_on ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:in_subset ], + owl:onProperty linkml:aliases ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:structured_aliases ], + owl:onProperty linkml:comments ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SubsetDefinition ; - owl:onProperty linkml:in_subset ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:deprecated ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:see_also ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:see_also ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:related_mappings ], + owl:onProperty linkml:notes ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uri ; - owl:onProperty linkml:from_schema ], + owl:minCardinality 0 ; + owl:onProperty linkml:in_subset ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:close_mappings ], + owl:allValuesFrom linkml:Example ; + owl:onProperty linkml:examples ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:description ], + owl:allValuesFrom linkml:StructuredAlias ; + owl:onProperty linkml:structured_aliases ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:contributors ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:created_on ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:AltDescription ; - owl:onProperty linkml:alt_descriptions ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:in_language ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:StructuredAlias ; - owl:onProperty linkml:structured_aliases ] ; + owl:onProperty linkml:related_mappings ] ; skos:definition "Generic metadata shared across definitions" ; skos:inScheme linkml:meta . @@ -4085,10 +4097,10 @@ linkml:Extensible a owl:Class, linkml:ClassDefinition ; rdfs:label "extensible" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:Extension ; owl:onProperty linkml:extensions ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Extension ; + owl:minCardinality 0 ; owl:onProperty linkml:extensions ] ; skos:definition "mixin for classes that support extension" ; skos:inScheme linkml:extensions . @@ -4098,46 +4110,46 @@ linkml:TypeDefinition a owl:Class, rdfs:label "type_definition" ; rdfs:subClassOf [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:repr ], + owl:onProperty linkml:type_uri ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:union_of ], + owl:onProperty linkml:repr ], [ a owl:Restriction ; owl:allValuesFrom linkml:TypeDefinition ; owl:onProperty linkml:union_of ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:repr ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:type_uri ], [ a owl:Restriction ; - owl:allValuesFrom linkml:TypeDefinition ; + owl:maxCardinality 1 ; owl:onProperty linkml:typeof ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:typeof ], + owl:onProperty linkml:base ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:type_uri ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:repr ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:base ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:type_uri ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; 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:base ], + owl:onProperty linkml:typeof ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:maxCardinality 1 ; owl:onProperty linkml:repr ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:TypeDefinition ; owl:onProperty linkml:typeof ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + 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" ; @@ -4160,58 +4172,67 @@ linkml:EnumExpression a owl:Class, linkml:ClassDefinition ; rdfs:label "enum_expression" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:concepts ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:reachable_from ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:EnumDefinition ; - owl:onProperty linkml:inherits ], + owl:minCardinality 0 ; + owl:onProperty linkml:code_set ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:minus ], + owl:onProperty linkml:include ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:permissible_values ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:code_set ], + owl:onProperty linkml:reachable_from ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:AnonymousEnumExpression ; owl:onProperty linkml:include ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:matches ], + owl:onProperty linkml:code_set_version ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:reachable_from ], + owl:onProperty linkml:minus ], [ a owl:Restriction ; - owl:allValuesFrom linkml:ReachabilityQuery ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:code_set_version ], + [ a owl:Restriction ; + owl:minCardinality 0 ; owl:onProperty linkml:reachable_from ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:concepts ], [ a owl:Restriction ; owl:allValuesFrom linkml:AnonymousEnumExpression ; owl:onProperty linkml:minus ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousEnumExpression ; - owl:onProperty linkml:include ], + owl:minCardinality 0 ; + owl:onProperty linkml:inherits ], [ a owl:Restriction ; - owl:allValuesFrom linkml:PermissibleValue ; - owl:onProperty linkml:permissible_values ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:code_set_tag ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:code_set_version ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; owl:onProperty linkml:pv_formula ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:MatchQuery ; + owl:onProperty linkml:matches ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:EnumDefinition ; + owl:onProperty linkml:inherits ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:code_set_tag ], + owl:onProperty linkml:code_set_version ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:code_set ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:PermissibleValue ; + owl:onProperty linkml:permissible_values ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:concepts ], [ a owl:Restriction ; - owl:allValuesFrom linkml:MatchQuery ; + owl:maxCardinality 1 ; owl:onProperty linkml:matches ], [ a owl:Restriction ; owl:minCardinality 0 ; @@ -4220,29 +4241,20 @@ linkml:EnumExpression a owl:Class, owl:allValuesFrom linkml:PvFormulaOptions ; owl:onProperty linkml:pv_formula ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:code_set_version ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:code_set_version ], + owl:allValuesFrom linkml:ReachabilityQuery ; + owl:onProperty linkml:reachable_from ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:matches ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:code_set_tag ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:inherits ], + owl:onProperty linkml:pv_formula ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; + owl:maxCardinality 1 ; owl:onProperty linkml:code_set ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:pv_formula ], + owl:onProperty linkml:matches ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:code_set ], + 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 . @@ -4270,14 +4282,14 @@ 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 ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Definition ; + owl:onProperty linkml:is_a ], linkml:AnonymousExpression, linkml:ClassExpression ; skos:inScheme linkml:meta . @@ -4287,179 +4299,179 @@ linkml:SchemaDefinition a owl:Class, rdfs:label "schema_definition" ; rdfs:seeAlso ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:slot_names_unique ], + owl:maxCardinality 1 ; + owl:onProperty linkml:source_file_size ], [ a owl:Restriction ; owl:minCardinality 0 ; + owl:onProperty linkml:generation_date ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; owl:onProperty linkml:default_curi_maps ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:bindings ], + owl:onProperty linkml:source_file ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:source_file_date ], + owl:onProperty linkml:slot_names_unique ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:settings ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:default_range ], + owl:onProperty linkml:subsets ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:version ], [ a owl:Restriction ; - owl:allValuesFrom linkml:TypeDefinition ; - owl:onProperty linkml:default_range ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:slot_names_unique ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:name ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty linkml:id ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:types ], + owl:onProperty linkml:default_curi_maps ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:source_file ], + owl:onProperty linkml:default_prefix ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:version ], + owl:minCardinality 0 ; + owl:onProperty linkml:types ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:generation_date ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:metamodel_version ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:source_file ], + owl:onProperty linkml:license ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:enums ], + owl:maxCardinality 1 ; + owl:onProperty linkml:version ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:default_prefix ], + owl:allValuesFrom linkml:Setting ; + owl:onProperty linkml:settings ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:source_file_size ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:source_file_size ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:EnumBinding ; - owl:onProperty linkml:bindings ], + owl:onProperty linkml:enums ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:default_curi_maps ], + owl:onProperty linkml:metamodel_version ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:classes ], + owl:onProperty linkml:source_file_size ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:default_range ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:license ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:subsets ], + owl:onProperty linkml:settings ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:prefixes ], + owl:maxCardinality 1 ; + owl:onProperty linkml:metamodel_version ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:slot_names_unique ], + owl:onProperty linkml:emit_prefixes ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty linkml:name ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:slot_definitions ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:generation_date ], + owl:onProperty linkml:classes ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty linkml:default_prefix ], [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassDefinition ; - owl:onProperty linkml:classes ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:SubsetDefinition ; - owl:onProperty linkml:subsets ], + owl:allValuesFrom linkml:Prefix ; + owl:onProperty linkml:prefixes ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:slot_names_unique ], + owl:allValuesFrom linkml:EnumBinding ; + owl:onProperty linkml:bindings ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:imports ], + owl:allValuesFrom linkml:TypeDefinition ; + owl:onProperty linkml:types ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:license ], + owl:onProperty linkml:source_file_date ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:slot_definitions ], + owl:allValuesFrom linkml:SubsetDefinition ; + owl:onProperty linkml:subsets ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:imports ], + owl:allValuesFrom linkml:EnumDefinition ; + owl:onProperty linkml:enums ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:Datetime ; owl:onProperty linkml:source_file_date ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:metamodel_version ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Prefix ; - owl:onProperty linkml:prefixes ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:source_file_size ], + owl:onProperty linkml:source_file ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty linkml:license ], + [ a owl:Restriction ; + owl:minCardinality 1 ; owl:onProperty linkml:name ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Ncname ; - owl:onProperty linkml:emit_prefixes ], + owl:allValuesFrom linkml:Datetime ; + owl:onProperty linkml:generation_date ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:id ], + owl:onProperty linkml:default_range ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:emit_prefixes ], + owl:allValuesFrom linkml:TypeDefinition ; + owl:onProperty linkml:default_range ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:source_file ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Datetime ; - owl:onProperty linkml:source_file_date ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:EnumDefinition ; - owl:onProperty linkml:enums ], + owl:onProperty linkml:license ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:metamodel_version ], + owl:onProperty linkml:default_prefix ], [ a owl:Restriction ; - owl:allValuesFrom linkml:TypeDefinition ; - owl:onProperty linkml:types ], + owl:allValuesFrom linkml:Ncname ; + owl:onProperty linkml:name ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:version ], + owl:onProperty linkml:slot_definitions ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:license ], + owl:minCardinality 0 ; + owl:onProperty linkml:metamodel_version ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Setting ; - owl:onProperty linkml:settings ], + owl:minCardinality 0 ; + owl:onProperty linkml:prefixes ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Datetime ; - owl:onProperty linkml:generation_date ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:source_file ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Ncname ; - owl:onProperty linkml:name ], + owl:minCardinality 0 ; + owl:onProperty linkml:bindings ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:default_prefix ], + owl:allValuesFrom linkml:Integer ; + owl:onProperty linkml:source_file_size ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty linkml:id ], + owl:minCardinality 0 ; + owl:onProperty linkml:version ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uri ; owl:onProperty linkml:id ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:slot_definitions ], + owl:onProperty linkml:imports ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:imports ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:slot_names_unique ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:id ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:source_file_date ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:ClassDefinition ; + owl:onProperty linkml:classes ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Ncname ; + owl:onProperty linkml:emit_prefixes ], linkml:Element ; skos:altLabel "data dictionary", "data model", @@ -4478,60 +4490,60 @@ linkml:Definition a owl:Class, rdfs:label "definition" ; rdfs:seeAlso ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:abstract ], - [ owl:unionOf ( linkml:ClassDefinition linkml:EnumDefinition linkml:SlotDefinition ) ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:Definition ; owl:onProperty linkml:is_a ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:values_from ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:abstract ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:mixin ], + [ owl:unionOf ( linkml:ClassDefinition linkml:EnumDefinition linkml:SlotDefinition ) ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:string_serialization ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Definition ; - owl:onProperty linkml:mixins ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:mixin ], + owl:onProperty linkml:string_serialization ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:apply_to ], + owl:onProperty linkml:is_a ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:values_from ], + owl:maxCardinality 1 ; + owl:onProperty linkml:mixin ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:abstract ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:is_a ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:string_serialization ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:mixins ], + owl:onProperty linkml:mixin ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:string_serialization ], + owl:onProperty linkml:abstract ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Definition ; - owl:onProperty linkml:is_a ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:mixin ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:is_a ], + owl:onProperty linkml:values_from ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Definition ; + owl:onProperty linkml:mixins ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:mixin ], + owl:onProperty linkml:apply_to ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:string_serialization ], + owl:minCardinality 0 ; + owl:onProperty linkml:mixins ], [ a owl:Restriction ; owl:allValuesFrom linkml:Definition ; owl:onProperty linkml:apply_to ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:values_from ], linkml:Element ; skos:definition "abstract base class for core metaclasses" ; skos:inScheme linkml:meta . @@ -4541,66 +4553,66 @@ linkml:Element a owl:Class, rdfs:label "element" ; rdfs:seeAlso ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:definition_uri ], + owl:allValuesFrom linkml:LocalName ; + owl:onProperty linkml:local_names ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:instantiates ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:name ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Ncname ; - owl:onProperty linkml:id_prefixes ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:definition_uri ], - [ owl:unionOf ( linkml:Definition linkml:SchemaDefinition linkml:SubsetDefinition linkml:TypeDefinition ) ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 1 ; owl:onProperty linkml:name ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:id_prefixes_are_closed ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:local_names ], + owl:onProperty linkml:conforms_to ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:implements ], + [ owl:unionOf ( linkml:Definition linkml:SchemaDefinition linkml:SubsetDefinition linkml:TypeDefinition ) ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:conforms_to ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:conforms_to ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty linkml:name ], - [ a owl:Restriction ; - owl:minCardinality 0 ; owl:onProperty linkml:definition_uri ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:LocalName ; - owl:onProperty linkml:local_names ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:id_prefixes_are_closed ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:id_prefixes ], + owl:maxCardinality 1 ; + owl:onProperty linkml:conforms_to ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:instantiates ], + owl:minCardinality 0 ; + owl:onProperty linkml:definition_uri ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; + owl:minCardinality 0 ; owl:onProperty linkml:implements ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:id_prefixes_are_closed ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:id_prefixes_are_closed ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:conforms_to ], + owl:maxCardinality 1 ; + owl:onProperty linkml:name ], [ a owl:Restriction ; owl:minCardinality 0 ; + owl:onProperty linkml:id_prefixes ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:definition_uri ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:instantiates ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Ncname ; + owl:onProperty linkml:id_prefixes ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:implements ], + owl:onProperty linkml:local_names ], linkml:Annotatable, linkml:CommonMetadata, linkml:Extensible ; @@ -4613,152 +4625,152 @@ linkml:ClassDefinition a owl:Class, linkml:ClassDefinition ; rdfs:label "class_definition" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:subclass_of ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:represents_relationship ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:tree_root ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:class_uri ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:children_are_mutually_disjoint ], + owl:maxCardinality 1 ; + owl:onProperty linkml:slot_names_unique ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; + owl:maxCardinality 1 ; owl:onProperty linkml:tree_root ], [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassDefinition ; - owl:onProperty linkml:is_a ], + owl:minCardinality 0 ; + owl:onProperty linkml:class_uri ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:slots ], + owl:onProperty linkml:slot_names_unique ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:alias ], + owl:allValuesFrom linkml:ClassDefinition ; + owl:onProperty linkml:apply_to ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty linkml:represents_relationship ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:union_of ], + owl:onProperty linkml:alias ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:slot_names_unique ], + owl:allValuesFrom linkml:ClassDefinition ; + owl:onProperty linkml:disjoint_with ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:class_uri ], + owl:onProperty linkml:classification_rules ], [ a owl:Restriction ; - owl:allValuesFrom linkml:ExtraSlotsExpression ; - owl:onProperty linkml:extra_slots ], + owl:allValuesFrom linkml:ClassRule ; + owl:onProperty linkml:rules ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:slot_usage ], + owl:onProperty linkml:is_a ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:slot_names_unique ], + owl:onProperty linkml:slot_usage ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:mixins ], + owl:allValuesFrom linkml:ClassDefinition ; + owl:onProperty linkml:is_a ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:disjoint_with ], + owl:onProperty linkml:slots ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:attributes ], + owl:onProperty linkml:children_are_mutually_disjoint ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:class_uri ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:alias ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:children_are_mutually_disjoint ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:apply_to ], + owl:onProperty linkml:union_of ], [ a owl:Restriction ; owl:allValuesFrom linkml:UniqueKey ; owl:onProperty linkml:unique_keys ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:extra_slots ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:is_a ], + owl:onProperty linkml:attributes ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:defining_slots ], + owl:maxCardinality 1 ; + owl:onProperty linkml:alias ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:AnonymousClassExpression ; owl:onProperty linkml:classification_rules ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:children_are_mutually_disjoint ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:subclass_of ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:slot_names_unique ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:tree_root ], + owl:allValuesFrom linkml:ExtraSlotsExpression ; + owl:onProperty linkml:extra_slots ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:subclass_of ], [ a owl:Restriction ; owl:allValuesFrom linkml:ClassDefinition ; owl:onProperty linkml:mixins ], [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassDefinition ; - owl:onProperty linkml:disjoint_with ], + owl:minCardinality 0 ; + owl:onProperty linkml:extra_slots ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:is_a ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:attributes ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:children_are_mutually_disjoint ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:slots ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:children_are_mutually_disjoint ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassDefinition ; owl:onProperty linkml:apply_to ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:rules ], + owl:maxCardinality 1 ; + owl:onProperty linkml:class_uri ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:attributes ], + owl:maxCardinality 1 ; + owl:onProperty linkml:is_a ], [ a owl:Restriction ; owl:allValuesFrom linkml:SlotDefinition ; owl:onProperty linkml:defining_slots ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:disjoint_with ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:extra_slots ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassRule ; - owl:onProperty linkml:rules ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:subclass_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:tree_root ], + owl:onProperty linkml:unique_keys ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousClassExpression ; - owl:onProperty linkml:classification_rules ], + owl:minCardinality 0 ; + owl:onProperty linkml:rules ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:represents_relationship ], + owl:minCardinality 0 ; + owl:onProperty linkml:defining_slots ], [ a owl:Restriction ; owl:allValuesFrom linkml:ClassDefinition ; owl:onProperty linkml:union_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:slot_usage ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:slots ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:subclass_of ], + owl:minCardinality 0 ; + owl:onProperty linkml:tree_root ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:alias ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:alias ], + owl:onProperty linkml:represents_relationship ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:unique_keys ], + owl:onProperty linkml:mixins ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:represents_relationship ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:slot_usage ], linkml:ClassExpression, linkml:Definition ; skos:altLabel "message", @@ -4806,348 +4818,348 @@ linkml:SlotDefinition a owl:Class, rdfs:label "slot_definition" ; rdfs:subClassOf [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:ifabsent ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:domain ], + owl:onProperty linkml:mixins ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:alias ], + owl:onProperty linkml:inherited ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:transitive_form_of ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:inherited ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:reflexive ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:children_are_mutually_disjoint ], + owl:onProperty linkml:role ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:list_elements_unique ], + owl:onProperty linkml:owner ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:subproperty_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:list_elements_ordered ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:reflexive_transitive_form_of ], + owl:onProperty linkml:symmetric ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:identifier ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:irreflexive ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:readonly ], + owl:onProperty linkml:reflexive ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Definition ; + owl:onProperty linkml:owner ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:locally_reflexive ], + owl:onProperty linkml:inherited ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:usage_slot_name ], + owl:onProperty linkml:symmetric ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:shared ], + owl:allValuesFrom linkml:ClassDefinition ; + owl:onProperty linkml:domain ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:subproperty_of ], + owl:allValuesFrom linkml:RelationalRoleEnum ; + owl:onProperty linkml:relational_role ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:role ], + owl:onProperty linkml:irreflexive ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:children_are_mutually_disjoint ], + owl:minCardinality 0 ; + owl:onProperty linkml:designates_type ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:relational_role ], + owl:onProperty linkml:singular_name ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:list_elements_ordered ], + owl:minCardinality 0 ; + owl:onProperty linkml:domain ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:mixins ], + owl:maxCardinality 1 ; + owl:onProperty linkml:identifier ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:slot_uri ], + owl:onProperty linkml:key ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:role ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:transitive ], + owl:onProperty linkml:is_usage_slot ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:readonly ], + owl:minCardinality 0 ; + owl:onProperty linkml:slot_group ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:TypeMapping ; + owl:onProperty linkml:type_mappings ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:owner ], + owl:onProperty linkml:asymmetric ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:reflexive_transitive_form_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:is_grouping_slot ], + owl:onProperty linkml:subproperty_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:PathExpression ; - owl:onProperty linkml:path_rule ], + owl:maxCardinality 1 ; + owl:onProperty linkml:role ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:inverse ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:designates_type ], + [ a owl:Restriction ; + owl:allValuesFrom owl:Thing ; + owl:onProperty linkml:reflexive_transitive_form_of ], [ a owl:Restriction ; owl:allValuesFrom linkml:SlotDefinition ; owl:onProperty linkml:disjoint_with ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:is_a ], + owl:onProperty linkml:is_usage_slot ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:key ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:symmetric ], + owl:onProperty linkml:asymmetric ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:irreflexive ], + owl:onProperty linkml:singular_name ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:irreflexive ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:shared ], + owl:onProperty linkml:usage_slot_name ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:list_elements_unique ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:key ], + owl:onProperty linkml:is_class_field ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:domain_of ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:ifabsent ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:type_mappings ], + owl:onProperty linkml:is_class_field ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:key ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:identifier ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:slot_group ], + owl:onProperty linkml:is_a ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:slot_group ], + owl:onProperty linkml:children_are_mutually_disjoint ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:domain ], + owl:onProperty linkml:readonly ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:is_grouping_slot ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:apply_to ], + owl:onProperty linkml:children_are_mutually_disjoint ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:alias ], + owl:onProperty linkml:locally_reflexive ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:identifier ], + owl:minCardinality 0 ; + owl:onProperty linkml:inverse ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; + owl:minCardinality 0 ; owl:onProperty linkml:slot_uri ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:is_a ], + owl:onProperty linkml:relational_role ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:symmetric ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:identifier ], + owl:onProperty linkml:shared ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:role ], + owl:minCardinality 0 ; + owl:onProperty linkml:children_are_mutually_disjoint ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:is_a ], + owl:minCardinality 0 ; + owl:onProperty linkml:shared ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:is_class_field ], + owl:minCardinality 0 ; + owl:onProperty linkml:transitive_form_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; + owl:maxCardinality 1 ; owl:onProperty linkml:transitive_form_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:apply_to ], + owl:onProperty linkml:alias ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:is_a ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:symmetric ], + owl:onProperty linkml:reflexive_transitive_form_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:subproperty_of ], + owl:allValuesFrom linkml:PathExpression ; + owl:onProperty linkml:path_rule ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:is_grouping_slot ], + owl:minCardinality 0 ; + owl:onProperty linkml:identifier ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:list_elements_unique ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; + owl:onProperty linkml:readonly ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty linkml:transitive ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:inherited ], + owl:maxCardinality 1 ; + owl:onProperty linkml:inverse ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:asymmetric ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:singular_name ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:apply_to ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:relational_role ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:designates_type ], + owl:onProperty linkml:list_elements_unique ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:slot_uri ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:ClassDefinition ; + owl:onProperty linkml:domain_of ], + [ a owl:Restriction ; + owl:allValuesFrom [ owl:intersectionOf ( [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:is_grouping_slot ] linkml:SlotDefinition ) ] ; + owl:onProperty linkml:slot_group ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:usage_slot_name ], + owl:onProperty linkml:singular_name ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:disjoint_with ], + owl:onProperty linkml:transitive ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:inherited ], + owl:onProperty linkml:slot_group ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:inverse ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassDefinition ; - owl:onProperty linkml:domain_of ], + owl:onProperty linkml:domain ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:ifabsent ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:transitive_form_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:reflexive ], - [ a owl:Restriction ; - owl:minCardinality 0 ; owl:onProperty linkml:irreflexive ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:subproperty_of ], + owl:onProperty linkml:disjoint_with ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:asymmetric ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:is_a ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:inherited ], + owl:maxCardinality 1 ; + owl:onProperty linkml:is_grouping_slot ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:union_of ], + owl:onProperty linkml:type_mappings ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:list_elements_ordered ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:locally_reflexive ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:path_rule ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassDefinition ; - owl:onProperty linkml:domain ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:children_are_mutually_disjoint ], + owl:onProperty linkml:usage_slot_name ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:reflexive ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:ifabsent ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:is_usage_slot ], + owl:onProperty linkml:is_grouping_slot ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:designates_type ], [ a owl:Restriction ; owl:allValuesFrom linkml:SlotDefinition ; owl:onProperty linkml:union_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:list_elements_unique ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:is_usage_slot ], + owl:onProperty linkml:apply_to ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:designates_type ], + owl:maxCardinality 1 ; + owl:onProperty linkml:slot_uri ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:String ; owl:onProperty linkml:transitive ], [ a owl:Restriction ; - owl:allValuesFrom linkml:RelationalRoleEnum ; - owl:onProperty linkml:relational_role ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:TypeMapping ; - owl:onProperty linkml:type_mappings ], + owl:maxCardinality 1 ; + owl:onProperty linkml:readonly ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:String ; owl:onProperty linkml:usage_slot_name ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:locally_reflexive ], + owl:onProperty linkml:ifabsent ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:locally_reflexive ], + owl:minCardinality 0 ; + owl:onProperty linkml:reflexive ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Definition ; + owl:maxCardinality 1 ; owl:onProperty linkml:owner ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:is_class_field ], - [ a owl:Restriction ; - owl:allValuesFrom owl:Thing ; - owl:onProperty linkml:reflexive_transitive_form_of ], + owl:onProperty linkml:shared ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:readonly ], + owl:onProperty linkml:is_grouping_slot ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:is_class_field ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:inverse ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:is_usage_slot ], + owl:onProperty linkml:alias ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:path_rule ], + owl:onProperty linkml:key ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:transitive_form_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:asymmetric ], + owl:onProperty linkml:list_elements_ordered ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:reflexive_transitive_form_of ], + owl:onProperty linkml:subproperty_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:singular_name ], + owl:minCardinality 0 ; + owl:onProperty linkml:locally_reflexive ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:inverse ], + owl:onProperty linkml:ifabsent ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:slot_uri ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:mixins ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:key ], + owl:onProperty linkml:is_usage_slot ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:role ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:symmetric ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:owner ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:designates_type ], + owl:onProperty linkml:alias ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:relational_role ], + owl:onProperty linkml:path_rule ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:alias ], - [ a owl:Restriction ; - owl:allValuesFrom [ owl:intersectionOf ( [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:is_grouping_slot ] linkml:SlotDefinition ) ] ; - owl:onProperty linkml:slot_group ], + owl:onProperty linkml:union_of ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:shared ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:reflexive ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:singular_name ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:is_class_field ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:mixins ], + owl:maxCardinality 1 ; + owl:onProperty linkml:list_elements_unique ], linkml:Definition, linkml:SlotExpression ; skos:altLabel "attribute", diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/protobuf/meta.proto b/packages/linkml_runtime/src/linkml_runtime/linkml_model/protobuf/meta.proto index 5fd517e2ce..7a2d796ecc 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/protobuf/meta.proto +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/protobuf/meta.proto @@ -1152,7 +1152,7 @@ message UniqueKey repeated uriorcurie categories = 0 repeated string keywords = 0 } -// 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). +// 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). message UnitOfMeasure { string symbol = 0 diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/annotations.model.ttl b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/annotations.model.ttl index 0d8450e532..9aa76b6938 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/annotations.model.ttl +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/annotations.model.ttl @@ -240,13 +240,13 @@ linkml:annotations a linkml:SchemaDefinition, linkml:domain_of linkml:Annotatable, linkml:Annotation ; linkml:emit_prefixes "linkml" ; - linkml:generation_date "2026-05-05T18:49:20"^^xsd:dateTime ; + linkml:generation_date "2026-08-12T09:42:20"^^xsd:dateTime ; linkml:id "https://w3id.org/linkml/annotations"^^xsd:anyURI ; linkml:imports "linkml:extensions"^^xsd:anyURI, "linkml:types"^^xsd:anyURI ; linkml:inlined true ; linkml:is_a linkml:extensions ; - linkml:metamodel_version "1.7.0" ; + linkml:metamodel_version "1.11.0" ; linkml:multivalued true ; linkml:owner linkml:Annotation ; linkml:range linkml:Annotation ; @@ -295,6 +295,9 @@ linkml:extension_tag a linkml:SlotDefinition ; linkml:extension_value a linkml:SlotDefinition ; skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; skos:prefLabel "value" ; + linkml:annotations [ a linkml:Annotation ; + skos:example true ; + linkml:tag linkml:simple_dict_value ] ; linkml:definition_uri "https://w3id.org/linkml/extension_value"^^xsd:anyURI ; linkml:description "the actual annotation" ; linkml:domain linkml:Extension ; @@ -316,6 +319,16 @@ linkml:Annotatable a linkml:ClassDefinition ; linkml:slot_usage [ ] ; linkml:slots linkml:annotations . +linkml:Extensible a linkml:ClassDefinition ; + skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; + linkml:class_uri "https://w3id.org/linkml/Extensible"^^xsd:anyURI ; + linkml:definition_uri "https://w3id.org/linkml/Extensible"^^xsd:anyURI ; + linkml:description "mixin for classes that support extension" ; + linkml:imported_from "linkml:extensions" ; + linkml:mixin true ; + linkml:slot_usage [ ] ; + linkml:slots linkml:extensions . + linkml:Annotation a linkml:ClassDefinition ; skos:inScheme "https://w3id.org/linkml/annotations"^^xsd:anyURI ; linkml:class_uri "https://w3id.org/linkml/Annotation"^^xsd:anyURI ; @@ -329,16 +342,6 @@ linkml:Annotation a linkml:ClassDefinition ; linkml:extension_value, linkml:extensions . -linkml:Extensible a linkml:ClassDefinition ; - skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; - linkml:class_uri "https://w3id.org/linkml/Extensible"^^xsd:anyURI ; - linkml:definition_uri "https://w3id.org/linkml/Extensible"^^xsd:anyURI ; - linkml:description "mixin for classes that support extension" ; - linkml:imported_from "linkml:extensions" ; - linkml:mixin true ; - linkml:slot_usage [ ] ; - linkml:slots linkml:extensions . - linkml:extensions a linkml:SlotDefinition ; skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; linkml:definition_uri "https://w3id.org/linkml/extensions"^^xsd:anyURI ; diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/annotations.ttl b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/annotations.ttl index f294d74985..fbaa9d57bc 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/annotations.ttl +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/annotations.ttl @@ -240,13 +240,13 @@ linkml:annotations a linkml:SchemaDefinition, linkml:domain_of linkml:Annotatable, linkml:Annotation ; linkml:emit_prefixes "linkml" ; - linkml:generation_date "2026-05-05T18:49:17"^^xsd:dateTime ; + linkml:generation_date "2026-08-12T09:42:18"^^xsd:dateTime ; linkml:id "https://w3id.org/linkml/annotations"^^xsd:anyURI ; linkml:imports "linkml:extensions"^^xsd:anyURI, "linkml:types"^^xsd:anyURI ; linkml:inlined true ; linkml:is_a linkml:extensions ; - linkml:metamodel_version "1.7.0" ; + linkml:metamodel_version "1.11.0" ; linkml:multivalued true ; linkml:owner linkml:Annotation ; linkml:range linkml:Annotation ; @@ -295,6 +295,9 @@ linkml:extension_tag a linkml:SlotDefinition ; linkml:extension_value a linkml:SlotDefinition ; skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; skos:prefLabel "value" ; + linkml:annotations [ a linkml:Annotation ; + skos:example true ; + linkml:tag linkml:simple_dict_value ] ; linkml:definition_uri "https://w3id.org/linkml/extension_value"^^xsd:anyURI ; linkml:description "the actual annotation" ; linkml:domain linkml:Extension ; @@ -316,6 +319,16 @@ linkml:Annotatable a linkml:ClassDefinition ; linkml:slot_usage [ ] ; linkml:slots linkml:annotations . +linkml:Extensible a linkml:ClassDefinition ; + skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; + linkml:class_uri "https://w3id.org/linkml/Extensible"^^xsd:anyURI ; + linkml:definition_uri "https://w3id.org/linkml/Extensible"^^xsd:anyURI ; + linkml:description "mixin for classes that support extension" ; + linkml:imported_from "linkml:extensions" ; + linkml:mixin true ; + linkml:slot_usage [ ] ; + linkml:slots linkml:extensions . + linkml:Annotation a linkml:ClassDefinition ; skos:inScheme "https://w3id.org/linkml/annotations"^^xsd:anyURI ; linkml:class_uri "https://w3id.org/linkml/Annotation"^^xsd:anyURI ; @@ -329,16 +342,6 @@ linkml:Annotation a linkml:ClassDefinition ; linkml:extension_value, linkml:extensions . -linkml:Extensible a linkml:ClassDefinition ; - skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; - linkml:class_uri "https://w3id.org/linkml/Extensible"^^xsd:anyURI ; - linkml:definition_uri "https://w3id.org/linkml/Extensible"^^xsd:anyURI ; - linkml:description "mixin for classes that support extension" ; - linkml:imported_from "linkml:extensions" ; - linkml:mixin true ; - linkml:slot_usage [ ] ; - linkml:slots linkml:extensions . - linkml:extensions a linkml:SlotDefinition ; skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; linkml:definition_uri "https://w3id.org/linkml/extensions"^^xsd:anyURI ; diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/datasets.model.ttl b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/datasets.model.ttl index 3868a60867..5ed5b095a6 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/datasets.model.ttl +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/datasets.model.ttl @@ -11,34 +11,36 @@ linkml:datasets a linkml:SchemaDefinition ; rdfs:seeAlso "https://specs.frictionlessdata.io/data-resource"^^xsd:anyURI, "https://www.w3.org/TR/hcls-dataset/"^^xsd:anyURI, "https://www.w3.org/TR/void/"^^xsd:anyURI ; - sh:declare [ sh:namespace "https://w3id.org/linkml/report"^^xsd:anyURI ; - sh:prefix "datasets" ], - [ sh:namespace "http://rdfs.org/ns/void#"^^xsd:anyURI ; + sh:declare [ sh:namespace "http://rdfs.org/ns/void#"^^xsd:anyURI ; sh:prefix "void" ], - [ sh:namespace "https://www.iana.org/assignments/media-types/"^^xsd:anyURI ; - sh:prefix "mediatypes" ], - [ sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; - sh:prefix "skos" ], - [ sh:namespace "http://www.w3.org/ns/formats/"^^xsd:anyURI ; - sh:prefix "formats" ], - [ sh:namespace "http://open-services.net/ns/core#"^^xsd:anyURI ; - sh:prefix "oslc" ], [ sh:namespace "http://purl.org/pav/"^^xsd:anyURI ; sh:prefix "pav" ], - [ sh:namespace "https://w3id.org/linkml/"^^xsd:anyURI ; - sh:prefix "linkml" ], - [ sh:namespace "http://www.w3.org/ns/dcat#"^^xsd:anyURI ; - sh:prefix "dcat" ], [ sh:namespace "http://purl.org/ontology/bibo/"^^xsd:anyURI ; sh:prefix "bibo" ], [ sh:namespace "http://schema.org/"^^xsd:anyURI ; sh:prefix "schema" ], - [ sh:namespace "https://specs.frictionlessdata.io/"^^xsd:anyURI ; - sh:prefix "frictionless" ], [ sh:namespace "http://www.w3.org/ns/csvw#"^^xsd:anyURI ; sh:prefix "csvw" ], + [ sh:namespace "http://open-services.net/ns/core#"^^xsd:anyURI ; + sh:prefix "oslc" ], + [ sh:namespace "https://specs.frictionlessdata.io/"^^xsd:anyURI ; + sh:prefix "frictionless" ], + [ sh:namespace "https://www.iana.org/assignments/media-types/"^^xsd:anyURI ; + sh:prefix "mediatypes" ], + [ sh:namespace "http://www.w3.org/ns/dcat#"^^xsd:anyURI ; + sh:prefix "dcat" ], + [ sh:namespace "https://w3id.org/linkml/"^^xsd:anyURI ; + sh:prefix "linkml" ], [ sh:namespace "https://w3id.org/shacl/"^^xsd:anyURI ; - sh:prefix "sh" ] ; + sh:prefix "sh" ], + [ sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; + sh:prefix "skos" ], + [ sh:namespace "https://w3id.org/linkml/report"^^xsd:anyURI ; + sh:prefix "datasets" ], + [ sh:namespace "http://www.w3.org/ns/formats/"^^xsd:anyURI ; + sh:prefix "formats" ], + [ sh:namespace "http://purl.org/dc/terms/"^^xsd:anyURI ; + sh:prefix "dcterms" ] ; linkml:classes linkml:DataPackage, linkml:DataResource, linkml:FormatDialect, @@ -55,10 +57,10 @@ linkml:datasets a linkml:SchemaDefinition ; linkml:enums linkml:FormatEnum, linkml:MediaTypeEnum, linkml:TestRole ; - linkml:generation_date "2026-05-05T18:49:23"^^xsd:dateTime ; + linkml:generation_date "2026-08-12T09:42:26"^^xsd:dateTime ; linkml:id "https://w3id.org/linkml/datasets"^^xsd:anyURI ; linkml:imports "linkml:types"^^xsd:anyURI ; - linkml:metamodel_version "1.7.0" ; + linkml:metamodel_version "1.11.0" ; linkml:slots linkml:bytes, linkml:compression, linkml:conforms_to, @@ -99,8 +101,8 @@ linkml:datasets a linkml:SchemaDefinition ; linkml:version, linkml:was_derived_from ; linkml:source_file "datasets.yaml" ; - linkml:source_file_date "2026-05-05T18:15:53"^^xsd:dateTime ; - linkml:source_file_size 7835 ; + linkml:source_file_date "2026-08-12T09:36:51"^^xsd:dateTime ; + linkml:source_file_size 7872 ; linkml:types linkml:boolean, linkml:curie, linkml:date, diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/datasets.ttl b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/datasets.ttl index 956a77cf85..1d17bb6210 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/datasets.ttl +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/datasets.ttl @@ -11,34 +11,36 @@ linkml:datasets a linkml:SchemaDefinition ; rdfs:seeAlso "https://specs.frictionlessdata.io/data-resource"^^xsd:anyURI, "https://www.w3.org/TR/hcls-dataset/"^^xsd:anyURI, "https://www.w3.org/TR/void/"^^xsd:anyURI ; - sh:declare [ sh:namespace "http://open-services.net/ns/core#"^^xsd:anyURI ; - sh:prefix "oslc" ], - [ sh:namespace "https://w3id.org/linkml/"^^xsd:anyURI ; + sh:declare [ sh:namespace "https://w3id.org/linkml/"^^xsd:anyURI ; sh:prefix "linkml" ], - [ sh:namespace "http://purl.org/pav/"^^xsd:anyURI ; - sh:prefix "pav" ], - [ sh:namespace "https://w3id.org/shacl/"^^xsd:anyURI ; - sh:prefix "sh" ], - [ sh:namespace "http://purl.org/ontology/bibo/"^^xsd:anyURI ; - sh:prefix "bibo" ], - [ sh:namespace "https://www.iana.org/assignments/media-types/"^^xsd:anyURI ; - sh:prefix "mediatypes" ], - [ sh:namespace "https://specs.frictionlessdata.io/"^^xsd:anyURI ; - sh:prefix "frictionless" ], + [ sh:namespace "http://purl.org/dc/terms/"^^xsd:anyURI ; + sh:prefix "dcterms" ], + [ sh:namespace "https://w3id.org/linkml/report"^^xsd:anyURI ; + sh:prefix "datasets" ], [ sh:namespace "http://www.w3.org/ns/csvw#"^^xsd:anyURI ; sh:prefix "csvw" ], [ sh:namespace "http://rdfs.org/ns/void#"^^xsd:anyURI ; sh:prefix "void" ], - [ sh:namespace "https://w3id.org/linkml/report"^^xsd:anyURI ; - sh:prefix "datasets" ], + [ sh:namespace "http://purl.org/ontology/bibo/"^^xsd:anyURI ; + sh:prefix "bibo" ], [ sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; sh:prefix "skos" ], - [ sh:namespace "http://www.w3.org/ns/dcat#"^^xsd:anyURI ; - sh:prefix "dcat" ], + [ sh:namespace "https://w3id.org/shacl/"^^xsd:anyURI ; + sh:prefix "sh" ], + [ sh:namespace "http://purl.org/pav/"^^xsd:anyURI ; + sh:prefix "pav" ], [ sh:namespace "http://www.w3.org/ns/formats/"^^xsd:anyURI ; sh:prefix "formats" ], [ sh:namespace "http://schema.org/"^^xsd:anyURI ; - sh:prefix "schema" ] ; + sh:prefix "schema" ], + [ sh:namespace "http://open-services.net/ns/core#"^^xsd:anyURI ; + sh:prefix "oslc" ], + [ sh:namespace "https://www.iana.org/assignments/media-types/"^^xsd:anyURI ; + sh:prefix "mediatypes" ], + [ sh:namespace "https://specs.frictionlessdata.io/"^^xsd:anyURI ; + sh:prefix "frictionless" ], + [ sh:namespace "http://www.w3.org/ns/dcat#"^^xsd:anyURI ; + sh:prefix "dcat" ] ; linkml:classes linkml:DataPackage, linkml:DataResource, linkml:FormatDialect, @@ -55,10 +57,10 @@ linkml:datasets a linkml:SchemaDefinition ; linkml:enums linkml:FormatEnum, linkml:MediaTypeEnum, linkml:TestRole ; - linkml:generation_date "2026-05-05T18:49:22"^^xsd:dateTime ; + linkml:generation_date "2026-08-12T09:42:24"^^xsd:dateTime ; linkml:id "https://w3id.org/linkml/datasets"^^xsd:anyURI ; linkml:imports "linkml:types"^^xsd:anyURI ; - linkml:metamodel_version "1.7.0" ; + linkml:metamodel_version "1.11.0" ; linkml:slots linkml:bytes, linkml:compression, linkml:conforms_to, @@ -99,8 +101,8 @@ linkml:datasets a linkml:SchemaDefinition ; linkml:version, linkml:was_derived_from ; linkml:source_file "datasets.yaml" ; - linkml:source_file_date "2026-05-05T18:15:53"^^xsd:dateTime ; - linkml:source_file_size 7835 ; + linkml:source_file_date "2026-08-12T09:36:51"^^xsd:dateTime ; + linkml:source_file_size 7872 ; linkml:types linkml:boolean, linkml:curie, linkml:date, diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/extensions.model.ttl b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/extensions.model.ttl index 467b4c07bc..edba8d2ab6 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/extensions.model.ttl +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/extensions.model.ttl @@ -267,11 +267,11 @@ linkml:extensions a linkml:SchemaDefinition, linkml:domain_of linkml:Extensible, linkml:Extension ; linkml:emit_prefixes "linkml" ; - linkml:generation_date "2026-05-05T18:49:27"^^xsd:dateTime ; + linkml:generation_date "2026-08-12T09:42:30"^^xsd:dateTime ; linkml:id "https://w3id.org/linkml/extensions"^^xsd:anyURI ; linkml:imports "linkml:types"^^xsd:anyURI ; linkml:inlined true ; - linkml:metamodel_version "1.7.0" ; + linkml:metamodel_version "1.11.0" ; linkml:multivalued true ; linkml:owner linkml:Extensible ; linkml:range linkml:Extension ; diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/extensions.ttl b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/extensions.ttl index 3ddb492fba..e99dcd6afe 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/extensions.ttl +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/extensions.ttl @@ -267,11 +267,11 @@ linkml:extensions a linkml:SchemaDefinition, linkml:domain_of linkml:Extensible, linkml:Extension ; linkml:emit_prefixes "linkml" ; - linkml:generation_date "2026-05-05T18:49:25"^^xsd:dateTime ; + linkml:generation_date "2026-08-12T09:42:28"^^xsd:dateTime ; linkml:id "https://w3id.org/linkml/extensions"^^xsd:anyURI ; linkml:imports "linkml:types"^^xsd:anyURI ; linkml:inlined true ; - linkml:metamodel_version "1.7.0" ; + linkml:metamodel_version "1.11.0" ; linkml:multivalued true ; linkml:owner linkml:Extensible ; linkml:range linkml:Extension ; diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/mappings.model.ttl b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/mappings.model.ttl index cb4adda463..11109a22a6 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/mappings.model.ttl +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/mappings.model.ttl @@ -280,12 +280,12 @@ linkml:mappings a linkml:SchemaDefinition, skos:mappingRelation "http://www.w3.org/2004/02/skos/core#mappingRelation"^^xsd:anyURI ; sh:declare [ sh:namespace "https://w3id.org/linkml/"^^xsd:anyURI ; sh:prefix "linkml" ], - [ sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; - sh:prefix "skos" ], + [ sh:namespace "http://www.geneontology.org/formats/oboInOwl#"^^xsd:anyURI ; + sh:prefix "OIO" ], [ sh:namespace "http://purl.obolibrary.org/obo/IAO_"^^xsd:anyURI ; sh:prefix "IAO" ], - [ sh:namespace "http://www.geneontology.org/formats/oboInOwl#"^^xsd:anyURI ; - sh:prefix "OIO" ] ; + [ sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; + sh:prefix "skos" ] ; linkml:default_curi_maps "semweb_context" ; linkml:default_prefix "linkml" ; linkml:default_range linkml:string ; @@ -299,10 +299,10 @@ linkml:mappings a linkml:SchemaDefinition, "rdfs", "skos", "xsd" ; - linkml:generation_date "2026-05-05T18:49:30"^^xsd:dateTime ; + linkml:generation_date "2026-08-12T09:42:34"^^xsd:dateTime ; linkml:id "https://w3id.org/linkml/mappings"^^xsd:anyURI ; linkml:imports "linkml:types"^^xsd:anyURI ; - linkml:metamodel_version "1.7.0" ; + linkml:metamodel_version "1.11.0" ; linkml:multivalued true ; linkml:range linkml:uriorcurie ; linkml:slot_uri "http://www.w3.org/2004/02/skos/core#mappingRelation"^^xsd:anyURI ; diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/mappings.ttl b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/mappings.ttl index 7117ecad94..692447ad96 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/mappings.ttl +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/mappings.ttl @@ -282,10 +282,10 @@ linkml:mappings a linkml:SchemaDefinition, sh:prefix "IAO" ], [ sh:namespace "http://www.geneontology.org/formats/oboInOwl#"^^xsd:anyURI ; sh:prefix "OIO" ], - [ sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; - sh:prefix "skos" ], [ sh:namespace "https://w3id.org/linkml/"^^xsd:anyURI ; - sh:prefix "linkml" ] ; + sh:prefix "linkml" ], + [ sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; + sh:prefix "skos" ] ; linkml:default_curi_maps "semweb_context" ; linkml:default_prefix "linkml" ; linkml:default_range linkml:string ; @@ -299,10 +299,10 @@ linkml:mappings a linkml:SchemaDefinition, "rdfs", "skos", "xsd" ; - linkml:generation_date "2026-05-05T18:49:28"^^xsd:dateTime ; + linkml:generation_date "2026-08-12T09:42:32"^^xsd:dateTime ; linkml:id "https://w3id.org/linkml/mappings"^^xsd:anyURI ; linkml:imports "linkml:types"^^xsd:anyURI ; - linkml:metamodel_version "1.7.0" ; + linkml:metamodel_version "1.11.0" ; linkml:multivalued true ; linkml:range linkml:uriorcurie ; linkml:slot_uri "http://www.w3.org/2004/02/skos/core#mappingRelation"^^xsd:anyURI ; diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/meta.model.ttl b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/meta.model.ttl index 6ba27dcccf..3f3e0e93a1 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/meta.model.ttl +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/meta.model.ttl @@ -23,42 +23,48 @@ linkml:meta a linkml:SchemaDefinition ; dcterms:license "https://creativecommons.org/publicdomain/zero/1.0/" ; dcterms:title "LinkML Schema Metamodel" ; - sh:declare [ sh:namespace "http://www.w3.org/ns/prov#"^^xsd:anyURI ; - sh:prefix "prov" ], - [ sh:namespace "http://purl.org/ontology/bibo/"^^xsd:anyURI ; - sh:prefix "bibo" ], - [ sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; - sh:prefix "skos" ], + sh:declare [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; + sh:prefix "rdfs" ], + [ sh:namespace "https://w3id.org/linkml/"^^xsd:anyURI ; + sh:prefix "linkml" ], [ sh:namespace "http://www.w3.org/2008/05/skos-xl#"^^xsd:anyURI ; sh:prefix "skosxl" ], + [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; + sh:prefix "qudt" ], + [ sh:namespace "http://semanticscience.org/resource/SIO_"^^xsd:anyURI ; + sh:prefix "SIO" ], + [ sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; + sh:prefix "skos" ], [ sh:namespace "http://open-services.net/ns/core#"^^xsd:anyURI ; sh:prefix "oslc" ], + [ sh:namespace "http://purl.org/dc/terms/"^^xsd:anyURI ; + sh:prefix "dcterms" ], [ sh:namespace "http://www.w3.org/2003/11/swrl#"^^xsd:anyURI ; sh:prefix "swrl" ], - [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; - sh:prefix "qudt" ], + [ sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; + sh:prefix "rdf" ], [ sh:namespace "https://vocab.org/vann/"^^xsd:anyURI ; sh:prefix "vann" ], [ sh:namespace "http://rdf.cdisc.org/mms#"^^xsd:anyURI ; sh:prefix "cdisc" ], [ sh:namespace "http://schema.org/"^^xsd:anyURI ; sh:prefix "schema" ], - [ sh:namespace "http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#"^^xsd:anyURI ; - sh:prefix "NCIT" ], + [ sh:namespace "http://purl.org/linked-data/cube#"^^xsd:anyURI ; + sh:prefix "qb" ], + [ sh:namespace "http://purl.org/ontology/bibo/"^^xsd:anyURI ; + sh:prefix "bibo" ], + [ sh:namespace "http://www.geneontology.org/formats/oboInOwl#"^^xsd:anyURI ; + sh:prefix "OIO" ], + [ sh:namespace "http://www.w3.org/ns/prov#"^^xsd:anyURI ; + sh:prefix "prov" ], [ sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; sh:prefix "sh" ], [ sh:namespace "http://purl.org/pav/"^^xsd:anyURI ; sh:prefix "pav" ], - [ sh:namespace "http://semanticscience.org/resource/SIO_"^^xsd:anyURI ; - sh:prefix "SIO" ], - [ sh:namespace "https://w3id.org/linkml/"^^xsd:anyURI ; - sh:prefix "linkml" ], - [ sh:namespace "http://purl.org/linked-data/cube#"^^xsd:anyURI ; - sh:prefix "qb" ], [ sh:namespace "http://www.w3.org/2002/07/owl#"^^xsd:anyURI ; sh:prefix "owl" ], - [ sh:namespace "http://www.geneontology.org/formats/oboInOwl#"^^xsd:anyURI ; - sh:prefix "OIO" ] ; + [ sh:namespace "http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#"^^xsd:anyURI ; + sh:prefix "NCIT" ] ; linkml:classes linkml:AltDescription, linkml:Annotatable, linkml:Annotation, @@ -148,7 +154,7 @@ refer to the official URI for each construct, e.g. linkml:presence_enum, linkml:pv_formula_options, linkml:relational_role_enum ; - linkml:generation_date "2026-05-05T18:49:36"^^xsd:dateTime ; + linkml:generation_date "2026-08-12T09:42:42"^^xsd:dateTime ; linkml:id "https://w3id.org/linkml/meta"^^xsd:anyURI ; linkml:imports "linkml:annotations"^^xsd:anyURI, "linkml:extensions"^^xsd:anyURI, @@ -429,8 +435,8 @@ refer to the official URI for each construct, e.g. linkml:values_from, linkml:version ; linkml:source_file "meta.yaml" ; - linkml:source_file_date "2026-05-05T16:16:44"^^xsd:dateTime ; - linkml:source_file_size 99888 ; + linkml:source_file_date "2026-08-12T09:39:08"^^xsd:dateTime ; + linkml:source_file_size 101875 ; linkml:subsets linkml:BasicSubset, linkml:MinimalSubset, linkml:ObjectOrientedProfile, @@ -692,7 +698,7 @@ linkml:abbreviation a linkml:SlotDefinition ; skos:inScheme "https://w3id.org/linkml/units"^^xsd:anyURI ; skos:mappingRelation qudt:abbreviation ; linkml:definition_uri "https://w3id.org/linkml/abbreviation"^^xsd:anyURI ; - linkml: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)" ; + linkml: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)" ; linkml:domain_of linkml:UnitOfMeasure ; linkml:imported_from "linkml:units" ; linkml:owner linkml:UnitOfMeasure ; @@ -1285,6 +1291,19 @@ Possible values: linkml:domain linkml:ClassDefinition ; linkml:domain_of linkml:ClassDefinition ; linkml:examples [ a linkml:Example ; + linkml:description """A semantically *invalid* use of `extra_slots`, as extra slots will be forbidden and the +`anonymous_slot_expression` will be ignored. +""" ; + linkml:object [ linkml:allowed false ; + linkml:range_expression [ linkml:range linkml:string ] ] ], + [ a linkml:Example ; + linkml:description "allow additional data if they are either strings or integers" ; + linkml:object [ linkml:range_expression [ linkml:any_of [ linkml:range linkml:integer ], + [ linkml:range linkml:string ] ] ] ], + [ a linkml:Example ; + linkml:description "Allow all additional data" ; + linkml:object [ linkml:allowed true ] ], + [ a linkml:Example ; linkml:description "Allow additional data if they are instances of the class definition \"AClassDefinition\"" ; linkml:object [ linkml:range_expression [ linkml:range linkml:AClassDefinition ] ] ], [ a linkml:Example ; @@ -1296,29 +1315,16 @@ Possible values: [ a linkml:Example ; linkml:description "Forbid any additional data" ; linkml:object [ linkml:allowed false ] ], + [ a linkml:Example ; + linkml:description "Allow additional data that are strings" ; + linkml:object [ linkml:range_expression [ linkml:range linkml:string ] ] ], [ a linkml:Example ; linkml:description """Allow additional data if they are lists of integers of at most length 5. Note that this does *not* mean that a maximum of 5 extra slots are allowed. """ ; linkml:object [ linkml:range_expression [ linkml:maximum_cardinality 5 ; linkml:multivalued true ; - linkml:range linkml:integer ] ] ], - [ a linkml:Example ; - linkml:description "Allow additional data that are strings" ; - linkml:object [ linkml:range_expression [ linkml:range linkml:string ] ] ], - [ a linkml:Example ; - linkml:description """A semantically *invalid* use of `extra_slots`, as extra slots will be forbidden and the -`anonymous_slot_expression` will be ignored. -""" ; - linkml:object [ linkml:allowed false ; - linkml:range_expression [ linkml:range linkml:string ] ] ], - [ a linkml:Example ; - linkml:description "allow additional data if they are either strings or integers" ; - linkml:object [ linkml:range_expression [ linkml:any_of [ linkml:range linkml:integer ], - [ linkml:range linkml:string ] ] ] ], - [ a linkml:Example ; - linkml:description "Allow all additional data" ; - linkml:object [ linkml:allowed true ] ] ; + linkml:range linkml:integer ] ] ] ; linkml:inlined true ; linkml:inlined_as_list true ; linkml:owner linkml:ClassDefinition ; @@ -1413,19 +1419,23 @@ linkml:identifier a linkml:SlotDefinition ; linkml:RelationalModelProfile, linkml:SpecificationSubset ; rdfs:seeAlso "https://en.wikipedia.org/wiki/Identifier"^^xsd:anyURI, + "https://linkml.io/linkml/schemas/constraints.html#unique-keys"^^xsd:anyURI, + "https://linkml.io/linkml/schemas/inlining.html"^^xsd:anyURI, + "linkml:key"^^xsd:anyURI, "linkml:unique_keys"^^xsd:anyURI ; skos:altLabel "ID", "UID", "code", "primary key" ; skos:inScheme "https://w3id.org/linkml/meta"^^xsd:anyURI ; - skos:note "a given domain can have at most one identifier", - "a key slot is automatically required. Identifiers cannot be optional", - "identifier is inherited", - "identifiers and keys are mutually exclusive. A given domain cannot have both" ; + skos:note "A domain can have at most one identifier slot OR a key slot. However a domain can have both an identifier slot and any number of compound keys.", + "An identifier slot is automatically required. Identifiers cannot be optional.", + "The identifier slot is inherited.", + "The presence of an identifier slot makes a class eligible for being referenced rather than inlined.", + "The presence of an identifier slot makes a class eligible for inlining as a dictionary." ; sh:order 5 ; linkml:definition_uri "https://w3id.org/linkml/identifier"^^xsd:anyURI ; - linkml:description "True means that the key slot(s) uniquely identifies the elements. There can be at most one identifier or key per container" ; + linkml:description "True means that the slot is the identifier slot of its class. Such a slot uniquely identifies instances of the class throughout an entire document, meaning there cannot be two (or more) instances of the class (or instances of any of its descendants) with the same value for the identifier slot anywhere in the document." ; linkml:domain linkml:SlotDefinition ; linkml:domain_of linkml:SlotDefinition ; linkml:inherited true ; @@ -1644,14 +1654,17 @@ linkml:key a linkml:SlotDefinition ; OIO:inSubset linkml:BasicSubset, linkml:RelationalModelProfile, linkml:SpecificationSubset ; - rdfs:seeAlso "linkml:unique_keys"^^xsd:anyURI ; + rdfs:seeAlso "https://linkml.io/linkml/schemas/constraints.html#singular-unique-keys"^^xsd:anyURI, + "https://linkml.io/linkml/schemas/inlining.html"^^xsd:anyURI, + "linkml:identifier"^^xsd:anyURI, + "linkml:unique_keys"^^xsd:anyURI ; skos:inScheme "https://w3id.org/linkml/meta"^^xsd:anyURI ; - skos:note "a given domain can have at most one key slot (restriction to be removed in the future)", - "a key slot is automatically required. Keys cannot be optional", - "identifiers and keys are mutually exclusive. A given domain cannot have both", - "key is inherited" ; + skos:note "A domain can have at most one key slot OR one identifier slot. However a domain can have both a key slot and any number of compound keys.", + "A key slot is automatically required. Singular unique keys cannot be optional.", + "The key slot is inherited.", + "The presence of a key slot makes a class eligible for inlining as a dictionary." ; linkml:definition_uri "https://w3id.org/linkml/key"^^xsd:anyURI ; - linkml:description "True means that the key slot(s) uniquely identify the elements within a single container" ; + linkml:description "True means that the slot is the \"singular unique key\" (also known more simply as the \"key slot\") of its class. Such a slot uniquely identifies instances of the class within a single container, meaning there cannot be two (or more) instances of the class (or instances of any of its descendants) with the same value for the key slot within the container." ; linkml:domain linkml:SlotDefinition ; linkml:domain_of linkml:SlotDefinition ; linkml:inherited true ; @@ -1764,9 +1777,9 @@ linkml:maximum_number_dimensions a linkml:SlotDefinition ; skos:inScheme "https://w3id.org/linkml/meta"^^xsd:anyURI ; skos:note "maximum_number_dimensions cannot be less than minimum_number_dimensions" ; linkml:any_of [ a linkml:AnonymousSlotExpression ; - linkml:range linkml:boolean ], + linkml:range linkml:integer ], [ a linkml:AnonymousSlotExpression ; - linkml:range linkml:integer ] ; + linkml:range linkml:boolean ] ; linkml:definition_uri "https://w3id.org/linkml/maximum_number_dimensions"^^xsd:anyURI ; linkml: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" ; linkml:domain linkml:ArrayExpression ; @@ -2903,11 +2916,15 @@ linkml:unique_keys a linkml:SlotDefinition ; OIO:inSubset linkml:BasicSubset, linkml:RelationalModelProfile, linkml:SpecificationSubset ; - rdfs:seeAlso "https://linkml.io/linkml/schemas/constraints.html#unique-key"^^xsd:anyURI ; + rdfs:seeAlso "https://linkml.io/linkml/schemas/constraints.html#unique-keys"^^xsd:anyURI, + "linkml:identifier"^^xsd:anyURI, + "linkml:key"^^xsd:anyURI ; skos:exactMatch owl:hasKey ; skos:inScheme "https://w3id.org/linkml/meta"^^xsd:anyURI ; + skos:note """Not to be confused with a "singular unique key", which is defined by means of the `key` slot, or with an "identifier", which is defined by means of the "identifier" slot. Compound keys, singular unique keys, and identifiers all create a unicity constraint, but singular unique keys and identifiers have additional effects that compound keys do not have. +""" ; linkml:definition_uri "https://w3id.org/linkml/unique_keys"^^xsd:anyURI ; - linkml:description "A collection of named unique keys for this class. Unique keys may be singular or compound." ; + linkml:description "A collection of named unique keys for this class. Such unique keys may be spread over several slots, which is why they are also called \"compound keys\". A unique key uniquely identifies instances of the class within a given container, meaning there cannot be two (or more) instances of the class with the same values for all the slots that make up the unique key." ; linkml:domain linkml:ClassDefinition ; linkml:domain_of linkml:ClassDefinition ; linkml:inlined true ; @@ -3062,6 +3079,9 @@ linkml:extension_tag a linkml:SlotDefinition ; linkml:extension_value a linkml:SlotDefinition ; skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; skos:prefLabel "value" ; + linkml:annotations [ a linkml:Annotation ; + skos:example true ; + linkml:tag linkml:simple_dict_value ] ; linkml:definition_uri "https://w3id.org/linkml/extension_value"^^xsd:anyURI ; linkml:description "the actual annotation" ; linkml:domain linkml:Extension ; @@ -3151,20 +3171,6 @@ linkml:ucum_code a linkml:SlotDefinition ; linkml:required true ; linkml:slot_uri "http://qudt.org/schema/qudt/ucumCode"^^xsd:anyURI . -linkml:Annotation a linkml:ClassDefinition ; - skos:inScheme "https://w3id.org/linkml/annotations"^^xsd:anyURI ; - linkml:class_uri "https://w3id.org/linkml/Annotation"^^xsd:anyURI ; - linkml:definition_uri "https://w3id.org/linkml/Annotation"^^xsd:anyURI ; - linkml:description "a tag/value pair with the semantics of OWL Annotation" ; - linkml:imported_from "linkml:annotations" ; - linkml:is_a linkml:Extension ; - linkml:mixins linkml:Annotatable ; - linkml:slot_usage [ ] ; - linkml:slots linkml:annotations, - linkml:extension_tag, - linkml:extension_value, - linkml:extensions . - linkml:alias a linkml:SlotDefinition ; OIO:inSubset linkml:SpecificationSubset ; skos:inScheme "https://w3id.org/linkml/meta"^^xsd:anyURI ; @@ -3670,6 +3676,20 @@ linkml:type_expression_none_of a linkml:SlotDefinition ; linkml:slot_uri "https://w3id.org/linkml/none_of"^^xsd:anyURI ; linkml:usage_slot_name "none_of" . +linkml:Annotation a linkml:ClassDefinition ; + skos:inScheme "https://w3id.org/linkml/annotations"^^xsd:anyURI ; + linkml:class_uri "https://w3id.org/linkml/Annotation"^^xsd:anyURI ; + linkml:definition_uri "https://w3id.org/linkml/Annotation"^^xsd:anyURI ; + linkml:description "a tag/value pair with the semantics of OWL Annotation" ; + linkml:imported_from "linkml:annotations" ; + linkml:is_a linkml:Extension ; + linkml:mixins linkml:Annotatable ; + linkml:slot_usage [ ] ; + linkml:slots linkml:annotations, + linkml:extension_tag, + linkml:extension_value, + linkml:extensions . + linkml:AnonymousTypeExpression a linkml:ClassDefinition ; skos:inScheme "https://w3id.org/linkml/meta"^^xsd:anyURI ; linkml:class_uri "https://w3id.org/linkml/AnonymousTypeExpression"^^xsd:anyURI ; @@ -5339,16 +5359,16 @@ linkml:UnitOfMeasure a linkml:ClassDefinition ; skos:inScheme "https://w3id.org/linkml/units"^^xsd:anyURI ; skos:mappingRelation qudt:Unit ; linkml:any_of [ a linkml:AnonymousClassExpression ; - linkml:slot_conditions linkml:iec61360code ], + linkml:slot_conditions linkml:symbol ], [ a linkml:AnonymousClassExpression ; linkml:slot_conditions linkml:exact_mappings ], [ a linkml:AnonymousClassExpression ; - linkml:slot_conditions linkml:ucum_code ], + linkml:slot_conditions linkml:iec61360code ], [ a linkml:AnonymousClassExpression ; - linkml:slot_conditions linkml:symbol ] ; + linkml:slot_conditions linkml:ucum_code ] ; linkml:class_uri "http://qudt.org/schema/qudt/Unit"^^xsd:anyURI ; linkml:definition_uri "https://w3id.org/linkml/UnitOfMeasure"^^xsd:anyURI ; - linkml: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)." ; + linkml: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)." ; linkml:imported_from "linkml:units" ; linkml:slot_usage [ ] ; linkml:slots linkml:UnitOfMeasure_exact_mappings, diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/meta.ttl b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/meta.ttl index c03c2ef55a..29df8b55b2 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/meta.ttl +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/meta.ttl @@ -23,42 +23,48 @@ linkml:meta a linkml:SchemaDefinition ; dcterms:license "https://creativecommons.org/publicdomain/zero/1.0/" ; dcterms:title "LinkML Schema Metamodel" ; - sh:declare [ sh:namespace "https://vocab.org/vann/"^^xsd:anyURI ; + sh:declare [ sh:namespace "http://purl.org/pav/"^^xsd:anyURI ; + sh:prefix "pav" ], + [ sh:namespace "http://purl.org/linked-data/cube#"^^xsd:anyURI ; + sh:prefix "qb" ], + [ sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; + sh:prefix "sh" ], + [ sh:namespace "https://vocab.org/vann/"^^xsd:anyURI ; sh:prefix "vann" ], - [ sh:namespace "http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#"^^xsd:anyURI ; - sh:prefix "NCIT" ], - [ sh:namespace "http://www.w3.org/2002/07/owl#"^^xsd:anyURI ; - sh:prefix "owl" ], [ sh:namespace "http://www.w3.org/ns/prov#"^^xsd:anyURI ; sh:prefix "prov" ], - [ sh:namespace "http://www.w3.org/ns/shacl#"^^xsd:anyURI ; - sh:prefix "sh" ], + [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; + sh:prefix "rdfs" ], + [ sh:namespace "http://open-services.net/ns/core#"^^xsd:anyURI ; + sh:prefix "oslc" ], + [ sh:namespace "http://rdf.cdisc.org/mms#"^^xsd:anyURI ; + sh:prefix "cdisc" ], [ sh:namespace "http://purl.org/ontology/bibo/"^^xsd:anyURI ; sh:prefix "bibo" ], + [ sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; + sh:prefix "skos" ], + [ sh:namespace "http://www.w3.org/2002/07/owl#"^^xsd:anyURI ; + sh:prefix "owl" ], [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; sh:prefix "qudt" ], - [ sh:namespace "http://schema.org/"^^xsd:anyURI ; - sh:prefix "schema" ], + [ sh:namespace "http://purl.org/dc/terms/"^^xsd:anyURI ; + sh:prefix "dcterms" ], [ sh:namespace "http://www.w3.org/2003/11/swrl#"^^xsd:anyURI ; sh:prefix "swrl" ], - [ sh:namespace "http://purl.org/pav/"^^xsd:anyURI ; - sh:prefix "pav" ], - [ sh:namespace "http://open-services.net/ns/core#"^^xsd:anyURI ; - sh:prefix "oslc" ], - [ sh:namespace "http://www.geneontology.org/formats/oboInOwl#"^^xsd:anyURI ; - sh:prefix "OIO" ], + [ sh:namespace "http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#"^^xsd:anyURI ; + sh:prefix "NCIT" ], + [ sh:namespace "http://www.w3.org/1999/02/22-rdf-syntax-ns#"^^xsd:anyURI ; + sh:prefix "rdf" ], [ sh:namespace "http://semanticscience.org/resource/SIO_"^^xsd:anyURI ; sh:prefix "SIO" ], - [ sh:namespace "http://rdf.cdisc.org/mms#"^^xsd:anyURI ; - sh:prefix "cdisc" ], [ sh:namespace "https://w3id.org/linkml/"^^xsd:anyURI ; sh:prefix "linkml" ], - [ sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; - sh:prefix "skos" ], + [ sh:namespace "http://www.geneontology.org/formats/oboInOwl#"^^xsd:anyURI ; + sh:prefix "OIO" ], [ sh:namespace "http://www.w3.org/2008/05/skos-xl#"^^xsd:anyURI ; sh:prefix "skosxl" ], - [ sh:namespace "http://purl.org/linked-data/cube#"^^xsd:anyURI ; - sh:prefix "qb" ] ; + [ sh:namespace "http://schema.org/"^^xsd:anyURI ; + sh:prefix "schema" ] ; linkml:classes linkml:AltDescription, linkml:Annotatable, linkml:Annotation, @@ -148,7 +154,7 @@ refer to the official URI for each construct, e.g. linkml:presence_enum, linkml:pv_formula_options, linkml:relational_role_enum ; - linkml:generation_date "2026-05-05T18:49:31"^^xsd:dateTime ; + linkml:generation_date "2026-08-12T09:42:36"^^xsd:dateTime ; linkml:id "https://w3id.org/linkml/meta"^^xsd:anyURI ; linkml:imports "linkml:annotations"^^xsd:anyURI, "linkml:extensions"^^xsd:anyURI, @@ -429,8 +435,8 @@ refer to the official URI for each construct, e.g. linkml:values_from, linkml:version ; linkml:source_file "meta.yaml" ; - linkml:source_file_date "2026-05-05T16:16:44"^^xsd:dateTime ; - linkml:source_file_size 99888 ; + linkml:source_file_date "2026-08-12T09:39:08"^^xsd:dateTime ; + linkml:source_file_size 101875 ; linkml:subsets linkml:BasicSubset, linkml:MinimalSubset, linkml:ObjectOrientedProfile, @@ -692,7 +698,7 @@ linkml:abbreviation a linkml:SlotDefinition ; skos:inScheme "https://w3id.org/linkml/units"^^xsd:anyURI ; skos:mappingRelation qudt:abbreviation ; linkml:definition_uri "https://w3id.org/linkml/abbreviation"^^xsd:anyURI ; - linkml: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)" ; + linkml: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)" ; linkml:domain_of linkml:UnitOfMeasure ; linkml:imported_from "linkml:units" ; linkml:owner linkml:UnitOfMeasure ; @@ -1285,6 +1291,18 @@ Possible values: linkml:domain linkml:ClassDefinition ; linkml:domain_of linkml:ClassDefinition ; linkml:examples [ a linkml:Example ; + linkml:description "Allow additional data that are strings" ; + linkml:object [ linkml:range_expression [ linkml:range linkml:string ] ] ], + [ a linkml:Example ; + linkml:description """Allow additional data if they are integers. +`required` is meaningless in this context and ignored, since by definition all "extra" slots are optional. +""" ; + linkml:object [ linkml:range_expression [ linkml:range linkml:integer ; + linkml:required true ] ] ], + [ a linkml:Example ; + linkml:description "Forbid any additional data" ; + linkml:object [ linkml:allowed false ] ], + [ a linkml:Example ; linkml:description """A semantically *invalid* use of `extra_slots`, as extra slots will be forbidden and the `anonymous_slot_expression` will be ignored. """ ; @@ -1297,28 +1315,16 @@ Note that this does *not* mean that a maximum of 5 extra slots are allowed. linkml:object [ linkml:range_expression [ linkml:maximum_cardinality 5 ; linkml:multivalued true ; linkml:range linkml:integer ] ] ], - [ a linkml:Example ; - linkml:description "Allow additional data that are strings" ; - linkml:object [ linkml:range_expression [ linkml:range linkml:string ] ] ], [ a linkml:Example ; linkml:description "Allow all additional data" ; linkml:object [ linkml:allowed true ] ], - [ a linkml:Example ; - linkml:description "Allow additional data if they are instances of the class definition \"AClassDefinition\"" ; - linkml:object [ linkml:range_expression [ linkml:range linkml:AClassDefinition ] ] ], - [ a linkml:Example ; - linkml:description "Forbid any additional data" ; - linkml:object [ linkml:allowed false ] ], - [ a linkml:Example ; - linkml:description """Allow additional data if they are integers. -`required` is meaningless in this context and ignored, since by definition all "extra" slots are optional. -""" ; - linkml:object [ linkml:range_expression [ linkml:range linkml:integer ; - linkml:required true ] ] ], [ a linkml:Example ; linkml:description "allow additional data if they are either strings or integers" ; linkml:object [ linkml:range_expression [ linkml:any_of [ linkml:range linkml:integer ], - [ linkml:range linkml:string ] ] ] ] ; + [ linkml:range linkml:string ] ] ] ], + [ a linkml:Example ; + linkml:description "Allow additional data if they are instances of the class definition \"AClassDefinition\"" ; + linkml:object [ linkml:range_expression [ linkml:range linkml:AClassDefinition ] ] ] ; linkml:inlined true ; linkml:inlined_as_list true ; linkml:owner linkml:ClassDefinition ; @@ -1413,19 +1419,23 @@ linkml:identifier a linkml:SlotDefinition ; linkml:RelationalModelProfile, linkml:SpecificationSubset ; rdfs:seeAlso "https://en.wikipedia.org/wiki/Identifier"^^xsd:anyURI, + "https://linkml.io/linkml/schemas/constraints.html#unique-keys"^^xsd:anyURI, + "https://linkml.io/linkml/schemas/inlining.html"^^xsd:anyURI, + "linkml:key"^^xsd:anyURI, "linkml:unique_keys"^^xsd:anyURI ; skos:altLabel "ID", "UID", "code", "primary key" ; skos:inScheme "https://w3id.org/linkml/meta"^^xsd:anyURI ; - skos:note "a given domain can have at most one identifier", - "a key slot is automatically required. Identifiers cannot be optional", - "identifier is inherited", - "identifiers and keys are mutually exclusive. A given domain cannot have both" ; + skos:note "A domain can have at most one identifier slot OR a key slot. However a domain can have both an identifier slot and any number of compound keys.", + "An identifier slot is automatically required. Identifiers cannot be optional.", + "The identifier slot is inherited.", + "The presence of an identifier slot makes a class eligible for being referenced rather than inlined.", + "The presence of an identifier slot makes a class eligible for inlining as a dictionary." ; sh:order 5 ; linkml:definition_uri "https://w3id.org/linkml/identifier"^^xsd:anyURI ; - linkml:description "True means that the key slot(s) uniquely identifies the elements. There can be at most one identifier or key per container" ; + linkml:description "True means that the slot is the identifier slot of its class. Such a slot uniquely identifies instances of the class throughout an entire document, meaning there cannot be two (or more) instances of the class (or instances of any of its descendants) with the same value for the identifier slot anywhere in the document." ; linkml:domain linkml:SlotDefinition ; linkml:domain_of linkml:SlotDefinition ; linkml:inherited true ; @@ -1644,14 +1654,17 @@ linkml:key a linkml:SlotDefinition ; OIO:inSubset linkml:BasicSubset, linkml:RelationalModelProfile, linkml:SpecificationSubset ; - rdfs:seeAlso "linkml:unique_keys"^^xsd:anyURI ; + rdfs:seeAlso "https://linkml.io/linkml/schemas/constraints.html#singular-unique-keys"^^xsd:anyURI, + "https://linkml.io/linkml/schemas/inlining.html"^^xsd:anyURI, + "linkml:identifier"^^xsd:anyURI, + "linkml:unique_keys"^^xsd:anyURI ; skos:inScheme "https://w3id.org/linkml/meta"^^xsd:anyURI ; - skos:note "a given domain can have at most one key slot (restriction to be removed in the future)", - "a key slot is automatically required. Keys cannot be optional", - "identifiers and keys are mutually exclusive. A given domain cannot have both", - "key is inherited" ; + skos:note "A domain can have at most one key slot OR one identifier slot. However a domain can have both a key slot and any number of compound keys.", + "A key slot is automatically required. Singular unique keys cannot be optional.", + "The key slot is inherited.", + "The presence of a key slot makes a class eligible for inlining as a dictionary." ; linkml:definition_uri "https://w3id.org/linkml/key"^^xsd:anyURI ; - linkml:description "True means that the key slot(s) uniquely identify the elements within a single container" ; + linkml:description "True means that the slot is the \"singular unique key\" (also known more simply as the \"key slot\") of its class. Such a slot uniquely identifies instances of the class within a single container, meaning there cannot be two (or more) instances of the class (or instances of any of its descendants) with the same value for the key slot within the container." ; linkml:domain linkml:SlotDefinition ; linkml:domain_of linkml:SlotDefinition ; linkml:inherited true ; @@ -2903,11 +2916,15 @@ linkml:unique_keys a linkml:SlotDefinition ; OIO:inSubset linkml:BasicSubset, linkml:RelationalModelProfile, linkml:SpecificationSubset ; - rdfs:seeAlso "https://linkml.io/linkml/schemas/constraints.html#unique-key"^^xsd:anyURI ; + rdfs:seeAlso "https://linkml.io/linkml/schemas/constraints.html#unique-keys"^^xsd:anyURI, + "linkml:identifier"^^xsd:anyURI, + "linkml:key"^^xsd:anyURI ; skos:exactMatch owl:hasKey ; skos:inScheme "https://w3id.org/linkml/meta"^^xsd:anyURI ; + skos:note """Not to be confused with a "singular unique key", which is defined by means of the `key` slot, or with an "identifier", which is defined by means of the "identifier" slot. Compound keys, singular unique keys, and identifiers all create a unicity constraint, but singular unique keys and identifiers have additional effects that compound keys do not have. +""" ; linkml:definition_uri "https://w3id.org/linkml/unique_keys"^^xsd:anyURI ; - linkml:description "A collection of named unique keys for this class. Unique keys may be singular or compound." ; + linkml:description "A collection of named unique keys for this class. Such unique keys may be spread over several slots, which is why they are also called \"compound keys\". A unique key uniquely identifies instances of the class within a given container, meaning there cannot be two (or more) instances of the class with the same values for all the slots that make up the unique key." ; linkml:domain linkml:ClassDefinition ; linkml:domain_of linkml:ClassDefinition ; linkml:inlined true ; @@ -3062,6 +3079,9 @@ linkml:extension_tag a linkml:SlotDefinition ; linkml:extension_value a linkml:SlotDefinition ; skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; skos:prefLabel "value" ; + linkml:annotations [ a linkml:Annotation ; + skos:example true ; + linkml:tag linkml:simple_dict_value ] ; linkml:definition_uri "https://w3id.org/linkml/extension_value"^^xsd:anyURI ; linkml:description "the actual annotation" ; linkml:domain linkml:Extension ; @@ -3151,20 +3171,6 @@ linkml:ucum_code a linkml:SlotDefinition ; linkml:required true ; linkml:slot_uri "http://qudt.org/schema/qudt/ucumCode"^^xsd:anyURI . -linkml:Annotation a linkml:ClassDefinition ; - skos:inScheme "https://w3id.org/linkml/annotations"^^xsd:anyURI ; - linkml:class_uri "https://w3id.org/linkml/Annotation"^^xsd:anyURI ; - linkml:definition_uri "https://w3id.org/linkml/Annotation"^^xsd:anyURI ; - linkml:description "a tag/value pair with the semantics of OWL Annotation" ; - linkml:imported_from "linkml:annotations" ; - linkml:is_a linkml:Extension ; - linkml:mixins linkml:Annotatable ; - linkml:slot_usage [ ] ; - linkml:slots linkml:annotations, - linkml:extension_tag, - linkml:extension_value, - linkml:extensions . - linkml:alias a linkml:SlotDefinition ; OIO:inSubset linkml:SpecificationSubset ; skos:inScheme "https://w3id.org/linkml/meta"^^xsd:anyURI ; @@ -3670,6 +3676,20 @@ linkml:type_expression_none_of a linkml:SlotDefinition ; linkml:slot_uri "https://w3id.org/linkml/none_of"^^xsd:anyURI ; linkml:usage_slot_name "none_of" . +linkml:Annotation a linkml:ClassDefinition ; + skos:inScheme "https://w3id.org/linkml/annotations"^^xsd:anyURI ; + linkml:class_uri "https://w3id.org/linkml/Annotation"^^xsd:anyURI ; + linkml:definition_uri "https://w3id.org/linkml/Annotation"^^xsd:anyURI ; + linkml:description "a tag/value pair with the semantics of OWL Annotation" ; + linkml:imported_from "linkml:annotations" ; + linkml:is_a linkml:Extension ; + linkml:mixins linkml:Annotatable ; + linkml:slot_usage [ ] ; + linkml:slots linkml:annotations, + linkml:extension_tag, + linkml:extension_value, + linkml:extensions . + linkml:AnonymousTypeExpression a linkml:ClassDefinition ; skos:inScheme "https://w3id.org/linkml/meta"^^xsd:anyURI ; linkml:class_uri "https://w3id.org/linkml/AnonymousTypeExpression"^^xsd:anyURI ; @@ -5340,15 +5360,15 @@ linkml:UnitOfMeasure a linkml:ClassDefinition ; skos:mappingRelation qudt:Unit ; linkml:any_of [ a linkml:AnonymousClassExpression ; linkml:slot_conditions linkml:symbol ], - [ a linkml:AnonymousClassExpression ; - linkml:slot_conditions linkml:iec61360code ], [ a linkml:AnonymousClassExpression ; linkml:slot_conditions linkml:exact_mappings ], + [ a linkml:AnonymousClassExpression ; + linkml:slot_conditions linkml:iec61360code ], [ a linkml:AnonymousClassExpression ; linkml:slot_conditions linkml:ucum_code ] ; linkml:class_uri "http://qudt.org/schema/qudt/Unit"^^xsd:anyURI ; linkml:definition_uri "https://w3id.org/linkml/UnitOfMeasure"^^xsd:anyURI ; - linkml: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)." ; + linkml: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)." ; linkml:imported_from "linkml:units" ; linkml:slot_usage [ ] ; linkml:slots linkml:UnitOfMeasure_exact_mappings, diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/types.model.ttl b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/types.model.ttl index 5f36a341d0..c1eea00939 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/types.model.ttl +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/types.model.ttl @@ -9,18 +9,18 @@ linkml:types a linkml:SchemaDefinition ; dcterms:title "Core LinkML metamodel types" ; sh:declare [ sh:namespace "http://www.w3.org/2001/XMLSchema#"^^xsd:anyURI ; sh:prefix "xsd" ], - [ sh:namespace "http://www.w3.org/ns/shex#"^^xsd:anyURI ; - sh:prefix "shex" ], [ sh:namespace "http://schema.org/"^^xsd:anyURI ; sh:prefix "schema" ], [ sh:namespace "https://w3id.org/linkml/"^^xsd:anyURI ; - sh:prefix "linkml" ] ; + sh:prefix "linkml" ], + [ sh:namespace "http://www.w3.org/ns/shex#"^^xsd:anyURI ; + sh:prefix "shex" ] ; linkml:default_prefix "linkml" ; linkml:default_range linkml:string ; linkml:description "Shared type definitions for the core LinkML mode and metamodel" ; - linkml:generation_date "2026-05-05T18:49:42"^^xsd:dateTime ; + linkml:generation_date "2026-08-12T09:42:50"^^xsd:dateTime ; linkml:id "https://w3id.org/linkml/types"^^xsd:anyURI ; - linkml:metamodel_version "1.7.0" ; + linkml:metamodel_version "1.11.0" ; linkml:source_file "types.yaml" ; linkml:source_file_date "2026-05-05T18:15:59"^^xsd:dateTime ; linkml:source_file_size 7296 ; diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/types.ttl b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/types.ttl index f89c2df4e3..924463d185 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/types.ttl +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/types.ttl @@ -7,20 +7,20 @@ linkml:types a linkml:SchemaDefinition ; dcterms:license "https://creativecommons.org/publicdomain/zero/1.0/" ; dcterms:title "Core LinkML metamodel types" ; - sh:declare [ sh:namespace "https://w3id.org/linkml/"^^xsd:anyURI ; - sh:prefix "linkml" ], + sh:declare [ sh:namespace "http://www.w3.org/ns/shex#"^^xsd:anyURI ; + sh:prefix "shex" ], [ sh:namespace "http://www.w3.org/2001/XMLSchema#"^^xsd:anyURI ; sh:prefix "xsd" ], + [ sh:namespace "https://w3id.org/linkml/"^^xsd:anyURI ; + sh:prefix "linkml" ], [ sh:namespace "http://schema.org/"^^xsd:anyURI ; - sh:prefix "schema" ], - [ sh:namespace "http://www.w3.org/ns/shex#"^^xsd:anyURI ; - sh:prefix "shex" ] ; + sh:prefix "schema" ] ; linkml:default_prefix "linkml" ; linkml:default_range linkml:string ; linkml:description "Shared type definitions for the core LinkML mode and metamodel" ; - linkml:generation_date "2026-05-05T18:49:41"^^xsd:dateTime ; + linkml:generation_date "2026-08-12T09:42:49"^^xsd:dateTime ; linkml:id "https://w3id.org/linkml/types"^^xsd:anyURI ; - linkml:metamodel_version "1.7.0" ; + linkml:metamodel_version "1.11.0" ; linkml:source_file "types.yaml" ; linkml:source_file_date "2026-05-05T18:15:59"^^xsd:dateTime ; linkml:source_file_size 7296 ; diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/units.model.ttl b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/units.model.ttl index a00562bd30..03460c1a46 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/units.model.ttl +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/units.model.ttl @@ -10,10 +10,12 @@ linkml:units a linkml:SchemaDefinition ; dcterms:license "https://creativecommons.org/publicdomain/zero/1.0/" ; - sh:declare [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; + sh:declare [ sh:namespace "https://w3id.org/linkml/"^^xsd:anyURI ; + sh:prefix "linkml" ], + [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; sh:prefix "qudt" ], - [ sh:namespace "https://w3id.org/linkml/"^^xsd:anyURI ; - sh:prefix "linkml" ] ; + [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; + sh:prefix "rdfs" ] ; linkml:classes linkml:Annotatable, linkml:Annotation, linkml:AnyValue, @@ -30,13 +32,13 @@ linkml:units a linkml:SchemaDefinition ; "rdfs", "skos", "xsd" ; - linkml:generation_date "2026-05-05T18:49:46"^^xsd:dateTime ; + linkml:generation_date "2026-08-12T09:42:55"^^xsd:dateTime ; linkml:id "https://w3id.org/linkml/units"^^xsd:anyURI ; linkml:imports "linkml:annotations"^^xsd:anyURI, "linkml:extensions"^^xsd:anyURI, "linkml:mappings"^^xsd:anyURI, "linkml:types"^^xsd:anyURI ; - linkml:metamodel_version "1.7.0" ; + linkml:metamodel_version "1.11.0" ; linkml:slots linkml:UnitOfMeasure_exact_mappings, linkml:abbreviation, linkml:annotations, @@ -59,8 +61,8 @@ linkml:units a linkml:SchemaDefinition ; linkml:ucum_code, linkml:unit ; linkml:source_file "units.yaml" ; - linkml:source_file_date "2026-05-05T18:16:00"^^xsd:dateTime ; - linkml:source_file_size 2801 ; + linkml:source_file_date "2026-08-12T09:36:51"^^xsd:dateTime ; + linkml:source_file_size 2847 ; linkml:types linkml:boolean, linkml:curie, linkml:date, @@ -451,6 +453,9 @@ linkml:extension_tag a linkml:SlotDefinition ; linkml:extension_value a linkml:SlotDefinition ; skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; skos:prefLabel "value" ; + linkml:annotations [ a linkml:Annotation ; + skos:example true ; + linkml:tag linkml:simple_dict_value ] ; linkml:definition_uri "https://w3id.org/linkml/extension_value"^^xsd:anyURI ; linkml:description "the actual annotation" ; linkml:domain linkml:Extension ; @@ -507,6 +512,16 @@ linkml:Annotatable a linkml:ClassDefinition ; linkml:slot_usage [ ] ; linkml:slots linkml:annotations . +linkml:Extensible a linkml:ClassDefinition ; + skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; + linkml:class_uri "https://w3id.org/linkml/Extensible"^^xsd:anyURI ; + linkml:definition_uri "https://w3id.org/linkml/Extensible"^^xsd:anyURI ; + linkml:description "mixin for classes that support extension" ; + linkml:imported_from "linkml:extensions" ; + linkml:mixin true ; + linkml:slot_usage [ ] ; + linkml:slots linkml:extensions . + linkml:Annotation a linkml:ClassDefinition ; skos:inScheme "https://w3id.org/linkml/annotations"^^xsd:anyURI ; linkml:class_uri "https://w3id.org/linkml/Annotation"^^xsd:anyURI ; @@ -521,16 +536,6 @@ linkml:Annotation a linkml:ClassDefinition ; linkml:extension_value, linkml:extensions . -linkml:Extensible a linkml:ClassDefinition ; - skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; - linkml:class_uri "https://w3id.org/linkml/Extensible"^^xsd:anyURI ; - linkml:definition_uri "https://w3id.org/linkml/Extensible"^^xsd:anyURI ; - linkml:description "mixin for classes that support extension" ; - linkml:imported_from "linkml:extensions" ; - linkml:mixin true ; - linkml:slot_usage [ ] ; - linkml:slots linkml:extensions . - linkml:extensions a linkml:SlotDefinition ; skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; linkml:definition_uri "https://w3id.org/linkml/extensions"^^xsd:anyURI ; @@ -594,13 +599,13 @@ linkml:UnitOfMeasure a linkml:ClassDefinition ; skos:inScheme "https://w3id.org/linkml/units"^^xsd:anyURI ; skos:mappingRelation qudt:Unit ; linkml:any_of [ a linkml:AnonymousClassExpression ; - linkml:slot_conditions linkml:symbol ], - [ a linkml:AnonymousClassExpression ; linkml:slot_conditions linkml:iec61360code ], [ a linkml:AnonymousClassExpression ; - linkml:slot_conditions linkml:exact_mappings ], + linkml:slot_conditions linkml:ucum_code ], + [ a linkml:AnonymousClassExpression ; + linkml:slot_conditions linkml:symbol ], [ a linkml:AnonymousClassExpression ; - linkml:slot_conditions linkml:ucum_code ] ; + linkml:slot_conditions linkml:exact_mappings ] ; linkml:class_uri "http://qudt.org/schema/qudt/Unit"^^xsd:anyURI ; linkml:definition_uri "https://w3id.org/linkml/UnitOfMeasure"^^xsd:anyURI ; linkml: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)." ; diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/units.ttl b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/units.ttl index cfc88dbaf8..e0de946fa1 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/units.ttl +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/units.ttl @@ -10,10 +10,12 @@ linkml:units a linkml:SchemaDefinition ; dcterms:license "https://creativecommons.org/publicdomain/zero/1.0/" ; - sh:declare [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; + sh:declare [ sh:namespace "https://w3id.org/linkml/"^^xsd:anyURI ; + sh:prefix "linkml" ], + [ sh:namespace "http://qudt.org/schema/qudt/"^^xsd:anyURI ; sh:prefix "qudt" ], - [ sh:namespace "https://w3id.org/linkml/"^^xsd:anyURI ; - sh:prefix "linkml" ] ; + [ sh:namespace "http://www.w3.org/2000/01/rdf-schema#"^^xsd:anyURI ; + sh:prefix "rdfs" ] ; linkml:classes linkml:Annotatable, linkml:Annotation, linkml:AnyValue, @@ -30,13 +32,13 @@ linkml:units a linkml:SchemaDefinition ; "rdfs", "skos", "xsd" ; - linkml:generation_date "2026-05-05T18:49:43"^^xsd:dateTime ; + linkml:generation_date "2026-08-12T09:42:51"^^xsd:dateTime ; linkml:id "https://w3id.org/linkml/units"^^xsd:anyURI ; linkml:imports "linkml:annotations"^^xsd:anyURI, "linkml:extensions"^^xsd:anyURI, "linkml:mappings"^^xsd:anyURI, "linkml:types"^^xsd:anyURI ; - linkml:metamodel_version "1.7.0" ; + linkml:metamodel_version "1.11.0" ; linkml:slots linkml:UnitOfMeasure_exact_mappings, linkml:abbreviation, linkml:annotations, @@ -59,8 +61,8 @@ linkml:units a linkml:SchemaDefinition ; linkml:ucum_code, linkml:unit ; linkml:source_file "units.yaml" ; - linkml:source_file_date "2026-05-05T18:16:00"^^xsd:dateTime ; - linkml:source_file_size 2801 ; + linkml:source_file_date "2026-08-12T09:36:51"^^xsd:dateTime ; + linkml:source_file_size 2847 ; linkml:types linkml:boolean, linkml:curie, linkml:date, @@ -451,6 +453,9 @@ linkml:extension_tag a linkml:SlotDefinition ; linkml:extension_value a linkml:SlotDefinition ; skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; skos:prefLabel "value" ; + linkml:annotations [ a linkml:Annotation ; + skos:example true ; + linkml:tag linkml:simple_dict_value ] ; linkml:definition_uri "https://w3id.org/linkml/extension_value"^^xsd:anyURI ; linkml:description "the actual annotation" ; linkml:domain linkml:Extension ; @@ -507,6 +512,16 @@ linkml:Annotatable a linkml:ClassDefinition ; linkml:slot_usage [ ] ; linkml:slots linkml:annotations . +linkml:Extensible a linkml:ClassDefinition ; + skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; + linkml:class_uri "https://w3id.org/linkml/Extensible"^^xsd:anyURI ; + linkml:definition_uri "https://w3id.org/linkml/Extensible"^^xsd:anyURI ; + linkml:description "mixin for classes that support extension" ; + linkml:imported_from "linkml:extensions" ; + linkml:mixin true ; + linkml:slot_usage [ ] ; + linkml:slots linkml:extensions . + linkml:Annotation a linkml:ClassDefinition ; skos:inScheme "https://w3id.org/linkml/annotations"^^xsd:anyURI ; linkml:class_uri "https://w3id.org/linkml/Annotation"^^xsd:anyURI ; @@ -521,16 +536,6 @@ linkml:Annotation a linkml:ClassDefinition ; linkml:extension_value, linkml:extensions . -linkml:Extensible a linkml:ClassDefinition ; - skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; - linkml:class_uri "https://w3id.org/linkml/Extensible"^^xsd:anyURI ; - linkml:definition_uri "https://w3id.org/linkml/Extensible"^^xsd:anyURI ; - linkml:description "mixin for classes that support extension" ; - linkml:imported_from "linkml:extensions" ; - linkml:mixin true ; - linkml:slot_usage [ ] ; - linkml:slots linkml:extensions . - linkml:extensions a linkml:SlotDefinition ; skos:inScheme "https://w3id.org/linkml/extensions"^^xsd:anyURI ; linkml:definition_uri "https://w3id.org/linkml/extensions"^^xsd:anyURI ; @@ -594,9 +599,9 @@ linkml:UnitOfMeasure a linkml:ClassDefinition ; skos:inScheme "https://w3id.org/linkml/units"^^xsd:anyURI ; skos:mappingRelation qudt:Unit ; linkml:any_of [ a linkml:AnonymousClassExpression ; - linkml:slot_conditions linkml:symbol ], - [ a linkml:AnonymousClassExpression ; linkml:slot_conditions linkml:exact_mappings ], + [ a linkml:AnonymousClassExpression ; + linkml:slot_conditions linkml:symbol ], [ a linkml:AnonymousClassExpression ; linkml:slot_conditions linkml:iec61360code ], [ a linkml:AnonymousClassExpression ; diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/validation.model.ttl b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/validation.model.ttl index c76acee0ec..49dbf4754c 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/validation.model.ttl +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/validation.model.ttl @@ -7,18 +7,18 @@ linkml:reporting a linkml:SchemaDefinition ; dcterms:license "https://creativecommons.org/publicdomain/zero/1.0/" ; dcterms:title "LinkML Report Metamodel" ; - sh:declare [ sh:namespace "https://w3id.org/shacl/"^^xsd:anyURI ; - sh:prefix "sh" ], + sh:declare [ sh:namespace "http://purl.org/pav/"^^xsd:anyURI ; + sh:prefix "pav" ], [ sh:namespace "https://w3id.org/linkml/report"^^xsd:anyURI ; sh:prefix "reporting" ], - [ sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; - sh:prefix "skos" ], [ sh:namespace "http://schema.org/"^^xsd:anyURI ; sh:prefix "schema" ], + [ sh:namespace "https://w3id.org/shacl/"^^xsd:anyURI ; + sh:prefix "sh" ], [ sh:namespace "https://w3id.org/linkml/"^^xsd:anyURI ; sh:prefix "linkml" ], - [ sh:namespace "http://purl.org/pav/"^^xsd:anyURI ; - sh:prefix "pav" ] ; + [ sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; + sh:prefix "skos" ] ; linkml:classes linkml:ValidationReport, linkml:ValidationResult ; linkml:default_curi_maps "semweb_context" ; @@ -32,10 +32,10 @@ linkml:reporting a linkml:SchemaDefinition ; "xsd" ; linkml:enums linkml:problem_type, linkml:severity_options ; - linkml:generation_date "2026-05-05T18:49:52"^^xsd:dateTime ; + linkml:generation_date "2026-08-12T09:43:04"^^xsd:dateTime ; linkml:id "https://w3id.org/linkml/reporting"^^xsd:anyURI ; linkml:imports "linkml:types"^^xsd:anyURI ; - linkml:metamodel_version "1.7.0" ; + linkml:metamodel_version "1.11.0" ; linkml:slots linkml:info, linkml:instantiates, linkml:node_source, diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/validation.ttl b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/validation.ttl index 8457c3fc80..226c5a6871 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/validation.ttl +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/rdf/validation.ttl @@ -7,16 +7,16 @@ linkml:reporting a linkml:SchemaDefinition ; dcterms:license "https://creativecommons.org/publicdomain/zero/1.0/" ; dcterms:title "LinkML Report Metamodel" ; - sh:declare [ sh:namespace "https://w3id.org/shacl/"^^xsd:anyURI ; - sh:prefix "sh" ], + sh:declare [ sh:namespace "http://purl.org/pav/"^^xsd:anyURI ; + sh:prefix "pav" ], [ sh:namespace "http://schema.org/"^^xsd:anyURI ; sh:prefix "schema" ], [ sh:namespace "https://w3id.org/linkml/"^^xsd:anyURI ; sh:prefix "linkml" ], [ sh:namespace "http://www.w3.org/2004/02/skos/core#"^^xsd:anyURI ; sh:prefix "skos" ], - [ sh:namespace "http://purl.org/pav/"^^xsd:anyURI ; - sh:prefix "pav" ], + [ sh:namespace "https://w3id.org/shacl/"^^xsd:anyURI ; + sh:prefix "sh" ], [ sh:namespace "https://w3id.org/linkml/report"^^xsd:anyURI ; sh:prefix "reporting" ] ; linkml:classes linkml:ValidationReport, @@ -32,10 +32,10 @@ linkml:reporting a linkml:SchemaDefinition ; "xsd" ; linkml:enums linkml:problem_type, linkml:severity_options ; - linkml:generation_date "2026-05-05T18:49:50"^^xsd:dateTime ; + linkml:generation_date "2026-08-12T09:43:01"^^xsd:dateTime ; linkml:id "https://w3id.org/linkml/reporting"^^xsd:anyURI ; linkml:imports "linkml:types"^^xsd:anyURI ; - linkml:metamodel_version "1.7.0" ; + linkml:metamodel_version "1.11.0" ; linkml:slots linkml:info, linkml:instantiates, linkml:node_source, diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/shacl/meta.shacl.ttl b/packages/linkml_runtime/src/linkml_runtime/linkml_model/shacl/meta.shacl.ttl index 418d285830..e2ba96ec4e 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/shacl/meta.shacl.ttl +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/shacl/meta.shacl.ttl @@ -28,181 +28,181 @@ linkml:Annotatable a sh:NodeShape ; linkml:AnonymousExpression a sh:NodeShape ; rdfs:comment "An abstract parent class for any nested expression" ; sh:closed false ; - sh:ignoredProperties ( linkml:exact_cardinality linkml:array linkml:none_of linkml:implicit_prefix linkml:is_a linkml:slot_conditions linkml:minimum_cardinality linkml:any_of linkml:has_member linkml:range_expression linkml:pattern linkml:inlined_as_list linkml:structured_pattern rdf:type linkml:minimum_value linkml:exactly_one_of linkml:inlined linkml:value_presence linkml:equals_expression linkml:all_members linkml:maximum_cardinality linkml:enum_range linkml:maximum_value linkml:equals_string_in linkml:all_of linkml:equals_number linkml:range linkml:multivalued qudt:unit linkml:required linkml:equals_string linkml:bindings linkml:recommended ) ; - sh:property [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:nodeKind sh:IRI ; - sh:order 22 ; - sh:path skos:closeMatch ], - [ 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:Literal ; - sh:order 32 ; - sh:path sh:order ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:nodeKind sh:IRI ; - sh:order 24 ; - sh:path skos:narrowMatch ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:nodeKind sh:Literal ; - sh:order 7 ; - sh:path skos:editorialNote ], - [ sh:description "status of the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 31 ; - sh:path bibo:status ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:ignoredProperties ( linkml:inlined linkml:structured_pattern linkml:none_of rdf:type linkml:pattern linkml:maximum_value linkml:exactly_one_of linkml:value_presence linkml:equals_expression linkml:required linkml:all_members linkml:inlined_as_list linkml:equals_string linkml:minimum_cardinality linkml:all_of linkml:bindings linkml:is_a linkml:multivalued linkml:slot_conditions linkml:range linkml:exact_cardinality linkml:range_expression qudt:unit linkml:enum_range linkml:equals_string_in linkml:array linkml:maximum_cardinality linkml:minimum_value linkml:recommended linkml:has_member linkml:implicit_prefix linkml:equals_number linkml:any_of ) ; + sh:property [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - 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 broader meaning." ; - sh:nodeKind sh:IRI ; - sh:order 25 ; - sh:path skos:broadMatch ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 14 ; - sh:path schema1:inLanguage ], + sh:order 16 ; + sh:path linkml:deprecated_element_has_exact_replacement ], [ sh:datatype xsd:string ; sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 12 ; sh:path linkml:imported_from ], - [ sh:description "id of the schema that defined the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 11 ; - sh:path skos:inScheme ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:nodeKind sh:Literal ; - sh:order 8 ; - sh:path skos:note ], - [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:nodeKind sh:Literal ; - sh:order 34 ; - sh:path schema1:keywords ], - [ sh:description "agent that created the element" ; + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 26 ; - sh:path pav:createdBy ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:nodeKind sh:Literal ; - sh:order 6 ; - sh:path linkml:todos ], + sh:order 30 ; + sh:path oslc:modifiedBy ], [ sh:class linkml:Extension ; sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 0 ; 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:BlankNodeOrIRI ; - sh:order 19 ; - sh:path skosxl:altLabel ], - [ sh:description "agent that modified the element" ; - sh:maxCount 1 ; + [ sh:description "A list of related entities or URLs that may be of relevance" ; sh:nodeKind sh:IRI ; - sh:order 30 ; - sh:path oslc:modifiedBy ], + sh:order 15 ; + sh:path rdfs:seeAlso ], + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path skos:definition ], [ sh:description "Controlled terms used to categorize an element." ; sh:nodeKind sh:IRI ; sh:order 33 ; sh:path dcterms:subject ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 29 ; - 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:description "id of the schema that defined the element" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path dcterms:title ], - [ sh:description "A related resource from which the element is derived." ; + sh:nodeKind sh:IRI ; + sh:order 11 ; + sh:path skos:inScheme ], + [ sh:description "status of the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 13 ; - sh:path dcterms:source ], + sh:order 31 ; + sh:path bibo:status ], [ sh:datatype xsd:string ; sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 5 ; sh:path linkml:deprecated ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; sh:nodeKind sh:IRI ; - sh:order 23 ; - sh:path skos:relatedMatch ], + sh:order 22 ; + sh:path skos:closeMatch ], [ sh:class linkml:Example ; sh:description "example usages of an element" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 9 ; sh:path linkml:examples ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; sh:nodeKind sh:IRI ; - sh:order 15 ; - sh:path rdfs:seeAlso ], + sh:order 24 ; + sh:path skos:narrowMatch ], + [ 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:nodeKind sh:IRI ; + sh:order 20 ; + sh:path skos:mappingRelation ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 28 ; + 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:nodeKind sh:Literal ; sh:order 18 ; sh:path skos:altLabel ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:nodeKind sh:IRI ; - sh:order 21 ; - sh:path skos:exactMatch ], + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:nodeKind sh:Literal ; + sh:order 34 ; + sh:path schema1:keywords ], [ sh:class linkml:AltDescription ; sh:description "A sourced alternative description for an element" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 3 ; sh:path linkml:alt_descriptions ], - [ 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 "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:maxCount 1 ; 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 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 17 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ 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:Literal ; + sh:order 32 ; + sh:path sh:order ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; sh:nodeKind sh:IRI ; - sh:order 20 ; - sh:path skos:mappingRelation ], + sh:order 25 ; + 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:BlankNodeOrIRI ; + sh:order 1 ; + sh:path linkml:annotations ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:nodeKind sh:Literal ; + sh:order 8 ; + sh:path skos:note ], + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:nodeKind sh:Literal ; + sh:order 7 ; + sh:path skos:editorialNote ], [ sh:description "agent that contributed to the element" ; sh:nodeKind sh:IRI ; sh:order 27 ; sh:path dcterms:contributor ], [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; + sh:description "Outstanding issues that needs resolution" ; + sh:nodeKind sh:Literal ; + sh:order 6 ; + sh:path linkml:todos ], + [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path skos:definition ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:order 14 ; + sh:path schema1:inLanguage ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 29 ; + 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 10 ; + sh:path OIO:inSubset ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 1 ; - sh:path linkml:annotations ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:order 19 ; + sh:path skosxl:altLabel ], + [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - 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:order 13 ; + sh:path dcterms:source ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:nodeKind sh:IRI ; + sh:order 23 ; + sh:path skos:relatedMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:nodeKind sh:IRI ; + sh:order 21 ; + sh:path skos:exactMatch ], + [ 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:nodeKind sh:Literal ; - sh:order 28 ; - sh:path pav:createdOn ] ; + sh:order 4 ; + sh:path dcterms:title ], + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 26 ; + sh:path pav:createdBy ] ; sh:targetClass linkml:AnonymousExpression . linkml:Any a sh:NodeShape ; @@ -216,212 +216,212 @@ linkml:ClassExpression a sh:NodeShape ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:class linkml:AnonymousClassExpression ; - sh:description "holds if at least one of the expressions hold" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 0 ; - sh:path linkml:any_of ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "holds if all of the expressions hold" ; + sh:description "holds if only one of the expressions hold" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 3 ; - sh:path linkml:all_of ], + sh:order 1 ; + sh:path linkml:exactly_one_of ], [ sh:class linkml:AnonymousClassExpression ; sh:description "holds if none of the expressions hold" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 2 ; sh:path linkml:none_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:BlankNodeOrIRI ; - sh:order 1 ; - sh:path linkml:exactly_one_of ], + sh:order 3 ; + sh:path linkml:all_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:path linkml:slot_conditions ], + [ sh:class linkml:AnonymousClassExpression ; + sh:description "holds if at least one of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 0 ; + sh:path linkml:any_of ] ; sh:targetClass linkml:ClassExpression . linkml:ClassLevelRule a sh:NodeShape ; rdfs:comment "A rule that is applied to classes" ; sh:closed false ; - sh:ignoredProperties ( pav:createdOn linkml:extensions sh:deactivated OIO:inSubset linkml:todos skosxl:altLabel linkml:deprecated linkml:alt_descriptions dcterms:title rdfs:seeAlso skos:closeMatch skos:definition skos:broadMatch dcterms:source linkml:imported_from schema1:inLanguage skos:relatedMatch schema1:keywords rdf:type linkml:elseconditions linkml:examples skos:narrowMatch linkml:annotations linkml:open_world dcterms:contributor sh:condition oslc:modifiedBy skos:inScheme linkml:bidirectional pav:createdBy linkml:deprecated_element_has_exact_replacement linkml:postconditions skos:mappingRelation linkml:deprecated_element_has_possible_replacement bibo:status skos:editorialNote skos:note skos:altLabel pav:lastUpdatedOn sh:order dcterms:subject skos:exactMatch ) ; + sh:ignoredProperties ( skos:closeMatch dcterms:contributor pav:createdBy dcterms:subject rdf:type schema1:inLanguage linkml:examples OIO:inSubset linkml:bidirectional bibo:status linkml:alt_descriptions skos:editorialNote linkml:todos skos:relatedMatch linkml:deprecated linkml:postconditions dcterms:source skos:narrowMatch linkml:deprecated_element_has_exact_replacement oslc:modifiedBy skos:exactMatch skos:broadMatch sh:condition rdfs:seeAlso sh:order linkml:extensions skos:note linkml:deprecated_element_has_possible_replacement linkml:imported_from sh:deactivated pav:lastUpdatedOn skos:inScheme pav:createdOn skos:definition linkml:annotations skosxl:altLabel schema1:keywords skos:mappingRelation linkml:open_world linkml:elseconditions dcterms:title skos:altLabel ) ; sh:targetClass linkml:ClassLevelRule . linkml:CommonMetadata a sh:NodeShape ; rdfs:comment "Generic metadata shared across definitions" ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; + sh:property [ sh:datatype xsd:string ; + sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 26 ; - sh:path pav:createdOn ], - [ sh:description "agent that modified the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 28 ; - sh:path oslc:modifiedBy ], - [ 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:nodeKind sh:Literal ; - sh:order 16 ; - sh:path skos:altLabel ], + sh:order 3 ; + sh:path linkml:deprecated ], [ 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:nodeKind sh:Literal ; sh:order 2 ; sh:path dcterms:title ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + [ sh:datatype xsd:string ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 10 ; + sh:path linkml:imported_from ], + [ sh:description "agent that contributed to the element" ; sh:nodeKind sh:IRI ; - sh:order 22 ; - sh:path skos:narrowMatch ], + sh:order 25 ; + 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:nodeKind sh:IRI ; 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:nodeKind sh:Literal ; - sh:order 5 ; - sh:path skos:editorialNote ], - [ sh:description "status of 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:nodeKind sh:Literal ; + sh:order 30 ; + sh:path sh:order ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; sh:nodeKind sh:IRI ; - sh:order 29 ; - sh:path bibo:status ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; + sh:order 20 ; + sh:path skos:closeMatch ], + [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 27 ; - sh:path pav:lastUpdatedOn ], + sh:order 12 ; + sh:path schema1:inLanguage ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 1 ; + sh:path linkml:alt_descriptions ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:nodeKind sh:IRI ; + sh:order 21 ; + sh:path skos:relatedMatch ], [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; sh:nodeKind sh:IRI ; sh:order 19 ; sh:path skos:exactMatch ], - [ sh:description "id of the schema that defined the element" ; + [ sh:description "status of the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 9 ; - sh:path skos:inScheme ], - [ sh:description "agent that contributed to the element" ; + sh:order 29 ; + sh:path bibo:status ], + [ sh:description "agent that modified the element" ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 25 ; - sh:path dcterms:contributor ], + sh:order 28 ; + sh:path oslc:modifiedBy ], + [ sh:description "A related resource from which the element is derived." ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 11 ; + sh:path dcterms:source ], [ 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:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:nodeKind sh:IRI ; - sh:order 21 ; - sh:path skos:relatedMatch ], - [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path linkml:deprecated ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:nodeKind sh:IRI ; - sh:order 20 ; - 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:nodeKind sh:IRI ; sh:order 15 ; 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:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 10 ; - sh:path linkml:imported_from ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 27 ; + sh:path pav:lastUpdatedOn ], + [ sh:description "id of the schema that defined the element" ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 13 ; - sh:path rdfs:seeAlso ], + 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:nodeKind sh:IRI ; + sh:order 18 ; + sh:path skos:mappingRelation ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:nodeKind sh:IRI ; + sh:order 22 ; + sh:path skos:narrowMatch ], [ sh:datatype xsd:string ; sh:description "Outstanding issues that needs resolution" ; sh:nodeKind sh:Literal ; sh:order 4 ; sh:path linkml:todos ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:nodeKind sh:IRI ; - sh:order 31 ; - sh:path dcterms:subject ], - [ 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:Literal ; - sh:order 30 ; - sh:path sh:order ], [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; - sh:maxCount 1 ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; sh:nodeKind sh:Literal ; - sh:order 12 ; - sh:path schema1:inLanguage ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 1 ; - sh:path linkml:alt_descriptions ], + sh:order 5 ; + sh:path skos:editorialNote ], [ sh:class linkml:Example ; sh:description "example usages of an element" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 7 ; sh:path linkml:examples ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 17 ; - sh:path skosxl:altLabel ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:nodeKind sh:IRI ; + sh:order 13 ; + sh:path rdfs:seeAlso ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 26 ; + sh:path pav:createdOn ], + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 24 ; + sh:path pav:createdBy ], [ sh:datatype xsd:string ; sh:description "notes and comments about an element intended primarily for external consumption" ; sh:nodeKind sh:Literal ; sh:order 6 ; sh:path skos:note ], - [ sh:description "A related resource from which the element is derived." ; + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path skos:definition ], + [ sh:description "Controlled terms used to categorize an element." ; sh:nodeKind sh:IRI ; - sh:order 11 ; - sh:path dcterms:source ], + 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:BlankNodeOrIRI ; + sh:order 17 ; + sh:path skosxl:altLabel ], [ sh:datatype xsd:string ; sh:description "Keywords or tags used to describe the element" ; sh:nodeKind sh:Literal ; sh:order 32 ; sh:path schema1:keywords ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:nodeKind sh:IRI ; - sh:order 23 ; - sh:path skos:broadMatch ], - [ sh:description "agent that created the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 24 ; - sh:path pav:createdBy ], [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; - sh:maxCount 1 ; + 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:nodeKind sh:Literal ; - sh:order 0 ; - sh:path skos:definition ], - [ 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 16 ; + sh:path skos:altLabel ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; sh:nodeKind sh:IRI ; - sh:order 18 ; - sh:path skos:mappingRelation ] ; + sh:order 23 ; + sh:path skos:broadMatch ] ; sh:targetClass linkml:CommonMetadata . linkml:Expression a sh:NodeShape ; rdfs:comment "general mixin for any class that can represent some form of expression" ; sh:closed false ; - sh:ignoredProperties ( linkml:exact_cardinality linkml:array linkml:none_of linkml:implicit_prefix linkml:include linkml:minimum_cardinality linkml:inherits linkml:any_of linkml:minus linkml:has_member linkml:pv_formula linkml:range_expression linkml:pattern linkml:inlined_as_list linkml:structured_pattern rdf:type linkml:minimum_value linkml:exactly_one_of linkml:inlined linkml:value_presence linkml:code_set_tag linkml:equals_expression linkml:all_members linkml:code_set_version linkml:maximum_cardinality linkml:enum_range linkml:maximum_value linkml:equals_string_in linkml:code_set linkml:all_of linkml:equals_number linkml:permissible_values linkml:range linkml:reachable_from linkml:multivalued linkml:matches qudt:unit linkml:required linkml:equals_string linkml:bindings linkml:concepts linkml:recommended ) ; + sh:ignoredProperties ( linkml:inlined linkml:structured_pattern linkml:none_of rdf:type linkml:inherits linkml:pattern linkml:maximum_value linkml:exactly_one_of linkml:matches linkml:value_presence linkml:equals_expression linkml:required linkml:pv_formula linkml:include linkml:all_members linkml:equals_string linkml:inlined_as_list linkml:concepts linkml:minimum_cardinality linkml:all_of linkml:bindings linkml:multivalued linkml:code_set_tag linkml:minus linkml:range linkml:exact_cardinality linkml:range_expression linkml:code_set_version qudt:unit linkml:enum_range linkml:equals_string_in linkml:array linkml:permissible_values linkml:maximum_cardinality linkml:minimum_value linkml:reachable_from linkml:code_set linkml:recommended linkml:has_member linkml:implicit_prefix linkml:equals_number linkml:any_of ) ; sh:targetClass linkml:Expression . linkml:Extensible a sh:NodeShape ; @@ -439,67 +439,74 @@ linkml:ImportExpression a sh:NodeShape ; rdfs:comment "an expression describing an import" ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 31 ; - sh:path pav:createdOn ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 12 ; - sh:path linkml:examples ], - [ sh:maxCount 1 ; + sh:property [ sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:IRI ; sh:order 0 ; sh:path linkml:import_from ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:nodeKind sh:IRI ; + sh:order 36 ; + 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:description "the primary language used in the sources" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 7 ; - sh:path dcterms:title ], - [ sh:class linkml:Setting ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 2 ; - sh:path linkml:import_map ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 3 ; - sh:path linkml:extensions ], - [ sh:description "agent that modified the element" ; + 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:nodeKind sh:IRI ; + sh:order 13 ; + sh:path OIO:inSubset ], + [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 33 ; - sh:path oslc:modifiedBy ], + 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:nodeKind sh:Literal ; - sh:order 1 ; - sh:path linkml:import_as ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:nodeKind sh:Literal ; - sh:order 11 ; - sh:path skos:note ], + sh:order 7 ; + sh:path dcterms:title ], + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 29 ; + sh:path pav:createdBy ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:nodeKind sh:IRI ; + sh:order 27 ; + 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:nodeKind sh:IRI ; sh:order 19 ; sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:description "Controlled terms used to categorize an element." ; + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; sh:nodeKind sh:IRI ; - sh:order 36 ; - sh:path dcterms:subject ], - [ 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:Literal ; - sh:order 35 ; - sh:path sh:order ], + sh:order 28 ; + sh:path skos:broadMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:nodeKind sh:IRI ; + sh:order 25 ; + sh:path skos:closeMatch ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 31 ; + sh:path pav:createdOn ], + [ sh:description "id of the schema that defined the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 14 ; + sh:path skos:inScheme ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:nodeKind sh:IRI ; + sh:order 24 ; + sh:path skos:exactMatch ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was last updated" ; sh:maxCount 1 ; @@ -507,292 +514,317 @@ linkml:ImportExpression a sh:NodeShape ; sh:order 32 ; sh:path pav:lastUpdatedOn ], [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + 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:nodeKind sh:Literal ; + sh:order 21 ; + sh:path skos:altLabel ], + [ 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:Literal ; - sh:order 17 ; - sh:path schema1:inLanguage ], - [ sh:description "agent that contributed to the element" ; - sh:nodeKind sh:IRI ; - sh:order 30 ; - sh:path dcterms:contributor ], - [ sh:description "agent that created the element" ; + sh:order 35 ; + 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:nodeKind sh:IRI ; - sh:order 29 ; - sh:path pav:createdBy ], + sh:nodeKind sh:Literal ; + sh:order 8 ; + sh:path linkml:deprecated ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 22 ; + sh:path skosxl:altLabel ], + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path skos:definition ], + [ sh:class linkml:Setting ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 2 ; + sh:path linkml:import_map ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 3 ; + sh:path linkml:extensions ], + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:nodeKind sh:Literal ; + sh:order 37 ; + sh:path schema1:keywords ], [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; sh:nodeKind sh:IRI ; sh:order 26 ; sh:path skos:relatedMatch ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 20 ; + 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:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 21 ; - sh:path skos:altLabel ], + sh:order 1 ; + sh:path linkml:import_as ], [ sh:datatype xsd:string ; sh:description "editorial notes about an element intended primarily for internal consumption" ; sh:nodeKind sh:Literal ; sh:order 10 ; sh:path skos:editorialNote ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:nodeKind sh:IRI ; - sh:order 27 ; - sh:path skos:narrowMatch ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:nodeKind sh:IRI ; - sh:order 24 ; - sh:path skos:exactMatch ], - [ sh:description "A related resource from which the element is derived." ; + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:nodeKind sh:Literal ; + sh:order 11 ; + sh:path skos:note ], + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 16 ; - sh:path dcterms:source ], + sh:order 33 ; + sh:path oslc:modifiedBy ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 6 ; + sh:path linkml:alt_descriptions ], [ 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:nodeKind sh:IRI ; sh:order 23 ; sh:path skos:mappingRelation ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:nodeKind sh:IRI ; - sh:order 28 ; - sh:path skos:broadMatch ], - [ sh:description "status of the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 34 ; - sh:path bibo:status ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 22 ; - sh:path skosxl:altLabel ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:nodeKind sh:IRI ; - sh:order 25 ; - sh:path skos:closeMatch ], - [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:nodeKind sh:Literal ; - sh:order 37 ; - sh:path schema1:keywords ], [ sh:description "A list of related entities or URLs that may be of relevance" ; sh:nodeKind sh:IRI ; 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:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 6 ; - sh:path linkml:alt_descriptions ], + sh:order 12 ; + sh:path linkml:examples ], [ sh:datatype xsd:string ; sh:description "Outstanding issues that needs resolution" ; sh:nodeKind sh:Literal ; 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:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 8 ; - sh:path linkml:deprecated ], - [ sh:description "id of the schema that defined the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 14 ; - 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:nodeKind sh:IRI ; - sh:order 20 ; - 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:nodeKind sh:Literal ; - sh:order 5 ; - 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:BlankNodeOrIRI ; + sh:order 4 ; + sh:path linkml:annotations ], [ sh:datatype xsd:string ; sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 15 ; sh:path linkml:imported_from ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 4 ; - sh:path linkml:annotations ] ; + [ sh:description "status of the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 34 ; + sh:path bibo:status ], + [ sh:description "agent that contributed to the element" ; + sh:nodeKind sh:IRI ; + sh:order 30 ; + sh:path dcterms:contributor ] ; sh:targetClass linkml:ImportExpression . linkml:SchemaDefinition a sh:NodeShape ; rdfs:comment "A collection of definitions that make up a schema or a data model." ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ 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:property [ sh:datatype xsd:string ; + sh:description "ordered list of prefixcommon biocontexts to be fetched to resolve id prefixes and inline prefix variables" ; sh:nodeKind sh:Literal ; - sh:order 19 ; - sh:path linkml:slot_names_unique ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 6 ; + sh:path linkml:default_curi_maps ], + [ sh:description "status of the element" ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 53 ; - sh:path skos:relatedMatch ], + 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:nodeKind sh:IRI ; + sh:order 46 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:datatype xsd:string ; + sh:defaultValue "default_ns"^^xsd:string ; + sh:description "The prefix that is used for all elements within a schema" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 7 ; + sh:path linkml:default_prefix ], [ sh:datatype xsd:string ; sh:description "Version of the metamodel used to load the schema" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; 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:BlankNodeOrIRI ; - sh:order 49 ; - sh:path skosxl:altLabel ], [ 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 "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 22 ; - sh:path rdfs:label ], + sh:order 42 ; + sh:path linkml:imported_from ], + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 56 ; + sh:path pav:createdBy ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:nodeKind sh:IRI ; + sh:order 55 ; + sh:path skos:broadMatch ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:nodeKind sh:IRI ; + sh:order 63 ; + sh:path dcterms:subject ], [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; + sh:description "license for the schema" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 32 ; - sh:path skos:definition ], + sh:order 3 ; + sh:path dcterms:license ], [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; - sh:maxCount 1 ; + 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:nodeKind sh:Literal ; - sh:order 35 ; - sh:path linkml:deprecated ], + sh:order 23 ; + sh:path linkml:id_prefixes ], [ 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:description "the primary language used in the sources" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 48 ; - sh:path skos:altLabel ], + sh:order 44 ; + sh:path schema1:inLanguage ], [ sh:description "An element in another schema which this element instantiates." ; sh:nodeKind sh:IRI ; sh:order 29 ; sh:path linkml:instantiates ], [ sh:datatype xsd:string ; - sh:description "ordered list of prefixcommon biocontexts to be fetched to resolve id prefixes and inline prefix variables" ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; sh:nodeKind sh:Literal ; - sh:order 6 ; - sh:path linkml:default_curi_maps ], - [ sh:class linkml:ClassDefinition ; - sh:description "An index to the collection of all class definitions in the schema" ; + sh:order 37 ; + sh:path skos:editorialNote ], + [ 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 13 ; - sh:path linkml:classes ], - [ sh:description "A related resource from which the element is derived." ; + sh:order 8 ; + sh:path linkml:default_range ], + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 43 ; - sh:path dcterms:source ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; + sh:order 60 ; + sh:path oslc:modifiedBy ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:nodeKind sh:Literal ; + sh:order 38 ; + sh:path skos:note ], + [ sh:description "agent that contributed to the element" ; + sh:nodeKind sh:IRI ; + sh:order 57 ; + sh:path dcterms:contributor ], + [ sh:datatype xsd:integer ; + sh:description "size in bytes of the source of the schema" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 58 ; - sh:path pav:createdOn ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 33 ; - sh:path linkml:alt_descriptions ], + sh:order 17 ; + sh:path linkml:source_file_size ], [ sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 41 ; sh:path skos:inScheme ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 39 ; - sh:path linkml:examples ], [ sh:datatype xsd:integer ; - sh:description "size in bytes of the source of the schema" ; + sh:description "the relative order in which the element occurs, lower values are given precedence" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 17 ; - sh:path linkml:source_file_size ], + sh:order 62 ; + sh:path sh:order ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:nodeKind sh:IRI ; + sh:order 54 ; + 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:BlankNodeOrIRI ; + sh:order 31 ; + sh:path linkml:annotations ], [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; + sh:description "Description of why and when this element will no longer be used" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 64 ; - sh:path schema1:keywords ], + sh:order 35 ; + sh:path linkml:deprecated ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 30 ; + sh:path linkml:extensions ], [ 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 "name, uri or description of the source of the schema" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 34 ; - sh:path dcterms:title ], + sh:order 15 ; + sh:path linkml:source_file ], [ sh:class linkml:Setting ; sh:description "A collection of global variable settings" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 20 ; sh:path linkml:settings ], - [ sh:description "agent that created the element" ; - sh:maxCount 1 ; + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; sh:nodeKind sh:IRI ; - sh:order 56 ; - sh:path pav:createdBy ], + sh:order 52 ; + sh:path skos:closeMatch ], [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + 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:nodeKind sh:Literal ; - sh:order 44 ; - sh:path schema1:inLanguage ], - [ sh:description "agent that modified the element" ; + sh:order 22 ; + sh:path rdfs:label ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 60 ; - sh:path oslc:modifiedBy ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:nodeKind sh:IRI ; - sh:order 52 ; - sh:path skos:closeMatch ], - [ sh:class linkml:TypeDefinition ; - sh:description "default slot range to be used if range element is omitted from a slot definition" ; + sh:order 47 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:nodeKind sh:Literal ; + sh:order 36 ; + sh:path linkml:todos ], + [ sh:description "The official schema URI" ; sh:maxCount 1 ; + sh:minCount 1 ; sh:nodeKind sh:IRI ; - sh:order 8 ; - sh:path linkml:default_range ], + sh:order 0 ; + sh:path linkml:id ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:nodeKind sh:IRI ; + sh:order 51 ; + sh:path skos:exactMatch ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:nodeKind sh:IRI ; + sh:order 45 ; + sh:path rdfs:seeAlso ], [ sh:datatype xsd:string ; sh:description "An established standard to which the element conforms." ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 27 ; sh:path dcterms:conformsTo ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 46 ; - sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:description "status of the element" ; + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 32 ; + sh:path skos:definition ], + [ sh:class linkml:SlotDefinition ; + sh:description "An index to the collection of all slot definitions in the schema" ; sh:nodeKind sh:IRI ; - sh:order 61 ; - sh:path bibo:status ], - [ 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:BlankNodeOrIRI ; - sh:order 21 ; - sh:path linkml:bindings ], - [ 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:order 12 ; + sh:path linkml:slot_definitions ], [ sh:class linkml:Prefix ; sh:description "A collection of prefix expansions that specify how CURIEs can be expanded to URIs" ; sh:nodeKind sh:BlankNodeOrIRI ; @@ -804,251 +836,161 @@ Enum bindings allow enums to be bound to any object, including complex nested ob sh:nodeKind sh:Literal ; sh:order 1 ; sh:path pav:version ], + [ 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:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 49 ; + sh:path skosxl:altLabel ], [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; + 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:nodeKind sh:Literal ; - sh:order 36 ; - sh:path linkml:todos ], + sh:order 48 ; + sh:path skos:altLabel ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:nodeKind sh:IRI ; + sh:order 53 ; + sh:path skos:relatedMatch ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 39 ; + sh:path linkml:examples ], + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:nodeKind sh:Literal ; + sh:order 64 ; + sh:path schema1:keywords ], + [ 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:nodeKind sh:Literal ; + sh:order 19 ; + sh:path linkml:slot_names_unique ], + [ sh:description "A related resource from which the element is derived." ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 43 ; + sh:path dcterms:source ], + [ 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: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:nodeKind sh:Literal ; sh:order 5 ; sh:path linkml:emit_prefixes ], + [ sh:datatype xsd:dateTime ; + sh:description "date and time that the schema was loaded/generated" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 18 ; + sh:path linkml:generation_date ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 58 ; + sh:path pav:createdOn ], [ sh:class linkml:LocalName ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 26 ; sh:path linkml:local_names ], - [ sh:class linkml:SubsetDefinition ; - sh:description "An index to the collection of all subset definitions in the schema" ; + [ sh:class linkml:EnumDefinition ; + sh:description "An index to the collection of all enum definitions in the schema" ; sh:nodeKind sh:IRI ; - sh:order 9 ; - sh:path linkml:subsets ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 11 ; + sh:path linkml:enums ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 59 ; + sh:path pav:lastUpdatedOn ], + [ sh:datatype xsd:dateTime ; + sh:description "modification date of the source of the schema" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 16 ; + sh:path linkml:source_file_date ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 33 ; + sh:path linkml:alt_descriptions ], + [ 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:nodeKind sh:IRI ; - sh:order 45 ; - sh:path rdfs:seeAlso ], + sh:order 50 ; + sh:path skos:mappingRelation ], [ 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:datatype xsd:dateTime ; - sh:description "date and time that the schema was loaded/generated" ; + [ 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:nodeKind sh:Literal ; - sh:order 18 ; - sh:path linkml:generation_date ], + sh:order 34 ; + sh:path dcterms:title ], [ 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:description "agent that contributed to the element" ; - sh:nodeKind sh:IRI ; - sh:order 57 ; - 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:nodeKind sh:IRI ; - sh:order 25 ; - sh:path linkml:definition_uri ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 47 ; - sh:path linkml:deprecated_element_has_possible_replacement ], - [ sh:datatype xsd:string ; - sh:description "license for the schema" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path dcterms:license ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:nodeKind sh:Literal ; - sh:order 37 ; - sh:path skos:editorialNote ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:nodeKind sh:IRI ; - sh:order 63 ; - sh:path dcterms:subject ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:nodeKind sh:Literal ; - sh:order 38 ; - sh:path skos:note ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 59 ; - sh:path pav:lastUpdatedOn ], - [ 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: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:nodeKind sh:Literal ; - sh:order 23 ; - sh:path linkml:id_prefixes ], - [ sh:description "A list of schemas that are to be included in this schema" ; - sh:nodeKind sh:IRI ; - sh:order 2 ; - sh:path linkml:imports ], - [ sh:datatype xsd:string ; - sh:defaultValue "default_ns"^^xsd:string ; - sh:description "The prefix that is used for all elements within a schema" ; + [ 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:Literal ; - sh:order 7 ; - sh:path linkml:default_prefix ], + sh:order 24 ; + 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:nodeKind sh:IRI ; sh:order 28 ; sh:path linkml:implements ], - [ 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:Literal ; - sh:order 62 ; - sh:path sh:order ], - [ sh:description "The official schema URI" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 0 ; - sh:path linkml:id ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:nodeKind sh:IRI ; - sh:order 55 ; - 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:nodeKind sh:Literal ; - sh:order 42 ; - sh:path linkml:imported_from ], - [ 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:Literal ; - sh:order 24 ; - sh:path linkml:id_prefixes_are_closed ], - [ 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:nodeKind sh:IRI ; - sh:order 50 ; - sh:path skos:mappingRelation ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + [ sh:description "A list of schemas that are to be included in this schema" ; sh:nodeKind sh:IRI ; - sh:order 54 ; - sh:path skos:narrowMatch ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:order 2 ; + sh:path linkml:imports ], + [ 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:BlankNodeOrIRI ; - sh:order 30 ; - sh:path linkml:extensions ], - [ sh:datatype xsd:dateTime ; - sh:description "modification date of the source of the schema" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 16 ; - sh:path linkml:source_file_date ], - [ sh:datatype xsd:string ; - sh:description "name, uri or description of the source of the schema" ; + sh:order 21 ; + sh:path linkml:bindings ], + [ 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:Literal ; - sh:order 15 ; - sh:path linkml:source_file ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; sh:nodeKind sh:IRI ; - 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:BlankNodeOrIRI ; - sh:order 31 ; - sh:path linkml:annotations ] ; + sh:order 25 ; + sh:path linkml:definition_uri ] ; sh:targetClass linkml:SchemaDefinition . linkml:SlotExpression a sh:NodeShape ; rdfs:comment "an expression that constrains the range of values a slot can take" ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class linkml:EnumExpression ; - sh:description "An inlined enumeration" ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 2 ; - sh:path linkml:enum_range ], - [ 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:nodeKind sh:Literal ; - sh:order 5 ; - sh:path linkml:recommended ], - [ 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:nodeKind sh:Literal ; - sh:order 14 ; - sh:path linkml:implicit_prefix ], - [ 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:BlankNodeOrIRI ; - sh:order 23 ; - sh:path linkml:has_member ], - [ 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: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:nodeKind sh:Literal ; - sh:order 8 ; - sh:path linkml:inlined_as_list ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "holds if only one of the expressions hold" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 26 ; - sh:path linkml:exactly_one_of ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "holds if all of the expressions hold" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 28 ; - sh:path linkml:all_of ], - [ sh:class qudt:Unit ; - sh:description "an encoding of a unit" ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 13 ; - sh:path qudt: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:nodeKind sh:Literal ; - sh:order 17 ; - sh:path linkml:equals_string_in ], - [ sh:datatype xsd:boolean ; - sh:description "true means that the slot must be present in instances of the class definition" ; + sh:property [ sh:description "For ordinal ranges, the value must be equal to or lower than this" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path linkml:required ], + sh:order 10 ; + sh:path linkml:maximum_value ], [ sh:class linkml:AnonymousSlotExpression ; sh:description "holds if at least one of the expressions hold" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 27 ; 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: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:nodeKind sh:Literal ; - sh:order 16 ; - sh:path linkml:equals_string ], + sh:order 18 ; + sh:path linkml:equals_number ], [ 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). @@ -1056,10 +998,17 @@ Enum bindings allow enums to be bound to any object, including complex nested ob sh:nodeKind sh:BlankNodeOrIRI ; sh:order 3 ; sh:path linkml:bindings ], - [ sh:description "For ordinal ranges, the value must be equal to or lower than this" ; + [ 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 10 ; - sh:path linkml:maximum_value ], + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path linkml:recommended ], + [ sh:class linkml:AnonymousSlotExpression ; + sh:description "holds if only one of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 26 ; + sh:path linkml:exactly_one_of ], [ sh:class linkml:Element ; sh:defaultValue "string"^^xsd:string ; sh:description """defines the type of the object of the slot. Given the following slot definition @@ -1076,18 +1025,36 @@ implicitly asserts Y is an instance of C2 sh:nodeKind sh:IRI ; sh:order 0 ; sh:path linkml:range ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "the value of the slot is multivalued with all members satisfying the condition" ; + [ 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:nodeKind sh:BlankNodeOrIRI ; - sh:order 24 ; - sh:path linkml:all_members ], + sh:nodeKind sh:Literal ; + sh:order 16 ; + sh:path linkml:equals_string ], + [ sh:datatype xsd:boolean ; + sh:description "true means that the slot must be present in instances of the class definition" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 4 ; + sh:path linkml:required ], [ 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:nodeKind sh:Literal ; sh:order 7 ; sh:path linkml:inlined ], + [ 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:BlankNodeOrIRI ; + sh:order 29 ; + sh:path linkml:array ], + [ 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:nodeKind sh:Literal ; + sh:order 11 ; + sh:path linkml:pattern ], [ sh:class linkml:AnonymousSlotExpression ; sh:description "holds if none of the expressions hold" ; sh:nodeKind sh:BlankNodeOrIRI ; @@ -1099,60 +1066,93 @@ implicitly asserts Y is an instance of C2 sh:nodeKind sh:Literal ; sh:order 6 ; 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:integer ; + sh:description "the minimum number of entries for a multivalued slot" ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 29 ; - sh:path linkml:array ], + sh:nodeKind sh:Literal ; + sh:order 21 ; + 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 one of the specified values" ; + sh:nodeKind sh:Literal ; + sh:order 17 ; + 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:BlankNodeOrIRI ; sh:order 12 ; sh:path linkml:structured_pattern ], - [ sh:datatype xsd:string ; - sh:description "the value of the slot must equal the value of the evaluated expression" ; + [ sh:class linkml:AnonymousClassExpression ; + sh:description "A range that is described as a boolean expression combining existing ranges" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 19 ; - sh:path linkml:equals_expression ], + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 1 ; + sh:path linkml:range_expression ], + [ sh:class linkml:AnonymousSlotExpression ; + sh:description "holds if all of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 28 ; + sh:path linkml:all_of ], [ sh:datatype xsd:integer ; - sh:description "the exact number of entries for a multivalued slot" ; + sh:description "the maximum number of entries for a multivalued slot" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - 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:order 22 ; + sh:path linkml:maximum_cardinality ], + [ sh:class linkml:EnumExpression ; + sh:description "An inlined enumeration" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 11 ; - sh:path linkml:pattern ], + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 2 ; + sh:path linkml:enum_range ], + [ sh:class qudt:Unit ; + sh:description "an encoding of a unit" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 13 ; + sh:path qudt:unit ], + [ 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: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:BlankNodeOrIRI ; + sh:order 23 ; + sh:path linkml:has_member ], + [ sh:class linkml:AnonymousSlotExpression ; + sh:description "the value of the slot is multivalued with all members satisfying the condition" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 24 ; + sh:path linkml:all_members ], [ 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 exact number of entries for a multivalued slot" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 18 ; - sh:path linkml:equals_number ], - [ sh:datatype xsd:integer ; - sh:description "the minimum number of entries for a multivalued slot" ; + sh:order 20 ; + sh:path linkml:exact_cardinality ], + [ 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:nodeKind sh:Literal ; - sh:order 21 ; - sh:path linkml:minimum_cardinality ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "A range that is described as a boolean expression combining existing ranges" ; + sh:order 8 ; + sh:path linkml:inlined_as_list ], + [ 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:nodeKind sh:BlankNodeOrIRI ; - sh:order 1 ; - sh:path linkml:range_expression ], - [ sh:datatype xsd:integer ; - sh:description "the maximum number of entries for a multivalued slot" ; + sh:nodeKind sh:Literal ; + sh:order 14 ; + sh:path linkml:implicit_prefix ], + [ sh:datatype xsd:string ; + sh:description "the value of the slot must equal the value of the evaluated expression" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 22 ; - sh:path linkml:maximum_cardinality ], + sh:order 19 ; + sh:path linkml:equals_expression ], [ sh:description "For ordinal ranges, the value must be equal to or higher than this" ; sh:maxCount 1 ; sh:order 9 ; @@ -1163,70 +1163,70 @@ linkml:TypeExpression a sh:NodeShape ; rdfs:comment "An abstract class grouping named types and anonymous type expressions" ; sh:closed false ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "the string value of the slot must conform to this regular expression expressed in the string" ; + sh:property [ sh:description "For ordinal ranges, the value must be equal to or higher than this" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path linkml:pattern ], - [ 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 7 ; + sh:path linkml:minimum_value ], + [ sh:description "For ordinal ranges, the value must be equal to or lower than this" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path linkml:equals_string ], + sh:order 8 ; + sh:path linkml:maximum_value ], [ sh:class linkml:AnonymousTypeExpression ; sh:description "holds if only one of the expressions hold" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 10 ; sh:path linkml:exactly_one_of ], - [ sh:description "For ordinal ranges, the value must be equal to or lower than this" ; - sh:maxCount 1 ; - sh:order 8 ; - sh:path linkml:maximum_value ], [ 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:nodeKind sh:Literal ; sh:order 3 ; 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:BlankNodeOrIRI ; + sh:order 1 ; + sh:path linkml:structured_pattern ], [ sh:class qudt:Unit ; sh:description "an encoding of a unit" ; sh:maxCount 1 ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 2 ; sh:path qudt:unit ], + [ 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:nodeKind sh:Literal ; + sh:order 0 ; + sh:path linkml:pattern ], [ sh:class linkml:AnonymousTypeExpression ; - sh:description "holds if none of the expressions hold" ; + sh:description "holds if all of the expressions hold" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 9 ; - sh:path linkml:none_of ], + sh:order 12 ; + sh:path linkml:all_of ], + [ sh:class linkml:AnonymousTypeExpression ; + sh:description "holds if at least one of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 11 ; + sh:path linkml:any_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:nodeKind sh:Literal ; sh:order 6 ; sh:path linkml:equals_number ], - [ sh:description "For ordinal ranges, the value must be equal to or higher than this" ; - sh:maxCount 1 ; - 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: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:nodeKind sh:BlankNodeOrIRI ; - sh:order 1 ; - sh:path linkml:structured_pattern ], - [ sh:class linkml:AnonymousTypeExpression ; - sh:description "holds if at least one of the expressions hold" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 11 ; - sh:path linkml:any_of ], + sh:nodeKind sh:Literal ; + sh:order 4 ; + sh:path linkml:equals_string ], [ 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:BlankNodeOrIRI ; - sh:order 12 ; - sh:path linkml:all_of ], + sh:order 9 ; + sh:path linkml:none_of ], [ 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:nodeKind sh:Literal ; @@ -1238,416 +1238,416 @@ linkml:ClassRule a sh:NodeShape ; rdfs:comment "A rule that applies to instances of a class" ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:dateTime ; + sh:property [ sh:datatype xsd:boolean ; + sh:description "in addition to preconditions entailing postconditions, the postconditions entail the preconditions" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 3 ; + sh:path linkml:bidirectional ], + [ 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:nodeKind sh:IRI ; + sh:order 27 ; + sh:path skos:mappingRelation ], + [ 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:nodeKind sh:BlankNodeOrIRI ; + sh:order 2 ; + sh:path linkml:elseconditions ], + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:nodeKind sh:Literal ; + sh:order 14 ; + sh:path skos:editorialNote ], + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 8 ; + sh:path linkml:annotations ], + [ sh:datatype xsd:dateTime ; sh:description "time at which the element was last updated" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 36 ; sh:path pav:lastUpdatedOn ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:nodeKind sh:IRI ; + sh:order 39 ; + sh:path dcterms:subject ], + [ 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:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; + sh:description "Keywords or tags used to describe the element" ; sh:nodeKind sh:Literal ; - sh:order 13 ; - sh:path linkml:todos ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:order 40 ; + sh:path schema1:keywords ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 15 ; - sh:path skos:note ], + sh:order 35 ; + sh:path pav:createdOn ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:nodeKind sh:IRI ; + sh:order 30 ; + sh:path skos:relatedMatch ], + [ sh:description "agent that contributed to the element" ; + sh:nodeKind sh:IRI ; + sh:order 34 ; + sh:path dcterms:contributor ], [ sh:datatype xsd:boolean ; sh:description "a deactivated rule is not executed by the rules engine" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 6 ; sh:path sh:deactivated ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 23 ; - sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 21 ; - sh:path schema1:inLanguage ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 10 ; - sh:path linkml:alt_descriptions ], [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; + sh:description "Outstanding issues that needs resolution" ; sh:nodeKind sh:Literal ; - sh:order 40 ; - sh:path schema1:keywords ], - [ 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:description "agent that modified the element" ; - sh:maxCount 1 ; + sh:order 13 ; + sh:path linkml:todos ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; sh:nodeKind sh:IRI ; - sh:order 37 ; - sh:path oslc:modifiedBy ], + sh:order 28 ; + sh:path skos:exactMatch ], [ sh:description "status of the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 38 ; sh:path bibo:status ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:nodeKind sh:IRI ; - sh:order 30 ; - sh:path skos:relatedMatch ], - [ 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:datatype xsd:integer ; + sh:description "the relative order in which the element occurs, lower values are given precedence" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path linkml:open_world ], - [ sh:description "id of the schema that defined the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 18 ; - sh:path skos:inScheme ], - [ 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:nodeKind sh:BlankNodeOrIRI ; - sh:order 2 ; - sh:path linkml:elseconditions ], - [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; + sh:order 5 ; + sh:path sh:order ], + [ sh:datatype xsd:string ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 12 ; - sh:path linkml:deprecated ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 26 ; - sh:path skosxl:altLabel ], + sh:order 19 ; + sh:path linkml:imported_from ], [ sh:class linkml:Example ; sh:description "example usages of an element" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 16 ; sh:path linkml:examples ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 8 ; - sh:path linkml:annotations ], - [ 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:nodeKind sh:Literal ; - sh:order 25 ; - sh:path skos:altLabel ], - [ sh:description "A related resource from which the element is derived." ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 20 ; - sh:path dcterms:source ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "an expression that must hold in order for the rule to be applicable to an instance" ; + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 0 ; - sh:path sh:condition ], - [ sh:description "agent that contributed to the element" ; - sh:nodeKind sh:IRI ; - sh:order 34 ; - sh:path dcterms:contributor ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; sh:nodeKind sh:IRI ; - sh:order 28 ; - sh:path skos:exactMatch ], - [ 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:order 23 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ 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 ; sh:nodeKind sh:Literal ; - sh:order 11 ; - sh:path dcterms:title ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 7 ; - sh:path linkml:extensions ], - [ sh:description "agent that created the element" ; + sh:order 4 ; + sh:path linkml:open_world ], + [ sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 33 ; - 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:nodeKind sh:Literal ; - sh:order 5 ; - sh:path sh:order ], + sh:order 18 ; + sh:path skos:inScheme ], [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; sh:nodeKind sh:IRI ; sh:order 31 ; sh:path skos:narrowMatch ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 24 ; + 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:nodeKind sh:Literal ; - sh:order 35 ; - sh:path pav:createdOn ], + sh:order 21 ; + 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:nodeKind sh:Literal ; + sh:order 25 ; + sh:path skos:altLabel ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 10 ; + sh:path linkml:alt_descriptions ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:nodeKind sh:IRI ; + sh:order 29 ; + sh:path skos:closeMatch ], [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; sh:nodeKind sh:IRI ; sh:order 32 ; sh:path skos:broadMatch ], - [ 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:nodeKind sh:BlankNodeOrIRI ; - sh:order 1 ; - sh:path linkml:postconditions ], [ 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:nodeKind sh:Literal ; - sh:order 9 ; - sh:path skos:definition ], + sh:order 12 ; + sh:path linkml:deprecated ], [ sh:description "A list of related entities or URLs that may be of relevance" ; sh:nodeKind sh:IRI ; sh:order 22 ; sh:path rdfs:seeAlso ], [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:description "notes and comments about an element intended primarily for external consumption" ; sh:nodeKind sh:Literal ; - sh:order 14 ; - sh:path skos:editorialNote ], - [ sh:datatype xsd:boolean ; - sh:description "in addition to preconditions entailing postconditions, the postconditions entail the preconditions" ; + sh:order 15 ; + sh:path skos:note ], + [ sh:description "agent that created the element" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path linkml:bidirectional ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; sh:nodeKind sh:IRI ; - sh:order 29 ; - sh:path skos:closeMatch ], + sh:order 33 ; + 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 "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:nodeKind sh:Literal ; - sh:order 19 ; - sh:path linkml:imported_from ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:nodeKind sh:IRI ; - sh:order 39 ; - sh:path dcterms:subject ], - [ 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 11 ; + sh:path dcterms:title ], + [ sh:description "agent that modified the element" ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 27 ; - sh:path skos:mappingRelation ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:order 37 ; + sh:path oslc:modifiedBy ], + [ 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:BlankNodeOrIRI ; + sh:order 0 ; + sh:path sh:condition ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 26 ; + sh:path skosxl:altLabel ], + [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 24 ; - sh:path linkml:deprecated_element_has_possible_replacement ] ; + sh:order 20 ; + sh:path dcterms:source ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 7 ; + sh:path linkml:extensions ], + [ 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:nodeKind sh:BlankNodeOrIRI ; + sh:order 1 ; + sh:path linkml:postconditions ], + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 9 ; + sh:path skos:definition ] ; sh:targetClass linkml:ClassRule . linkml:DimensionExpression a sh:NodeShape ; rdfs:comment "defines one of the dimensions of an array" ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "status of the element" ; - sh:maxCount 1 ; + sh:property [ sh:description "agent that contributed to the element" ; sh:nodeKind sh:IRI ; - sh:order 35 ; - sh:path bibo:status ], - [ sh:description "A related resource from which the element is derived." ; + sh:order 31 ; + sh:path dcterms:contributor ], + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 17 ; - sh:path dcterms:source ], + sh:nodeKind sh:Literal ; + sh:order 6 ; + 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:nodeKind sh:IRI ; sh:order 20 ; sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:description "id of the schema that defined the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 15 ; + sh:path skos:inScheme ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:nodeKind sh:IRI ; + sh:order 27 ; + sh:path skos:relatedMatch ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 32 ; + sh:path pav:createdOn ], [ 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:nodeKind sh:Literal ; - sh:order 16 ; - sh:path linkml:imported_from ], + sh:order 18 ; + sh:path schema1:inLanguage ], [ sh:datatype xsd:integer ; sh:description "the exact number of entries for a multivalued slot" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 3 ; sh:path linkml:exact_cardinality ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:nodeKind sh:IRI ; - sh:order 27 ; - sh:path skos:relatedMatch ], [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:description "Description of why and when this element will no longer be used" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 11 ; - sh:path skos:editorialNote ], + sh:order 9 ; + sh:path linkml:deprecated ], [ sh:datatype xsd:integer ; - sh:description "the maximum number of entries for a multivalued slot" ; + sh:description "the minimum number of entries for a multivalued slot" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - 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:BlankNodeOrIRI ; - sh:order 23 ; - sh:path skosxl:altLabel ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; + sh:order 2 ; + sh:path linkml:minimum_cardinality ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:nodeKind sh:Literal ; + sh:order 10 ; + sh:path linkml:todos ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 7 ; - sh:path linkml:alt_descriptions ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:order 4 ; + 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:nodeKind sh:IRI ; - sh:order 29 ; - sh:path skos:broadMatch ], - [ 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:Literal ; - sh:order 36 ; - sh:path sh:order ], + sh:order 24 ; + 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 14 ; sh:path OIO:inSubset ], - [ sh:description "agent that created the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 30 ; - sh:path pav:createdBy ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 33 ; - sh:path pav:lastUpdatedOn ], [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; - sh:maxCount 1 ; + sh:description "Keywords or tags used to describe the element" ; sh:nodeKind sh:Literal ; - sh:order 6 ; - sh:path skos:definition ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 13 ; - sh:path linkml:examples ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:nodeKind sh:IRI ; - sh:order 28 ; - sh:path skos:narrowMatch ], + sh:order 38 ; + sh:path schema1:keywords ], [ 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:nodeKind sh:Literal ; sh:order 22 ; sh:path skos:altLabel ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:nodeKind sh:Literal ; - sh:order 12 ; - sh:path skos:note ], - [ 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:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:nodeKind sh:IRI ; + sh:order 26 ; + 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:BlankNodeOrIRI ; + sh:order 23 ; + sh:path skosxl:altLabel ], + [ sh:description "status of the element" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path skos:prefLabel ], + sh:nodeKind sh:IRI ; + sh:order 35 ; + sh:path bibo:status ], [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 18 ; - sh:path schema1:inLanguage ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:nodeKind sh:Literal ; - sh:order 10 ; - sh:path linkml:todos ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; + sh:order 16 ; + sh:path linkml:imported_from ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:nodeKind sh:IRI ; + sh:order 28 ; + sh:path skos:narrowMatch ], + [ sh:datatype xsd:integer ; + sh:description "the maximum number of entries for a multivalued slot" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 32 ; - sh:path pav:createdOn ], - [ sh:description "agent that modified the element" ; + sh:order 1 ; + sh:path linkml:maximum_cardinality ], + [ sh:description "agent that created the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 34 ; - sh:path oslc:modifiedBy ], + sh:order 30 ; + sh:path pav:createdBy ], [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 21 ; sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 7 ; + sh:path linkml:alt_descriptions ], [ 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 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:nodeKind sh:Literal ; - sh:order 8 ; - sh:path dcterms:title ], - [ sh:description "id of the schema that defined the element" ; - sh:maxCount 1 ; + sh:order 0 ; + sh:path skos:prefLabel ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; sh:nodeKind sh:IRI ; - sh:order 15 ; - sh:path skos:inScheme ], + sh:order 29 ; + sh:path skos:broadMatch ], [ sh:description "Controlled terms used to categorize an element." ; sh:nodeKind sh:IRI ; sh:order 37 ; sh:path dcterms:subject ], + [ 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:Literal ; + sh:order 36 ; + sh:path sh:order ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:nodeKind sh:IRI ; + sh:order 25 ; + sh:path skos:exactMatch ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:nodeKind sh:Literal ; + sh:order 12 ; + sh:path skos:note ], [ sh:class linkml:Annotation ; sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 5 ; sh:path linkml:annotations ], - [ sh:datatype xsd:integer ; - sh:description "the minimum number of entries for a multivalued slot" ; - sh:maxCount 1 ; + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path linkml:minimum_cardinality ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 4 ; - sh:path linkml:extensions ], + 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 "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:nodeKind sh:Literal ; - sh:order 9 ; - 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:nodeKind sh:IRI ; - sh:order 24 ; - sh:path skos:mappingRelation ], - [ sh:description "agent that contributed to the element" ; + sh:order 8 ; + sh:path dcterms:title ], + [ sh:description "agent that modified the element" ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 31 ; - sh:path dcterms:contributor ], - [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; + sh:order 34 ; + sh:path oslc:modifiedBy ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 38 ; - sh:path schema1:keywords ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:nodeKind sh:IRI ; - sh:order 26 ; - sh:path skos:closeMatch ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:order 33 ; + sh:path pav:lastUpdatedOn ], + [ sh:description "A related resource from which the element is derived." ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 25 ; - sh:path skos:exactMatch ], + sh:order 17 ; + sh:path dcterms:source ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 13 ; + sh:path linkml:examples ], [ sh:description "A list of related entities or URLs that may be of relevance" ; sh:nodeKind sh:IRI ; sh:order 19 ; @@ -1661,18 +1661,18 @@ See `extra_slots` for usage examples. """ ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class linkml:AnonymousSlotExpression ; - sh:description "A range that is described as a boolean expression combining existing ranges" ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 1 ; - sh:path linkml:range_expression ], - [ sh:datatype xsd:boolean ; + sh:property [ sh:datatype xsd:boolean ; sh:description "Whether or not something is allowed. Usage defined by context." ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 0 ; - sh:path linkml:allowed ] ; + sh:path linkml:allowed ], + [ sh:class linkml:AnonymousSlotExpression ; + sh:description "A range that is described as a boolean expression combining existing ranges" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 1 ; + sh:path linkml:range_expression ] ; sh:targetClass linkml:ExtraSlotsExpression . linkml:Prefix a sh:NodeShape ; @@ -1698,109 +1698,49 @@ linkml:TypeMapping a sh:NodeShape ; rdfs:comment "Represents how a slot or type can be serialized to a format." ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "agent that created the element" ; + sh:property [ sh:description "agent that modified the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 29 ; - sh:path pav:createdBy ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 32 ; - sh:path pav:lastUpdatedOn ], + sh:order 33 ; + sh:path oslc:modifiedBy ], [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:nodeKind sh:Literal ; - sh:order 11 ; - sh:path skos:note ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 20 ; - sh:path linkml:deprecated_element_has_possible_replacement ], - [ sh:description "id of the schema that defined the element" ; + 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:nodeKind sh:IRI ; - sh:order 14 ; - 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:BlankNodeOrIRI ; - sh:order 22 ; - 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:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 21 ; - sh:path skos:altLabel ], - [ sh:description "status of the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 34 ; - sh:path bibo:status ], - [ sh:description "A related resource from which the element is derived." ; - sh:maxCount 1 ; + sh:order 0 ; + sh:path linkml:framework_key ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; sh:nodeKind sh:IRI ; - sh:order 16 ; - sh:path dcterms:source ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; + 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:BlankNodeOrIRI ; - sh:order 12 ; - sh:path linkml:examples ], + sh:order 3 ; + sh:path linkml:extensions ], [ 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:Literal ; sh:order 35 ; sh:path sh:order ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 22 ; + sh:path skosxl: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 18 ; - sh:path rdfs:seeAlso ], + sh:order 13 ; + sh:path OIO:inSubset ], [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:nodeKind sh:Literal ; - sh:order 37 ; - 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:nodeKind sh:IRI ; - sh:order 23 ; - sh:path skos:mappingRelation ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:nodeKind sh:IRI ; - sh:order 26 ; - sh:path skos:relatedMatch ], - [ 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:nodeKind sh:Literal ; - sh:order 8 ; - sh:path linkml:deprecated ], - [ sh:description "agent that modified the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 33 ; - sh:path oslc:modifiedBy ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:nodeKind sh:IRI ; - sh:order 27 ; - sh:path skos:narrowMatch ], - [ 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:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 3 ; - sh:path linkml:extensions ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:nodeKind sh:IRI ; - sh:order 25 ; - sh:path skos:closeMatch ], + sh:order 15 ; + sh:path linkml:imported_from ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was created" ; sh:maxCount 1 ; @@ -1808,40 +1748,91 @@ linkml:TypeMapping a sh:NodeShape ; 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:description "the primary language used in the sources" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 7 ; - sh:path dcterms:title ], + sh:order 17 ; + sh:path schema1:inLanguage ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:nodeKind sh:Literal ; + sh:order 9 ; + sh:path linkml:todos ], + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path skos:definition ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:nodeKind sh:IRI ; + sh:order 25 ; + sh:path skos:closeMatch ], + [ 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:description "A related resource from which the element is derived." ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 16 ; + sh:path dcterms:source ], [ sh:datatype xsd:string ; sh:description "editorial notes about an element intended primarily for internal consumption" ; sh:nodeKind sh:Literal ; sh:order 10 ; sh:path skos:editorialNote ], + [ sh:description "id of the schema that defined the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 14 ; + 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 "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 15 ; - sh:path linkml:imported_from ], + sh:order 8 ; + sh:path linkml:deprecated ], [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; - sh:maxCount 1 ; + sh:description "notes and comments about an element intended primarily for external consumption" ; sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path skos:definition ], + sh:order 11 ; + sh:path skos:note ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 20 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 12 ; + sh:path linkml:examples ], + [ sh:description "agent that contributed to the element" ; + sh:nodeKind sh:IRI ; + sh:order 30 ; + sh:path dcterms:contributor ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:nodeKind sh:IRI ; + sh:order 27 ; + sh:path skos:narrowMatch ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 6 ; + sh:path linkml:alt_descriptions ], [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 19 ; sh:path linkml:deprecated_element_has_exact_replacement ], - [ 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:nodeKind sh:Literal ; - sh:order 0 ; - sh:path linkml:framework_key ], + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 4 ; + sh:path linkml:annotations ], [ 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. @@ -1851,248 +1842,257 @@ For example, a Measurement class may have 3 fields: unit, value, and string_valu sh:nodeKind sh:Literal ; sh:order 2 ; sh:path linkml:string_serialization ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:nodeKind sh:Literal ; + sh:order 37 ; + sh:path schema1:keywords ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 32 ; + sh:path pav:lastUpdatedOn ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; sh:nodeKind sh:IRI ; - sh:order 28 ; - sh:path skos:broadMatch ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 6 ; - sh:path linkml:alt_descriptions ], + sh:order 26 ; + sh:path skos:relatedMatch ], [ sh:description "Controlled terms used to categorize an element." ; sh:nodeKind sh:IRI ; 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:nodeKind sh:Literal ; - sh:order 17 ; - sh:path schema1:inLanguage ], - [ sh:description "agent that contributed to the element" ; sh:nodeKind sh:IRI ; - sh:order 30 ; - 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:BlankNodeOrIRI ; - sh:order 4 ; - sh:path linkml:annotations ], + sh:order 29 ; + 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:nodeKind sh:IRI ; + sh:order 23 ; + sh:path skos:mappingRelation ], [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; + 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:nodeKind sh:Literal ; - sh:order 9 ; - sh:path linkml:todos ], - [ sh:class linkml:TypeDefinition ; - sh:description "type to coerce to" ; + sh:order 21 ; + 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:nodeKind sh:Literal ; + sh:order 7 ; + sh:path dcterms:title ], + [ sh:description "status of the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 1 ; - sh:path linkml:mapped_type ], + sh:order 34 ; + sh:path bibo:status ], [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; sh:nodeKind sh:IRI ; sh:order 24 ; - sh:path skos:exactMatch ] ; + sh:path skos:exactMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:nodeKind sh:IRI ; + sh:order 28 ; + sh:path skos:broadMatch ] ; sh:targetClass linkml:TypeMapping . linkml:UniqueKey a sh:NodeShape ; rdfs:comment "a collection of slots whose values uniquely identify an instance of a class" ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "status of the element" ; + 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:nodeKind sh:IRI ; + 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:nodeKind sh:IRI ; - sh:order 34 ; - sh:path bibo:status ], + sh:order 19 ; + sh:path linkml:deprecated_element_has_exact_replacement ], [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:description "a textual description of the element's purpose and use" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 11 ; - sh:path skos:note ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; + sh:order 5 ; + sh:path skos:definition ], + [ 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:nodeKind sh:Literal ; - sh:order 32 ; - sh:path pav:lastUpdatedOn ], + sh:order 2 ; + sh:path linkml:consider_nulls_inequal ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:nodeKind sh:IRI ; + sh:order 18 ; + sh:path rdfs:seeAlso ], [ sh:class linkml:Example ; sh:description "example usages of an element" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 12 ; sh:path linkml:examples ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:nodeKind sh:IRI ; - sh:order 18 ; - 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:nodeKind sh:Literal ; - sh:order 21 ; - sh:path skos:altLabel ], [ sh:description "Controlled terms used to categorize an element." ; sh:nodeKind sh:IRI ; sh:order 36 ; sh:path dcterms:subject ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 17 ; - sh:path schema1:inLanguage ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 31 ; - sh:path pav:createdOn ], + [ 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 "A list of terms from different schemas or terminology systems that have related meaning." ; sh:nodeKind sh:IRI ; sh:order 26 ; sh:path skos:relatedMatch ], - [ sh:description "agent that modified the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 33 ; - sh:path oslc:modifiedBy ], [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:nodeKind sh:Literal ; - sh:order 9 ; - sh:path linkml:todos ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:nodeKind sh:IRI ; - sh:order 28 ; - sh:path skos:broadMatch ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 6 ; - sh:path linkml:alt_descriptions ], - [ 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:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 5 ; - 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:BlankNodeOrIRI ; - sh:order 4 ; - sh:path linkml:annotations ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:nodeKind sh:IRI ; - sh:order 27 ; - sh:path skos:narrowMatch ], - [ sh:datatype xsd:string ; - sh:description "name of the unique key" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path linkml:unique_key_name ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 3 ; - sh:path linkml:extensions ], - [ 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: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:nodeKind sh:Literal ; sh:order 7 ; sh:path dcterms:title ], [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; + sh:description "Description of why and when this element will no longer be used" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 37 ; - sh:path schema1:keywords ], - [ sh:description "agent that contributed to the element" ; - sh:nodeKind sh:IRI ; - sh:order 30 ; - sh:path dcterms:contributor ], + sh:order 8 ; + 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:nodeKind sh:IRI ; sh:order 13 ; sh:path OIO:inSubset ], [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; + 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:nodeKind sh:Literal ; - sh:order 10 ; - sh:path skos:editorialNote ], + sh:order 21 ; + sh:path skos:altLabel ], [ 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:Literal ; sh:order 35 ; sh:path sh:order ], + [ sh:description "agent that modified the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 33 ; + sh:path oslc:modifiedBy ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:nodeKind sh:IRI ; + sh:order 25 ; + sh:path skos:closeMatch ], + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:nodeKind sh:Literal ; + sh:order 10 ; + 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:nodeKind sh:IRI ; 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 identical meaning." ; - sh:nodeKind sh:IRI ; - sh:order 24 ; - 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:description "agent that contributed to the element" ; sh:nodeKind sh:IRI ; - sh:order 23 ; - sh:path skos:mappingRelation ], - [ sh:description "agent that created the element" ; + sh:order 30 ; + sh:path dcterms:contributor ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNodeOrIRI ; + 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:nodeKind sh:IRI ; - sh:order 29 ; - sh:path pav:createdBy ], + sh:nodeKind sh:Literal ; + sh:order 15 ; + sh:path linkml:imported_from ], [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 16 ; sh:path dcterms:source ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 25 ; - sh:path skos:closeMatch ], - [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; + sh:order 29 ; + sh:path pav:createdBy ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:nodeKind sh:IRI ; + sh:order 27 ; + sh:path skos:narrowMatch ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 8 ; - sh:path linkml:deprecated ], + sh:order 31 ; + sh:path pav:createdOn ], [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:nodeKind sh:Literal ; + sh:order 11 ; + sh:path skos:note ], + [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 15 ; - sh:path linkml:imported_from ], - [ 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:order 17 ; + sh:path schema1:inLanguage ], + [ sh:datatype xsd:string ; + sh:description "name of the unique key" ; sh:maxCount 1 ; + sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path linkml:consider_nulls_inequal ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:order 0 ; + sh:path linkml:unique_key_name ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 32 ; + sh:path pav:lastUpdatedOn ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; sh:nodeKind sh:IRI ; - sh:order 19 ; - sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:order 28 ; + sh:path skos:broadMatch ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 22 ; - sh:path skosxl:altLabel ], + sh:order 3 ; + sh:path linkml:extensions ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 6 ; + sh:path linkml:alt_descriptions ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:nodeKind sh:IRI ; + sh:order 24 ; + sh:path skos:exactMatch ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:nodeKind sh:Literal ; + sh:order 9 ; + sh:path linkml:todos ], [ sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 14 ; - sh:path skos:inScheme ] ; + sh:path skos:inScheme ], + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:nodeKind sh:Literal ; + sh:order 37 ; + sh:path schema1:keywords ], + [ sh:description "status of the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 34 ; + sh:path bibo:status ], + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 4 ; + sh:path linkml:annotations ] ; sh:targetClass linkml:UniqueKey . linkml:Setting a sh:NodeShape ; @@ -2119,43 +2119,31 @@ linkml:ArrayExpression a sh:NodeShape ; rdfs:comment "defines the dimensions of an array" ; 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:nodeKind sh:IRI ; - sh:order 29 ; - 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:nodeKind sh:Literal ; - sh:order 8 ; - sh:path dcterms:title ], - [ sh:description "status of the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 35 ; - sh:path bibo:status ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 13 ; - sh:path linkml:examples ], - [ sh:description "agent that created the element" ; - sh:maxCount 1 ; + sh:property [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; sh:nodeKind sh:IRI ; - sh:order 30 ; - sh:path pav:createdBy ], - [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 6 ; - sh:path skos:definition ], + sh:order 28 ; + sh:path skos:narrowMatch ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was created" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 32 ; sh:path pav:createdOn ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + 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 "Controlled terms used to categorize an element." ; + sh:nodeKind sh:IRI ; + sh:order 37 ; + sh:path dcterms:subject ], [ sh:datatype xsd:string ; sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; @@ -2166,115 +2154,137 @@ linkml:ArrayExpression a sh:NodeShape ; sh:nodeKind sh:IRI ; sh:order 27 ; sh:path skos:relatedMatch ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:nodeKind sh:Literal ; - sh:order 10 ; - sh:path linkml:todos ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 20 ; - sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + sh:order 34 ; + sh:path oslc:modifiedBy ], + [ 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:Literal ; - sh:order 18 ; - sh:path schema1:inLanguage ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:nodeKind sh:IRI ; - sh:order 25 ; - sh:path skos:exactMatch ], + sh:or ( [ sh:datatype xsd:integer ; + sh:nodeKind sh:Literal ] [ sh:datatype xsd:boolean ; + sh:nodeKind sh:Literal ] ) ; + sh:order 2 ; + sh:path linkml:maximum_number_dimensions ], + [ 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:nodeKind sh:IRI ; + sh:order 24 ; + sh:path skos:mappingRelation ], [ sh:class linkml:AltDescription ; sh:description "A sourced alternative description for an element" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 7 ; sh:path linkml:alt_descriptions ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:nodeKind sh:IRI ; + sh:order 29 ; + sh:path skos:broadMatch ], + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:nodeKind sh:Literal ; + sh:order 38 ; + sh:path schema1:keywords ], [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; 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:BlankNodeOrIRI ; - sh:order 4 ; - sh:path linkml:extensions ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 33 ; - sh:path pav:lastUpdatedOn ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 5 ; - sh:path linkml:annotations ], - [ 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:datatype xsd:string ; sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 9 ; sh:path linkml:deprecated ], + [ 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:nodeKind sh:Literal ; + sh:order 8 ; + sh:path dcterms:title ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:nodeKind sh:IRI ; + sh:order 19 ; + sh:path rdfs:seeAlso ], + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 30 ; + sh:path pav:createdBy ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 20 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 13 ; + 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:nodeKind sh:Literal ; sh:order 36 ; sh:path sh:order ], + [ sh:description "status of the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 35 ; + sh:path bibo:status ], + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:nodeKind sh:BlankNodeOrIRI ; + 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:nodeKind sh:Literal ; + sh:order 6 ; + sh:path skos:definition ], [ sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 15 ; sh:path skos:inScheme ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:nodeKind sh:IRI ; - sh:order 19 ; - sh:path rdfs:seeAlso ], - [ 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:or ( [ sh:datatype xsd:integer ; - sh:nodeKind sh:Literal ] [ sh:datatype xsd:boolean ; - sh:nodeKind sh:Literal ] ) ; - sh:order 2 ; - sh:path linkml:maximum_number_dimensions ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:nodeKind sh:IRI ; - sh:order 26 ; - sh:path skos:closeMatch ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:nodeKind sh:IRI ; - sh:order 28 ; - sh:path skos:narrowMatch ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:nodeKind sh:IRI ; - sh:order 37 ; - sh:path dcterms:subject ], - [ 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:description "agent that contributed to the element" ; sh:nodeKind sh:IRI ; - sh:order 24 ; - sh:path skos:mappingRelation ], + sh:order 31 ; + sh:path dcterms:contributor ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 4 ; + sh:path linkml:extensions ], + [ 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:nodeKind sh:Literal ; + sh:order 22 ; + sh:path skos:altLabel ], + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:nodeKind sh:Literal ; + sh:order 11 ; + sh:path skos:editorialNote ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:nodeKind sh:Literal ; + sh:order 10 ; + 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:BlankNodeOrIRI ; + sh:order 23 ; + sh:path skosxl:altLabel ], [ sh:datatype xsd:string ; sh:description "notes and comments about an element intended primarily for external consumption" ; sh:nodeKind sh:Literal ; sh:order 12 ; sh:path skos:note ], - [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:nodeKind sh:Literal ; - sh:order 38 ; - sh:path schema1:keywords ], - [ sh:description "agent that contributed to the element" ; + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; sh:nodeKind sh:IRI ; - sh:order 31 ; - sh:path dcterms:contributor ], + sh:order 25 ; + sh:path skos:exactMatch ], [ sh:datatype xsd:integer ; sh:description "exact number of dimensions in the array" ; sh:maxCount 1 ; @@ -2286,321 +2296,311 @@ linkml:ArrayExpression a sh:NodeShape ; sh:nodeKind sh:IRI ; sh:order 21 ; sh:path linkml:deprecated_element_has_possible_replacement ], - [ sh:description "agent that modified the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 34 ; - sh:path oslc:modifiedBy ], + [ sh:class linkml:DimensionExpression ; + sh:description "definitions of each axis in the array" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 3 ; + sh:path linkml:dimensions ], [ 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:description "the primary language used in the sources" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 22 ; - sh:path skos:altLabel ], + sh:order 18 ; + sh:path schema1:inLanguage ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:nodeKind sh:IRI ; + sh:order 26 ; + sh:path skos:closeMatch ], [ sh:datatype xsd:integer ; sh:description "minimum number of dimensions in the array" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 1 ; - sh:path linkml:minimum_number_dimensions ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:nodeKind sh:Literal ; - sh:order 11 ; - sh:path skos:editorialNote ], - [ sh:class linkml:DimensionExpression ; - sh:description "definitions of each axis in the array" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 3 ; - sh:path linkml:dimensions ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 23 ; - sh:path skosxl:altLabel ] ; + sh:path linkml:minimum_number_dimensions ] ; sh:targetClass linkml:ArrayExpression . linkml:Element a sh:NodeShape ; rdfs:comment "A named element in the model" ; sh:closed false ; - sh:ignoredProperties ( linkml:exact_cardinality linkml:path_rule linkml:is_a linkml:inherits linkml:any_of linkml:children_are_mutually_disjoint linkml:has_member linkml:enums linkml:classification_rules linkml:role rdf:type linkml:ifabsent linkml:value_presence rdfs:subPropertyOf linkml:code_set_tag linkml:equals_expression linkml:source_file_date linkml:is_class_field linkml:repr linkml:symmetric linkml:identifier linkml:none_of linkml:default_curi_maps linkml:include linkml:tree_root linkml:minus linkml:shared linkml:apply_to linkml:pv_formula linkml:relational_role linkml:slot_usage linkml:structured_pattern linkml:owner linkml:metamodel_version linkml:minimum_value linkml:inherited linkml:slot_definitions linkml:generation_date linkml:singular_name linkml:readonly linkml:maximum_value linkml:attributes linkml:usage_slot_name linkml:equals_number linkml:permissible_values linkml:domain_of linkml:slots linkml:asymmetric linkml:required linkml:recommended linkml:array linkml:list_elements_unique linkml:mixins linkml:base linkml:represents_relationship linkml:slot_names_unique linkml:designates_type linkml:pattern linkml:inlined_as_list linkml:extra_slots pav:version linkml:disjoint_with linkml:domain linkml:union_of linkml:transitive_form_of linkml:all_members linkml:transitive sh:declare linkml:defining_slots linkml:equals_string_in linkml:default_range linkml:slot_uri sh:group linkml:reflexive_transitive_form_of owl:inverseOf linkml:class_uri linkml:classes qudt:unit linkml:concepts linkml:is_grouping_slot linkml:locally_reflexive linkml:imports linkml:type_uri linkml:abstract linkml:emit_prefixes linkml:implicit_prefix linkml:slot_conditions linkml:irreflexive linkml:minimum_cardinality linkml:is_usage_slot linkml:subclass_of dcterms:license linkml:type_mappings linkml:range_expression linkml:enum_uri linkml:source_file_size linkml:subsets linkml:id linkml:mixin linkml:exactly_one_of linkml:list_elements_ordered linkml:source_file linkml:key skos:prefLabel linkml:inlined linkml:settings linkml:string_serialization linkml:code_set_version linkml:maximum_cardinality linkml:enum_range sh:rule linkml:code_set linkml:all_of linkml:typeof linkml:types linkml:unique_keys linkml:range linkml:reachable_from linkml:multivalued linkml:matches linkml:values_from linkml:reflexive linkml:equals_string linkml:bindings linkml:default_prefix ) ; - sh:property [ sh:description "A related resource from which the element is derived." ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 21 ; - sh:path dcterms:source ], - [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:ignoredProperties ( linkml:settings linkml:path_rule linkml:typeof linkml:designates_type linkml:inherits linkml:pattern linkml:maximum_value linkml:matches linkml:types linkml:pv_formula linkml:role linkml:inlined_as_list linkml:type_uri linkml:string_serialization linkml:bindings skos:prefLabel linkml:inherited linkml:identifier linkml:multivalued linkml:enum_uri pav:version linkml:symmetric linkml:list_elements_ordered linkml:default_curi_maps linkml:emit_prefixes linkml:children_are_mutually_disjoint linkml:values_from linkml:is_class_field linkml:reachable_from linkml:recommended linkml:source_file linkml:relational_role linkml:transitive_form_of linkml:none_of linkml:classes owl:inverseOf linkml:type_mappings sh:rule linkml:default_prefix rdfs:subPropertyOf linkml:exactly_one_of linkml:value_presence linkml:extra_slots linkml:slot_definitions linkml:include linkml:tree_root linkml:subclass_of linkml:all_of linkml:is_a linkml:slot_conditions linkml:base linkml:irreflexive linkml:range_expression linkml:transitive linkml:unique_keys linkml:reflexive linkml:array linkml:generation_date linkml:classification_rules linkml:slots linkml:list_elements_unique linkml:has_member linkml:implicit_prefix linkml:equals_number linkml:usage_slot_name linkml:inlined linkml:source_file_size linkml:locally_reflexive rdf:type linkml:represents_relationship linkml:slot_names_unique linkml:defining_slots linkml:shared linkml:equals_expression linkml:required linkml:domain linkml:all_members linkml:concepts linkml:minimum_cardinality linkml:singular_name linkml:default_range linkml:code_set_tag linkml:repr linkml:domain_of linkml:asymmetric linkml:enum_range linkml:permissible_values linkml:slot_uri linkml:key linkml:metamodel_version linkml:code_set linkml:mixin linkml:is_grouping_slot linkml:enums linkml:structured_pattern linkml:imports linkml:reflexive_transitive_form_of linkml:attributes linkml:subsets linkml:owner linkml:equals_string linkml:class_uri linkml:mixins linkml:is_usage_slot linkml:readonly linkml:abstract linkml:ifabsent linkml:disjoint_with linkml:minus linkml:range linkml:slot_usage dcterms:license linkml:exact_cardinality linkml:union_of linkml:code_set_version qudt:unit sh:declare linkml:equals_string_in sh:group linkml:maximum_cardinality linkml:id linkml:minimum_value linkml:source_file_date linkml:apply_to linkml:any_of ) ; + sh:property [ 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:nodeKind sh:Literal ; - sh:order 20 ; - 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:order 0 ; + sh:path rdfs:label ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 40 ; - sh:path sh:order ], - [ 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:nodeKind sh:Literal ; - sh:order 26 ; - 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:BlankNodeOrIRI ; - sh:order 9 ; - sh:path linkml:annotations ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:nodeKind sh:Literal ; - sh:order 14 ; - sh:path linkml:todos ], - [ sh:description "An element in another schema which this element instantiates." ; sh:nodeKind sh:IRI ; - sh:order 7 ; - sh:path linkml:instantiates ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 25 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:description "agent that contributed to the element" ; sh:nodeKind sh:IRI ; - sh:order 30 ; - 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:BlankNodeOrIRI ; - sh:order 27 ; - sh:path skosxl:altLabel ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:nodeKind sh:Literal ; - sh:order 15 ; - sh:path skos:editorialNote ], - [ 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:nodeKind sh:Literal ; - sh:order 1 ; - sh:path linkml:id_prefixes ], + sh:order 35 ; + sh:path dcterms:contributor ], [ sh:class linkml:Extension ; sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 8 ; sh:path linkml:extensions ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:nodeKind sh:Literal ; - sh:order 16 ; - sh:path skos:note ], - [ sh:datatype xsd:string ; - sh:description "An established standard to which the element conforms." ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path dcterms:conformsTo ], [ sh:datatype xsd:string ; sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 10 ; sh:path skos:definition ], - [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 13 ; - sh:path linkml:deprecated ], + sh:nodeKind sh:IRI ; + sh:order 38 ; + sh:path oslc:modifiedBy ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:nodeKind sh:IRI ; + sh:order 32 ; + sh:path skos:narrowMatch ], + [ sh:description "id of the schema that defined the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 19 ; + sh:path skos:inScheme ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:nodeKind sh:IRI ; + sh:order 31 ; + sh:path skos:relatedMatch ], [ 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:Literal ; sh:order 2 ; sh:path linkml:id_prefixes_are_closed ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; sh:nodeKind sh:IRI ; - sh:order 23 ; - sh:path rdfs:seeAlso ], + sh:order 30 ; + sh:path skos:closeMatch ], [ sh:description "Controlled terms used to categorize an element." ; sh:nodeKind sh:IRI ; sh:order 41 ; sh:path dcterms:subject ], - [ sh:class linkml:LocalName ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 4 ; - sh:path linkml:local_names ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - 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:nodeKind sh:IRI ; - sh:order 32 ; - sh:path skos:narrowMatch ], - [ sh:description "agent that contributed to the element" ; - sh:nodeKind sh:IRI ; - sh:order 35 ; - sh:path dcterms:contributor ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:nodeKind sh:IRI ; - sh:order 29 ; - 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:nodeKind sh:IRI ; - sh:order 6 ; - sh:path linkml:implements ], [ 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 imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 12 ; - sh:path dcterms:title ], + sh:order 20 ; + sh:path linkml:imported_from ], [ sh:description "agent that created the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 34 ; sh:path pav:createdBy ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 17 ; + sh:path linkml:examples ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 11 ; + sh:path linkml:alt_descriptions ], [ 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 "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:IRI ; + sh:order 3 ; + sh:path linkml:definition_uri ], [ 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 "notes and comments about an element intended primarily for external consumption" ; + sh:nodeKind sh:Literal ; + sh:order 16 ; + sh:path skos:note ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNodeOrIRI ; + 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:nodeKind sh:Literal ; - sh:order 0 ; - sh:path rdfs:label ], - [ 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:nodeKind sh:IRI ; - sh:order 28 ; - sh:path skos:mappingRelation ], - [ sh:description "status of the element" ; + sh:order 37 ; + 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:nodeKind sh:Literal ; + sh:order 13 ; + sh:path linkml:deprecated ], + [ 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:nodeKind sh:Literal ; + sh:order 26 ; + sh:path skos:altLabel ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; sh:nodeKind sh:IRI ; - sh:order 39 ; - sh:path bibo:status ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:order 23 ; + 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:nodeKind sh:IRI ; - sh:order 33 ; - sh:path skos:broadMatch ], - [ sh:description "agent that modified the element" ; + sh:order 24 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:nodeKind sh:Literal ; + sh:order 14 ; + sh:path linkml:todos ], + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; + sh:nodeKind sh:Literal ; + sh:order 42 ; + sh:path schema1:keywords ], + [ 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:nodeKind sh:Literal ; + 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:BlankNodeOrIRI ; + sh:order 9 ; + 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:nodeKind sh:Literal ; + sh:order 40 ; + sh:path sh:order ], + [ 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:nodeKind sh:IRI ; - sh:order 38 ; - sh:path oslc:modifiedBy ], - [ sh:description "id of the schema that defined the element" ; + sh:order 6 ; + sh:path linkml:implements ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:nodeKind sh:IRI ; + sh:order 29 ; + sh:path skos:exactMatch ], + [ sh:description "An element in another schema which this element instantiates." ; + sh:nodeKind sh:IRI ; + sh:order 7 ; + sh:path linkml:instantiates ], + [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 19 ; - sh:path skos:inScheme ], + sh:order 21 ; + sh:path dcterms:source ], + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:nodeKind sh:Literal ; + sh:order 15 ; + sh:path skos:editorialNote ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was created" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 36 ; sh:path pav:createdOn ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; + [ sh:datatype xsd:string ; + sh:description "An established standard to which the element conforms." ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - 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 5 ; + sh:path dcterms:conformsTo ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; sh:nodeKind sh:IRI ; - sh:order 31 ; - sh:path skos:relatedMatch ], + sh:order 33 ; + sh:path skos:broadMatch ], [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; + 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:nodeKind sh:Literal ; - sh:order 42 ; - sh:path schema1:keywords ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; + sh:order 1 ; + sh:path linkml:id_prefixes ], + [ sh:class linkml:LocalName ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 17 ; - 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:nodeKind sh:IRI ; - sh:order 24 ; - sh:path linkml:deprecated_element_has_exact_replacement ], + sh:order 4 ; + sh:path linkml:local_names ], [ sh:datatype xsd:string ; sh:description "the primary language used in the sources" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 22 ; sh:path schema1:inLanguage ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; - sh:maxCount 1 ; + [ 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:nodeKind sh:IRI ; - sh:order 25 ; - sh:path linkml:deprecated_element_has_possible_replacement ], - [ 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 28 ; + sh:path skos:mappingRelation ], + [ sh:description "status of the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 3 ; - sh:path linkml:definition_uri ] ; + sh:order 39 ; + sh:path bibo:status ] ; sh:targetClass linkml:Element . linkml:EnumExpression a sh:NodeShape ; rdfs:comment "An expression that constrains the range of a slot" ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - 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:BlankNodeOrIRI ; - sh:order 6 ; - sh:path linkml:minus ], - [ sh:description "A list of identifiers that are used to construct a set of permissible values" ; - sh:nodeKind sh:IRI ; - sh:order 10 ; - sh:path linkml:concepts ], - [ 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:BlankNodeOrIRI ; - sh:order 9 ; - sh:path linkml:matches ], - [ sh:description "Defines the specific formula to be used to generate the permissible values." ; + sh:property [ 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:BlankNodeOrIRI ; - sh:order 8 ; - sh:path linkml:reachable_from ], [ sh:description "the identifier of an enumeration code set." ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; 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:class linkml:PermissibleValue ; - sh:description "A list of possible values for a slot range" ; + [ sh:description "A list of identifiers that are used to construct a set of permissible values" ; sh:nodeKind sh:IRI ; - sh:order 4 ; - sh:path linkml:permissible_values ], + sh:order 10 ; + sh:path linkml:concepts ], [ sh:datatype xsd:string ; sh:description "the version identifier of the enumeration code set" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; 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 included, after subtracting the minus set" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 5 ; + sh:path linkml:include ], [ sh:datatype xsd:string ; sh:description "the version tag of the enumeration code set" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; 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:BlankNodeOrIRI ; + sh:order 8 ; + sh:path linkml:reachable_from ], [ 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 "An enum expression that yields a list of permissible values that are to be subtracted from the enum" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 5 ; - sh:path linkml:include ] ; + 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:maxCount 1 ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 9 ; + sh:path linkml:matches ], + [ 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:targetClass linkml:EnumExpression . linkml:MatchQuery a sh:NodeShape ; @@ -2624,198 +2624,195 @@ linkml:ReachabilityQuery a sh:NodeShape ; rdfs:comment "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:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "An ontology or vocabulary or terminology that is used in a query to obtain a set of permissible values" ; + sh:property [ sh:datatype xsd:boolean ; + sh:description "True if the direction of the reachability query is reversed and ancestors are retrieved" ; sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path linkml:traverse_up ], + [ sh:description "A list of relationship types (properties) that are used in a reachability query" ; sh:nodeKind sh:IRI ; - sh:order 0 ; - sh:path linkml:source_ontology ], - [ sh:description "A list of nodes that are used in the reachability query" ; - sh:nodeKind sh:IRI ; - sh:order 1 ; - sh:path linkml:source_nodes ], + sh:order 2 ; + sh:path linkml:relationship_types ], [ sh:datatype xsd:boolean ; sh:description "True if the query is reflexive" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; 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:nodeKind sh:IRI ; + sh:order 0 ; + sh:path linkml:source_ontology ], + [ sh:description "A list of nodes that are used in the reachability query" ; + sh:nodeKind sh:IRI ; + sh:order 1 ; + sh:path linkml:source_nodes ], [ 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:nodeKind sh:Literal ; sh:order 3 ; - sh:path linkml:is_direct ], - [ sh:datatype xsd:boolean ; - sh:description "True if the direction of the reachability query is reversed and ancestors are retrieved" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path linkml:traverse_up ], - [ sh:description "A list of relationship types (properties) that are used in a reachability query" ; - sh:nodeKind sh:IRI ; - sh:order 2 ; - sh:path linkml:relationship_types ] ; + sh:path linkml:is_direct ] ; sh:targetClass linkml:ReachabilityQuery . linkml:EnumBinding a sh:NodeShape ; rdfs:comment "A binding of a slot or a class to a permissible value from an enumeration." ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 16 ; - sh:path linkml:imported_from ], - [ 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:nodeKind sh:IRI ; - sh:order 24 ; - sh:path skos:mappingRelation ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 13 ; - sh:path linkml:examples ], - [ sh:description "status of the element" ; - sh:maxCount 1 ; + sh:property [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; sh:nodeKind sh:IRI ; - sh:order 35 ; - sh:path bibo:status ], + sh:order 25 ; + sh:path skos:exactMatch ], [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; + sh:description "Keywords or tags used to describe the element" ; sh:nodeKind sh:Literal ; - sh:order 10 ; - sh:path linkml:todos ], - [ sh:description "agent that modified the element" ; - sh:maxCount 1 ; + sh:order 38 ; + sh:path schema1:keywords ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; sh:nodeKind sh:IRI ; - sh:order 34 ; - sh:path oslc:modifiedBy ], - [ sh:description "Controlled terms used to categorize an element." ; + sh:order 19 ; + sh:path rdfs:seeAlso ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; sh:nodeKind sh:IRI ; - sh:order 37 ; - sh:path dcterms:subject ], - [ 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 28 ; + sh:path skos:narrowMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; 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:order 27 ; + sh:path skos:relatedMatch ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 23 ; + 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:BlankNodeOrIRI ; + sh:order 5 ; + sh:path linkml:annotations ], + [ sh:description "agent that contributed to the element" ; + sh:nodeKind sh:IRI ; + sh:order 31 ; + sh:path dcterms:contributor ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:nodeKind sh:IRI ; + sh:order 26 ; + sh:path skos:closeMatch ], + [ sh:description "agent that created the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 21 ; - sh:path linkml:deprecated_element_has_possible_replacement ], + sh:order 30 ; + sh:path pav:createdBy ], [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; + sh:description "Outstanding issues that needs resolution" ; sh:nodeKind sh:Literal ; - sh:order 38 ; - sh:path schema1:keywords ], + sh:order 10 ; + 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:nodeKind sh:Literal ; sh:order 22 ; sh:path skos:altLabel ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:nodeKind sh:IRI ; - sh:order 27 ; - sh:path skos:relatedMatch ], [ sh:datatype xsd:string ; sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 9 ; sh:path linkml:deprecated ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 7 ; - sh:path linkml:alt_descriptions ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:nodeKind sh:IRI ; - sh:order 25 ; - sh:path skos:exactMatch ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 4 ; - sh:path linkml:extensions ], [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + sh:description "A path to a slot that is being bound to a permissible value from an enumeration." ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 18 ; - sh:path schema1:inLanguage ], + sh:order 2 ; + sh:path linkml:binds_value_of ], [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; + sh:description "time at which the element was last updated" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 32 ; - sh:path pav:createdOn ], - [ sh:description "id of the schema that defined the element" ; + sh:order 33 ; + sh:path pav:lastUpdatedOn ], + [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 15 ; - sh:path skos:inScheme ], + sh:order 17 ; + sh:path dcterms:source ], [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; - sh:maxCount 1 ; + sh:description "notes and comments about an element intended primarily for external consumption" ; sh:nodeKind sh:Literal ; - sh:order 6 ; - sh:path skos:definition ], - [ sh:datatype xsd:integer ; - sh:description "the relative order in which the element occurs, lower values are given precedence" ; + sh:order 12 ; + sh:path skos:note ], + [ 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:nodeKind sh:Literal ; - sh:order 36 ; - sh:path sh:order ], + sh:order 3 ; + sh:path linkml:pv_formula ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 7 ; + sh:path linkml:alt_descriptions ], + [ 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 automatically replaced by this uri or curie" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 20 ; sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; sh:nodeKind sh:IRI ; - sh:order 19 ; - sh:path rdfs:seeAlso ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + 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:nodeKind sh:IRI ; - sh:order 26 ; - sh:path skos:closeMatch ], + sh:order 21 ; + sh:path linkml:deprecated_element_has_possible_replacement ], [ 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:string ; - sh:description "A path to a slot that is being bound to a permissible value from an enumeration." ; + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 4 ; + sh:path linkml:extensions ], + [ sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path linkml:binds_value_of ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; sh:nodeKind sh:IRI ; - sh:order 28 ; - sh:path skos:narrowMatch ], + sh:order 15 ; + 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:nodeKind sh:IRI ; + sh:order 24 ; + sh:path skos:mappingRelation ], [ 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:nodeKind sh:Literal ; - sh:order 8 ; - sh:path dcterms:title ], - [ sh:description "A related resource from which the element is derived." ; + sh:order 6 ; + sh:path skos:definition ], + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 17 ; - sh:path dcterms:source ], - [ sh:description "agent that contributed to the element" ; + sh:order 34 ; + sh:path oslc:modifiedBy ], + [ sh:description "status of the element" ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 31 ; - sh:path dcterms:contributor ], - [ sh:description "Defines the specific formula to be used to generate the permissible values." ; - sh:in ( "CODE" "CURIE" "URI" "FHIR_CODING" "LABEL" ) ; + 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 3 ; - sh:path linkml:pv_formula ], + sh:nodeKind sh:Literal ; + sh:order 16 ; + sh:path linkml:imported_from ], [ sh:class linkml:EnumDefinition ; sh:defaultValue "string"^^xsd:string ; sh:description """defines the type of the object of the slot. Given the following slot definition @@ -2832,153 +2829,103 @@ implicitly asserts Y is an instance of C2 sh:nodeKind sh:IRI ; sh:order 0 ; sh:path linkml:range ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:nodeKind sh:IRI ; + sh:order 37 ; + sh:path dcterms:subject ], [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:nodeKind sh:Literal ; - sh:order 12 ; - sh:path skos:note ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 23 ; - sh:path skosxl:altLabel ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; sh:nodeKind sh:Literal ; sh:order 11 ; sh:path skos:editorialNote ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; + [ 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:nodeKind sh:Literal ; - sh:order 33 ; - sh:path pav:lastUpdatedOn ], - [ sh:description "agent that created the element" ; + sh:order 8 ; + sh:path dcterms:title ], + [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 30 ; - 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:Literal ; + sh:order 18 ; + sh:path schema1:inLanguage ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 32 ; + sh:path pav:createdOn ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 5 ; - sh:path linkml:annotations ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:nodeKind sh:IRI ; - sh:order 29 ; - sh:path skos:broadMatch ] ; + sh:order 13 ; + 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:nodeKind sh:Literal ; + sh:order 36 ; + sh:path sh:order ] ; sh:targetClass linkml:EnumBinding . linkml:EnumDefinition a sh:NodeShape ; rdfs:comment "an element whose instances must be drawn from a specified set of permissible values" ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "the version identifier of the enumeration code set" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path linkml:code_set_version ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 56 ; - sh:path pav:lastUpdatedOn ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:nodeKind sh:Literal ; - sh:order 33 ; - sh:path linkml:todos ], - [ 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 12 ; - sh:path linkml:is_a ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; - sh:maxCount 1 ; + sh:property [ 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 43 ; - sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:datatype xsd:string ; - sh:description "An established standard to which the element conforms." ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 24 ; - sh:path dcterms:conformsTo ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 37 ; + sh:path OIO:inSubset ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; sh:nodeKind sh:IRI ; - sh:order 51 ; - sh:path skos:narrowMatch ], + 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:nodeKind sh:BlankNodeOrIRI ; + sh:order 28 ; + sh:path linkml:annotations ], [ 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 imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 31 ; - sh:path dcterms:title ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:nodeKind sh:IRI ; - sh:order 52 ; - sh:path skos:broadMatch ], - [ 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:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 30 ; - sh:path linkml:alt_descriptions ], - [ sh:description "A related resource from which the element is derived." ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 40 ; - sh:path dcterms:source ], - [ sh:description "status of the element" ; + sh:order 39 ; + sh:path linkml:imported_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:nodeKind sh:IRI ; - sh:order 58 ; - sh:path bibo:status ], - [ sh:description "agent that created the element" ; + sh:order 22 ; + sh:path linkml:definition_uri ], + [ 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:nodeKind sh:IRI ; - sh:order 53 ; - 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:nodeKind sh:IRI ; - sh:order 47 ; - sh:path skos:mappingRelation ], - [ 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:class linkml:LocalName ; + sh:nodeKind sh:Literal ; + sh:order 13 ; + sh:path linkml:abstract ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 23 ; - sh:path linkml:local_names ], - [ 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 4 ; - sh:path linkml:pv_formula ], + sh:order 36 ; + sh:path linkml:examples ], [ 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:nodeKind sh:Literal ; sh:order 19 ; sh:path rdfs:label ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 27 ; - 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:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 25 ; - sh:path linkml:implements ], + sh:order 43 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:defaultValue "linkml:EnumDefinition"^^xsd:string ; + 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:nodeKind sh:IRI ; + sh:order 0 ; + sh:path linkml:enum_uri ], [ sh:datatype xsd:string ; sh:description "the version tag of the enumeration code set" ; sh:maxCount 1 ; @@ -2989,152 +2936,112 @@ linkml:EnumDefinition a sh:NodeShape ; sh:nodeKind sh:IRI ; sh:order 50 ; 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:BlankNodeOrIRI ; - sh:order 28 ; - sh:path linkml:annotations ], - [ sh:description "the identifier of an enumeration code set." ; + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 1 ; - sh:path linkml:code_set ], - [ sh:class linkml:ReachabilityQuery ; - sh:description "Specifies a query for obtaining a list of permissible values based on graph reachability" ; + sh:nodeKind sh:Literal ; + sh:order 56 ; + sh:path pav:lastUpdatedOn ], + [ sh:description "agent that created the element" ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 9 ; - sh:path linkml:reachable_from ], - [ 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:nodeKind sh:IRI ; - sh:order 17 ; - sh:path linkml:values_from ], + sh:order 53 ; + sh:path pav:createdBy ], [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; sh:nodeKind sh:Literal ; - sh:order 35 ; - sh:path skos:note ], - [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; + sh:order 34 ; + sh:path skos:editorialNote ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 32 ; - sh:path linkml:deprecated ], + sh:order 55 ; + sh:path pav:createdOn ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 46 ; + sh:path skosxl:altLabel ], + [ sh:description "id of the schema that defined the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 38 ; + sh:path skos:inScheme ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 30 ; + sh:path linkml:alt_descriptions ], [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 44 ; sh:path linkml:deprecated_element_has_possible_replacement ], - [ sh:description "An element in another schema which this element instantiates." ; + [ sh:description "A list of identifiers that are used to construct a set of permissible values" ; sh:nodeKind sh:IRI ; - sh:order 26 ; - sh:path linkml:instantiates ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 36 ; - sh:path linkml:examples ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; + sh:order 11 ; + sh:path linkml:concepts ], + [ 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:Literal ; - sh:order 55 ; - sh:path pav:createdOn ], - [ 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:IRI ; - sh:order 22 ; - 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:order 14 ; + sh:path linkml:mixin ], + [ 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:Literal ; - sh:order 39 ; - sh:path linkml:imported_from ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:nodeKind sh:IRI ; - sh:order 48 ; - sh:path skos:exactMatch ], - [ sh:class linkml:PermissibleValue ; - sh:description "A list of possible values for a slot range" ; + sh:order 59 ; + 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:nodeKind sh:IRI ; - sh:order 5 ; - sh:path linkml:permissible_values ], - [ sh:description "id of the schema that defined the element" ; + sh:order 47 ; + sh:path skos:mappingRelation ], + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 38 ; - sh:path skos:inScheme ], - [ 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:order 57 ; + sh:path oslc:modifiedBy ], + [ 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:nodeKind sh:Literal ; + sh:order 45 ; + sh:path skos:altLabel ], [ sh:datatype xsd:string ; sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 29 ; sh:path skos:definition ], - [ 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:Literal ; - sh:order 14 ; - sh:path linkml:mixin ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:nodeKind sh:IRI ; - sh:order 42 ; - sh:path rdfs:seeAlso ], - [ sh:description "agent that contributed to the element" ; - sh:nodeKind sh:IRI ; - sh:order 54 ; - sh:path dcterms:contributor ], - [ sh:description "A list of identifiers that are used to construct a set of permissible values" ; - sh:nodeKind sh:IRI ; - sh:order 11 ; - sh:path linkml:concepts ], - [ 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:Literal ; - sh:order 21 ; - 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:description "A list of terms from different schemas or terminology systems that have identical meaning." ; sh:nodeKind sh:IRI ; - sh:order 37 ; - sh:path OIO:inSubset ], - [ sh:description "agent that modified the element" ; - sh:maxCount 1 ; + sh:order 48 ; + sh:path skos:exactMatch ], + [ sh:class linkml:PermissibleValue ; + sh:description "A list of possible values for a slot range" ; sh:nodeKind sh:IRI ; - sh:order 57 ; - sh:path oslc:modifiedBy ], - [ 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:nodeKind sh:Literal ; - sh:order 13 ; - sh:path linkml:abstract ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 46 ; - sh:path skosxl:altLabel ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 5 ; + sh:path linkml:permissible_values ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; sh:nodeKind sh:IRI ; - sh:order 49 ; - sh:path skos:closeMatch ], - [ 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:BlankNodeOrIRI ; - sh:order 7 ; - sh:path linkml:minus ], + sh:order 51 ; + sh:path skos:narrowMatch ], [ sh:datatype xsd:string ; sh:description "Keywords or tags used to describe the element" ; sh:nodeKind sh:Literal ; sh:order 61 ; sh:path schema1:keywords ], + [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 41 ; + sh:path schema1:inLanguage ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:nodeKind sh:IRI ; + sh:order 60 ; + sh:path dcterms:subject ], [ 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. @@ -3144,54 +3051,147 @@ For example, a Measurement class may have 3 fields: unit, value, and string_valu sh:nodeKind sh:Literal ; sh:order 18 ; sh:path linkml:string_serialization ], + [ 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:Literal ; + sh:order 21 ; + sh:path linkml:id_prefixes_are_closed ], [ 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:description "notes and comments about an element intended primarily for external consumption" ; sh:nodeKind sh:Literal ; - sh:order 45 ; - sh:path skos:altLabel ], + sh:order 35 ; + sh:path skos:note ], + [ 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: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:nodeKind sh:IRI ; + sh:order 17 ; + sh:path linkml:values_from ], [ 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:BlankNodeOrIRI ; sh:order 6 ; sh:path linkml:include ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:nodeKind sh:Literal ; + sh:order 33 ; + sh:path linkml:todos ], + [ sh:description "the identifier of an enumeration code set." ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 1 ; + sh:path linkml:code_set ], + [ sh:class linkml:LocalName ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 23 ; + sh:path linkml:local_names ], + [ sh:datatype xsd:string ; + sh:description "the version identifier of the enumeration code set" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 3 ; + sh:path linkml:code_set_version ], [ 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:nodeKind sh:Literal ; sh:order 20 ; sh:path linkml:id_prefixes ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:nodeKind sh:Literal ; - sh:order 34 ; - sh:path skos:editorialNote ], - [ sh:datatype xsd:integer ; - sh:description "the relative order in which the element occurs, lower values are given precedence" ; + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 27 ; + sh:path linkml:extensions ], + [ 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:Literal ; - sh:order 59 ; - sh:path sh:order ], - [ sh:description "Controlled terms used to categorize an element." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 9 ; + sh:path linkml:reachable_from ], + [ 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 60 ; - sh:path dcterms:subject ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + sh:order 8 ; + sh:path linkml:inherits ], + [ 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:BlankNodeOrIRI ; + sh:order 7 ; + sh:path linkml:minus ], + [ sh:description "status of the element" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 41 ; - sh:path schema1:inLanguage ], + sh:nodeKind sh:IRI ; + sh:order 58 ; + sh:path bibo:status ], [ 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:BlankNodeOrIRI ; sh:order 10 ; sh:path linkml:matches ], - [ sh:defaultValue "linkml:EnumDefinition"^^xsd:string ; - 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:description "agent that contributed to the element" ; + sh:nodeKind sh:IRI ; + sh:order 54 ; + 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:nodeKind sh:IRI ; + sh:order 25 ; + sh:path linkml:implements ], + [ 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: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:enum_uri ] ; + sh:order 12 ; + sh:path linkml:is_a ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:nodeKind sh:IRI ; + sh:order 52 ; + sh:path skos:broadMatch ], + [ sh:description "A related resource from which the element is derived." ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 40 ; + sh:path dcterms:source ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:nodeKind sh:IRI ; + sh:order 49 ; + sh:path skos:closeMatch ], + [ sh:datatype xsd:string ; + sh:description "An established standard to which the element conforms." ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 24 ; + sh:path dcterms:conformsTo ], + [ sh:description "An element in another schema which this element instantiates." ; + sh:nodeKind sh:IRI ; + sh:order 26 ; + sh:path linkml:instantiates ], + [ 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 4 ; + 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:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 31 ; + sh:path dcterms:title ], + [ sh:datatype xsd:string ; + sh:description "Description of why and when this element will no longer be used" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 32 ; + sh:path linkml:deprecated ] ; sh:targetClass linkml:EnumDefinition . linkml:PermissibleValue a sh:NodeShape ; @@ -3199,76 +3199,155 @@ linkml:PermissibleValue a sh:NodeShape ; sh:closed true ; 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:description "Keywords or tags used to describe the element" ; sh:nodeKind sh:Literal ; - sh:order 11 ; - sh:path dcterms:title ], - [ 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 41 ; + sh:path schema1:keywords ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 17 ; - sh:path OIO:inSubset ], + sh:order 24 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ 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:class linkml:Annotation ; sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 9 ; sh:path linkml:annotations ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 10 ; - sh:path linkml:alt_descriptions ], [ 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:nodeKind sh:Literal ; - sh:order 19 ; - sh:path linkml:imported_from ], + sh:order 1 ; + sh:path skos:definition ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:nodeKind sh:IRI ; + sh:order 32 ; + sh:path skos:broadMatch ], [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:description "notes and comments about an element intended primarily for external consumption" ; sh:nodeKind sh:Literal ; - sh:order 14 ; - sh:path skos:editorialNote ], + sh:order 15 ; + sh:path skos:note ], + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 33 ; + sh:path pav:createdBy ], [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; sh:nodeKind sh:IRI ; sh:order 29 ; sh:path skos:closeMatch ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + 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:nodeKind sh:IRI ; + sh:order 5 ; + sh:path linkml:implements ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:nodeKind sh:IRI ; + sh:order 22 ; + sh:path rdfs:seeAlso ], + [ 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:nodeKind sh:IRI ; + sh:order 27 ; + sh:path skos:mappingRelation ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:nodeKind sh:IRI ; + sh:order 40 ; + sh:path dcterms:subject ], [ sh:description "status of the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 38 ; sh:path bibo:status ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:nodeKind sh:IRI ; + sh:order 30 ; + sh:path skos:relatedMatch ], [ sh:datatype xsd:string ; - sh:description "The actual permissible value itself" ; + 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:nodeKind sh:Literal ; - sh:order 0 ; - sh:path linkml:text ], - [ 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:nodeKind sh:IRI ; - sh:order 27 ; - sh:path skos:mappingRelation ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:nodeKind sh:IRI ; - sh:order 28 ; - sh:path skos:exactMatch ], + sh:order 11 ; + sh:path dcterms:title ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 35 ; + sh:path pav:createdOn ], [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; + 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:nodeKind sh:Literal ; - sh:order 15 ; - sh:path skos:note ], + sh:order 25 ; + sh:path skos:altLabel ], + [ 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 6 ; + sh:path linkml:is_a ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 10 ; + sh:path linkml:alt_descriptions ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 16 ; + sh:path linkml:examples ], + [ sh:description "agent that contributed to the element" ; + sh:nodeKind sh:IRI ; + sh:order 34 ; + sh:path dcterms:contributor ], [ sh:datatype xsd:string ; sh:description "Outstanding issues that needs resolution" ; sh:nodeKind sh:Literal ; sh:order 13 ; sh:path linkml:todos ], + [ sh:description "id of the schema that defined the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 18 ; + sh:path skos:inScheme ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:nodeKind sh:IRI ; + sh:order 28 ; + sh:path skos:exactMatch ], + [ sh:description "agent that modified the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 37 ; + sh:path oslc:modifiedBy ], [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; + sh:description "the primary language used in the sources" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 12 ; - sh:path linkml:deprecated ], + sh:order 21 ; + sh:path schema1:inLanguage ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:nodeKind sh:IRI ; + sh:order 31 ; + sh:path skos:narrowMatch ], + [ sh:datatype xsd:string ; + sh:description "The actual permissible value itself" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path linkml:text ], + [ sh:description "An element in another schema which this element instantiates." ; + sh:nodeKind sh:IRI ; + sh:order 4 ; + sh:path linkml:instantiates ], [ sh:datatype xsd:integer ; sh:description "the relative order in which the element occurs, lower values are given precedence" ; sh:maxCount 1 ; @@ -3280,551 +3359,508 @@ linkml:PermissibleValue a sh:NodeShape ; sh:nodeKind sh:IRI ; sh:order 20 ; sh:path dcterms:source ], + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:nodeKind sh:Literal ; + sh:order 14 ; + sh:path skos:editorialNote ], + [ sh:class qudt:Unit ; + sh:description "an encoding of a unit" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 3 ; + 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:BlankNodeOrIRI ; sh:order 26 ; sh:path skosxl:altLabel ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 8 ; - sh:path linkml:extensions ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:nodeKind sh:IRI ; - sh:order 40 ; - sh:path dcterms:subject ], - [ sh:description "agent that modified the element" ; + [ sh:description "the value meaning of a permissible value" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 37 ; - sh:path oslc:modifiedBy ], - [ sh:description "agent that created the element" ; - sh:maxCount 1 ; + sh:order 2 ; + sh:path linkml:meaning ], + [ 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 33 ; - sh:path pav:createdBy ], + sh:order 17 ; + sh:path OIO:inSubset ], [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 21 ; - sh:path schema1:inLanguage ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:nodeKind sh:IRI ; - sh:order 32 ; - sh:path skos:broadMatch ], + sh:order 12 ; + sh:path linkml:deprecated ], [ 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:nodeKind sh:Literal ; - sh:order 25 ; - sh:path skos:altLabel ], - [ sh:description "the value meaning of a permissible value" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 2 ; - sh:path linkml:meaning ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - 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 narrower meaning." ; - sh:nodeKind sh:IRI ; - sh:order 31 ; - sh:path skos:narrowMatch ], - [ sh:description "id of the schema that defined the element" ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 18 ; - sh:path skos:inScheme ], + sh:nodeKind sh:Literal ; + sh:order 19 ; + sh:path linkml:imported_from ], [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 23 ; sh:path linkml:deprecated_element_has_exact_replacement ], - [ 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:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 16 ; - sh:path linkml:examples ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:nodeKind sh:IRI ; - sh:order 30 ; - sh:path skos:relatedMatch ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was last updated" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 36 ; - sh:path pav:lastUpdatedOn ], - [ sh:class qudt:Unit ; - sh:description "an encoding of a unit" ; + sh:path pav:lastUpdatedOn ] ; + sh:targetClass linkml:PermissibleValue . + +linkml:TypeDefinition a sh:NodeShape ; + rdfs:comment "an element that whose instances are atomic scalar values that can be mapped to primitive types" ; + sh:closed true ; + 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:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 3 ; - sh:path qudt:unit ], + sh:nodeKind sh:Literal ; + sh:order 9 ; + sh:path linkml:equals_string ], + [ 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:datatype xsd:string ; sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 1 ; + sh:order 28 ; sh:path skos:definition ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 35 ; - sh:path pav:createdOn ], - [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:nodeKind sh:Literal ; - sh:order 41 ; - sh:path schema1:keywords ], - [ sh:description "agent that contributed to the element" ; + [ 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 34 ; - 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 36 ; + sh:path OIO:inSubset ], + [ 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:nodeKind sh:Literal ; + sh:order 44 ; + sh:path skos:altLabel ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; sh:nodeKind sh:IRI ; - sh:order 5 ; - sh:path linkml:implements ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:order 49 ; + sh:path skos:relatedMatch ], + [ sh:description "The uri that defines the possible values for the type definition" ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 22 ; - sh:path rdfs:seeAlso ], - [ 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:order 2 ; + sh:path linkml:type_uri ], + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 6 ; - sh:path linkml:is_a ], - [ sh:description "An element in another schema which this element instantiates." ; + sh:order 56 ; + sh:path oslc:modifiedBy ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 4 ; - sh:path linkml:instantiates ] ; - sh:targetClass linkml:PermissibleValue . - -linkml:TypeDefinition a sh:NodeShape ; - rdfs:comment "an element that whose instances are atomic scalar values that can be mapped to primitive types" ; - sh:closed true ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class linkml:TypeDefinition ; + sh:order 42 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:class linkml:AnonymousTypeExpression ; + sh:description "holds if at least one of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 16 ; + sh:path linkml:any_of ], + [ 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:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 29 ; + sh:path linkml:alt_descriptions ], [ 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:nodeKind sh:Literal ; - sh:order 38 ; - sh:path linkml:imported_from ], + sh:order 40 ; + sh:path schema1:inLanguage ], [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; + 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:nodeKind sh:Literal ; - sh:order 34 ; - sh:path skos:note ], - [ sh:class linkml:AnonymousTypeExpression ; - sh:description "holds if none of the expressions hold" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 14 ; - sh:path linkml:none_of ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 27 ; - sh:path linkml:annotations ], - [ 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 30 ; + sh:path dcterms:title ], + [ sh:description "A related resource from which the element is derived." ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 24 ; - sh:path linkml:implements ], - [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; + sh:order 39 ; + sh:path dcterms:source ], + [ sh:description "status of the element" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 28 ; - sh:path skos:definition ], - [ sh:description "Controlled terms used to categorize an element." ; sh:nodeKind sh:IRI ; - sh:order 59 ; - sh:path dcterms:subject ], - [ sh:class linkml:PatternExpression ; - sh:description "the string value of the slot must conform to the regular expression in the pattern expression" ; + sh:order 57 ; + sh:path bibo:status ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 35 ; + sh:path linkml:examples ], + [ 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:nodeKind sh:Literal ; + sh:order 11 ; + sh:path linkml:equals_number ], + [ sh:description "agent that contributed to the element" ; + sh:nodeKind sh:IRI ; + sh:order 53 ; + sh:path dcterms:contributor ], + [ sh:class linkml:AnonymousTypeExpression ; + sh:description "holds if all of the expressions hold" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 6 ; - sh:path linkml:structured_pattern ], - [ 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:order 17 ; + sh:path linkml:all_of ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:nodeKind sh:IRI ; + sh:order 47 ; + sh:path skos:exactMatch ], + [ sh:description "For ordinal ranges, the value must be equal to or higher than this" ; sh:maxCount 1 ; + sh:order 12 ; + sh:path linkml:minimum_value ], + [ 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:nodeKind sh:Literal ; - sh:order 18 ; - sh:path rdfs:label ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:order 19 ; + sh:path linkml:id_prefixes ], + [ sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 43 ; - sh:path linkml:deprecated_element_has_possible_replacement ], + sh:order 37 ; + sh:path skos:inScheme ], [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; - sh:maxCount 1 ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; sh:nodeKind sh:Literal ; - sh:order 40 ; - sh:path schema1:inLanguage ], + sh:order 33 ; + 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:description "Keywords or tags used to describe the element" ; sh:nodeKind sh:Literal ; - sh:order 44 ; - sh:path skos:altLabel ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 42 ; - sh:path linkml:deprecated_element_has_exact_replacement ], + sh:order 60 ; + sh:path schema1:keywords ], + [ sh:class linkml:AnonymousTypeExpression ; + sh:description "holds if none of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 14 ; + sh:path linkml:none_of ], [ 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:nodeKind sh:IRI ; sh:order 46 ; sh:path skos:mappingRelation ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:nodeKind sh:IRI ; + sh:order 50 ; + sh:path skos:narrowMatch ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 54 ; + sh:path pav:createdOn ], [ sh:datatype xsd:string ; - sh:description "Causes the slot value to be interpreted as a uriorcurie after prefixing with this string" ; + sh:description "An established standard to which the element conforms." ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 8 ; - sh:path linkml:implicit_prefix ], + sh:order 23 ; + sh:path dcterms:conformsTo ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 43 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:nodeKind sh:IRI ; + sh:order 51 ; + sh:path skos:broadMatch ], + [ 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:nodeKind sh:Literal ; + sh:order 18 ; + sh:path rdfs:label ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:nodeKind sh:IRI ; + sh:order 59 ; + sh:path dcterms:subject ], [ 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:nodeKind sh:Literal ; sh:order 5 ; sh:path linkml:pattern ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + [ sh:datatype xsd:string ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 38 ; + sh:path linkml:imported_from ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; sh:nodeKind sh:IRI ; - sh:order 50 ; - sh:path skos:narrowMatch ], + sh:order 41 ; + sh:path rdfs:seeAlso ], [ sh:datatype xsd:string ; sh:description "Outstanding issues that needs resolution" ; sh:nodeKind sh:Literal ; sh:order 32 ; sh:path linkml:todos ], - [ 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: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 21 ; - sh:path linkml:definition_uri ], + sh:nodeKind sh:Literal ; + sh:order 20 ; + sh:path linkml:id_prefixes_are_closed ], + [ sh:datatype xsd:string ; + sh:description "Description of why and when this element will no longer be used" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 31 ; + sh:path linkml:deprecated ], [ sh:description "An element in another schema which this element instantiates." ; sh:nodeKind sh:IRI ; sh:order 25 ; sh:path linkml:instantiates ], - [ sh:description "For ordinal ranges, the value must be equal to or higher than this" ; + [ 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 12 ; - sh:path linkml:minimum_value ], + sh:nodeKind sh:IRI ; + sh:order 21 ; + sh:path linkml:definition_uri ], [ 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 "Causes the slot value to be interpreted as a uriorcurie after prefixing with this string" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 9 ; - sh:path linkml:equals_string ], - [ sh:description "A related resource from which the element is derived." ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 39 ; - sh:path dcterms:source ], + sh:order 8 ; + sh:path linkml:implicit_prefix ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 26 ; + sh:path linkml:extensions ], [ sh:datatype xsd:string ; sh:description "the name of the python object that implements this type definition" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 3 ; sh:path linkml:repr ], - [ sh:class linkml:LocalName ; + [ sh:class linkml:AnonymousTypeExpression ; + sh:description "holds if only one of the expressions hold" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 22 ; - sh:path linkml:local_names ], - [ sh:description "The uri that defines the possible values for the type definition" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 2 ; - sh:path linkml:type_uri ], - [ sh:description "For ordinal ranges, the value must be equal to or lower than this" ; - sh:maxCount 1 ; - sh:order 13 ; - sh:path linkml:maximum_value ], - [ 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:Literal ; - sh:order 58 ; - sh:path sh:order ], - [ sh:class linkml:TypeDefinition ; - sh:description "A parent type from which type properties are inherited" ; + sh:order 15 ; + sh:path linkml:exactly_one_of ], + [ 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:IRI ; - sh:order 0 ; - sh:path linkml:typeof ], + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 6 ; + sh:path linkml:structured_pattern ], [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; sh:nodeKind sh:IRI ; sh:order 48 ; sh:path skos:closeMatch ], - [ 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:nodeKind sh:Literal ; - sh:order 11 ; - sh:path linkml:equals_number ], - [ 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:nodeKind sh:Literal ; - sh:order 30 ; - sh:path dcterms:title ], - [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:nodeKind sh:Literal ; - sh:order 60 ; - sh:path schema1:keywords ], - [ sh:description "agent that contributed to the element" ; - sh:nodeKind sh:IRI ; - sh:order 53 ; - sh:path dcterms:contributor ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 29 ; - sh:path linkml:alt_descriptions ], - [ 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 27 ; + sh:path linkml:annotations ], + [ 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:nodeKind sh:IRI ; - sh:order 36 ; - sh:path OIO:inSubset ], - [ sh:class qudt:Unit ; - sh:description "an encoding of a unit" ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 7 ; - sh:path qudt:unit ], + sh:order 24 ; + sh:path linkml:implements ], [ 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:description "python base type in the LinkML runtime that implements this type definition" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 10 ; - sh:path linkml:equals_string_in ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:nodeKind sh:IRI ; - sh:order 49 ; - sh:path skos:relatedMatch ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:nodeKind sh:IRI ; - sh:order 51 ; - sh:path skos:broadMatch ], + sh:order 1 ; + sh:path linkml:base ], [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; + sh:description "time at which the element was last updated" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 54 ; - sh:path pav:createdOn ], + sh:order 55 ; + sh:path pav:lastUpdatedOn ], [ sh:description "agent that created the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 52 ; sh:path pav:createdBy ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; + [ 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:Literal ; - sh:order 55 ; - sh:path pav:lastUpdatedOn ], - [ sh:class linkml:AnonymousTypeExpression ; - sh:description "holds if at least one of the expressions hold" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 16 ; - sh:path linkml:any_of ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 35 ; - sh:path linkml:examples ], + sh:order 58 ; + sh:path sh:order ], [ sh:datatype xsd:string ; - sh:description "python base type in the LinkML runtime that implements this type definition" ; - sh:maxCount 1 ; + sh:description "notes and comments about an element intended primarily for external consumption" ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path linkml:base ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:nodeKind sh:IRI ; - sh:order 47 ; - sh:path skos:exactMatch ], - [ sh:description "status of the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 57 ; - sh:path bibo:status ], - [ sh:description "id of the schema that defined the element" ; + sh:order 34 ; + sh:path skos:note ], + [ sh:description "For ordinal ranges, the value must be equal to or lower than this" ; sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 37 ; - sh:path skos:inScheme ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:nodeKind sh:Literal ; - sh:order 33 ; - sh:path skos:editorialNote ], + sh:order 13 ; + sh:path linkml:maximum_value ], [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; - sh:maxCount 1 ; + sh:description "the slot must have range string and the value of the slot must equal one of the specified values" ; sh:nodeKind sh:Literal ; - sh:order 31 ; - sh:path linkml:deprecated ], - [ sh:class linkml:AnonymousTypeExpression ; - sh:description "holds if all of the expressions hold" ; + sh:order 10 ; + sh:path linkml:equals_string_in ], + [ sh:class linkml:LocalName ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 17 ; - sh:path linkml:all_of ], + sh:order 22 ; + sh:path linkml:local_names ], [ sh:class skosxl:Label ; sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 45 ; sh:path skosxl:altLabel ], - [ sh:description "agent that modified the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 56 ; - sh:path oslc:modifiedBy ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 26 ; - sh:path linkml:extensions ], - [ sh:datatype xsd:string ; - sh:description "An established standard to which the element conforms." ; + [ sh:class qudt:Unit ; + sh:description "an encoding of a unit" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 23 ; - sh:path dcterms:conformsTo ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:nodeKind sh:IRI ; - sh:order 41 ; - sh:path rdfs:seeAlso ], - [ sh:class linkml:AnonymousTypeExpression ; - sh:description "holds if only one of the expressions hold" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 15 ; - sh:path linkml:exactly_one_of ], - [ 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:nodeKind sh:Literal ; - sh:order 19 ; - 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:nodeKind sh:Literal ; - sh:order 20 ; - sh:path linkml:id_prefixes_are_closed ] ; + sh:order 7 ; + sh:path qudt:unit ] ; sh:targetClass linkml:TypeDefinition . linkml:AnonymousEnumExpression a sh:NodeShape ; rdfs:comment "An enum_expression that is not named" ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class linkml:PermissibleValue ; - sh:description "A list of possible values for a slot range" ; + sh:property [ 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 4 ; - sh:path linkml:permissible_values ], + sh:order 7 ; + sh:path linkml:inherits ], + [ 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:BlankNodeOrIRI ; + sh:order 6 ; + sh:path linkml:minus ], [ sh:description "the identifier of an enumeration code set." ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; 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:nodeKind sh:IRI ; - sh:order 10 ; - sh:path linkml:concepts ], [ 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:BlankNodeOrIRI ; sh:order 9 ; sh:path linkml:matches ], + [ sh:datatype xsd:string ; + sh:description "the version identifier of the enumeration code set" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path linkml:code_set_version ], + [ sh:description "A list of identifiers that are used to construct a set of permissible values" ; + sh:nodeKind sh:IRI ; + sh:order 10 ; + sh:path linkml:concepts ], + [ 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 "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:BlankNodeOrIRI ; + sh:order 8 ; + sh:path linkml:reachable_from ], [ sh:datatype xsd:string ; sh:description "the version tag of the enumeration code set" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 1 ; sh:path linkml:code_set_tag ], - [ sh:datatype xsd:string ; - sh:description "the version identifier of the enumeration code set" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - 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 included, after subtracting the minus set" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 5 ; - sh:path linkml:include ], - [ 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:BlankNodeOrIRI ; - sh:order 6 ; - sh:path linkml:minus ], - [ 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:BlankNodeOrIRI ; - sh:order 8 ; - sh:path linkml:reachable_from ], - [ 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:path linkml:include ] ; sh:targetClass linkml:AnonymousEnumExpression . linkml:PathExpression a sh:NodeShape ; rdfs:comment "An expression that describes an abstract path from an object to another through a sequence of slot lookups" ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; + sh:property [ sh:description "status of the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 39 ; + sh:path bibo:status ], + [ sh:datatype xsd:boolean ; + sh:description "true if the slot is to be inversed" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 42 ; - sh:path schema1:keywords ], - [ sh:class linkml:PathExpression ; - sh:description "holds if at least one of the expressions hold" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 2 ; - sh:path linkml:any_of ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; + sh:order 5 ; + sh:path linkml:reversed ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 11 ; - sh:path linkml:alt_descriptions ], - [ sh:class linkml:PathExpression ; - sh:description "holds if none of the expressions hold" ; + sh:order 17 ; + sh:path linkml:examples ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:nodeKind sh:IRI ; + sh:order 30 ; + sh:path skos:closeMatch ], + [ 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:AnonymousClassExpression ; + sh:description "A range that is described as a boolean expression combining existing ranges" ; + sh:maxCount 1 ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 1 ; - sh:path linkml:none_of ], + sh:order 7 ; + sh:path linkml:range_expression ], + [ 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:nodeKind sh:IRI ; + sh:order 28 ; + sh:path skos:mappingRelation ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was created" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 36 ; sh:path pav:createdOn ], - [ 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:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 27 ; + sh:path skosxl:altLabel ], + [ sh:class linkml:PathExpression ; + sh:description "holds if only one of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 4 ; + sh:path linkml:exactly_one_of ], + [ sh:class linkml:PathExpression ; + sh:description "holds if none of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 1 ; + sh:path linkml:none_of ], + [ sh:class linkml:PathExpression ; + sh:description "holds if at least one of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 2 ; + 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:nodeKind sh:IRI ; - sh:order 28 ; - sh:path skos:mappingRelation ], + sh:order 24 ; + sh:path linkml:deprecated_element_has_exact_replacement ], [ sh:class linkml:Extension ; sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNodeOrIRI ; @@ -3835,276 +3871,195 @@ linkml:PathExpression a sh:NodeShape ; sh:nodeKind sh:Literal ; sh:order 16 ; sh:path skos:note ], - [ sh:datatype xsd:boolean ; - sh:description "true if the slot is to be inversed" ; - sh:maxCount 1 ; + [ sh:datatype xsd:string ; + sh:description "Keywords or tags used to describe the element" ; sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path linkml:reversed ], - [ sh:description "A related resource from which the element is derived." ; + sh:order 42 ; + sh:path schema1:keywords ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 21 ; - sh:path dcterms:source ], - [ sh:description "id of the schema that defined the element" ; + sh:nodeKind sh:Literal ; + sh:order 37 ; + sh:path pav:lastUpdatedOn ], + [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 19 ; - 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:BlankNodeOrIRI ; - sh:order 27 ; - sh:path skosxl:altLabel ], - [ sh:class linkml:PathExpression ; - sh:description "holds if all of the expressions hold" ; + sh:nodeKind sh:Literal ; + sh:order 22 ; + sh:path schema1:inLanguage ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 3 ; - sh:path linkml:all_of ], + sh:order 11 ; + 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:nodeKind sh:Literal ; sh:order 13 ; sh:path linkml:deprecated ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:nodeKind sh:Literal ; - sh:order 14 ; - sh:path linkml:todos ], - [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 10 ; - 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:nodeKind sh:Literal ; sh:order 40 ; sh:path sh:order ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + [ sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 22 ; - sh:path schema1:inLanguage ], + sh:nodeKind sh:IRI ; + sh:order 19 ; + sh:path skos:inScheme ], [ sh:description "Controlled terms used to categorize an element." ; sh:nodeKind sh:IRI ; sh:order 41 ; sh:path dcterms:subject ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 24 ; - sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:description "agent that contributed to the element" ; - sh:nodeKind sh:IRI ; - 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:class linkml:Example ; - sh:description "example usages of an element" ; + sh:nodeKind sh:Literal ; + sh:order 10 ; + 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:BlankNodeOrIRI ; - sh:order 17 ; - sh:path linkml:examples ], - [ sh:description "agent that created the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 34 ; - sh:path pav:createdBy ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 9 ; + sh:path linkml:annotations ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; sh:nodeKind sh:IRI ; - sh:order 30 ; - sh:path skos:closeMatch ], + sh:order 23 ; + sh:path rdfs:seeAlso ], [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 25 ; sh:path linkml:deprecated_element_has_possible_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:nodeKind sh:Literal ; - sh:order 12 ; - sh:path dcterms:title ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + [ sh:class linkml:PathExpression ; + sh:description "holds if all of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 3 ; + sh:path linkml:all_of ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; sh:nodeKind sh:IRI ; - sh:order 31 ; - 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:narrowMatch ], + [ sh:description "agent that modified the element" ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 33 ; - sh:path skos:broadMatch ], + sh:order 38 ; + sh:path oslc:modifiedBy ], [ 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:nodeKind sh:Literal ; sh:order 26 ; sh:path skos:altLabel ], - [ sh:description "status of the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - 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:class linkml:PathExpression ; + sh:description "in a sequential list, this indicates the next member" ; sh:maxCount 1 ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 7 ; - sh:path linkml:range_expression ], + sh:order 0 ; + sh:path linkml:followed_by ], [ sh:class linkml:SlotDefinition ; sh:description "the slot to traverse" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 6 ; sh:path linkml:traverse ], - [ sh:class linkml:PathExpression ; - sh:description "holds if only one of the expressions hold" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 4 ; - sh:path linkml:exactly_one_of ], - [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - 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:description "A list of terms from different schemas or terminology systems that have related meaning." ; sh:nodeKind sh:IRI ; - sh:order 29 ; - sh:path skos:exactMatch ], - [ sh:class linkml:PathExpression ; - sh:description "in a sequential list, this indicates the next member" ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 0 ; - sh:path linkml:followed_by ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 37 ; - sh:path pav:lastUpdatedOn ], + sh:order 31 ; + sh:path skos:relatedMatch ], [ sh:datatype xsd:string ; sh:description "editorial notes about an element intended primarily for internal consumption" ; sh:nodeKind sh:Literal ; sh:order 15 ; sh:path skos:editorialNote ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 9 ; - sh:path linkml:annotations ], - [ sh:description "agent that modified the element" ; + [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 38 ; - sh:path oslc:modifiedBy ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:nodeKind sh:IRI ; - sh:order 32 ; - sh:path skos:narrowMatch ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:nodeKind sh:IRI ; - sh:order 23 ; - sh:path rdfs:seeAlso ] ; - sh:targetClass linkml:PathExpression . - -linkml:PatternExpression a sh:NodeShape ; - rdfs:comment "a regular expression pattern used to evaluate conformance of a string" ; - sh:closed true ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "Controlled terms used to categorize an element." ; - sh:nodeKind sh:IRI ; - sh:order 36 ; - sh:path dcterms:subject ], + sh:order 21 ; + sh:path dcterms:source ], [ sh:datatype xsd:string ; sh:description "Outstanding issues that needs resolution" ; sh:nodeKind sh:Literal ; - sh:order 9 ; + 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:nodeKind sh:IRI ; - sh:order 23 ; - sh:path skos:mappingRelation ], - [ sh:description "agent that modified the element" ; + [ 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:nodeKind sh:Literal ; + sh:order 12 ; + sh:path dcterms:title ], + [ sh:description "agent that contributed to the element" ; + sh:nodeKind sh:IRI ; + sh:order 35 ; + sh:path dcterms:contributor ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; sh:nodeKind sh:IRI ; sh:order 33 ; - 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:path skos:broadMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; sh:nodeKind sh:IRI ; + sh:order 29 ; + sh:path skos:exactMatch ], + [ sh:datatype xsd:string ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; sh:order 20 ; - sh:path linkml:deprecated_element_has_possible_replacement ], - [ sh:class skosxl:Label ; + sh:path linkml:imported_from ], + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 34 ; + sh:path pav:createdBy ] ; + sh:targetClass linkml:PathExpression . + +linkml:PatternExpression a sh:NodeShape ; + rdfs:comment "a regular expression pattern used to evaluate conformance of a string" ; + sh:closed true ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:class skosxl:Label ; sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 22 ; sh:path skosxl:altLabel ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:nodeKind sh:Literal ; + sh:order 9 ; + sh:path linkml:todos ], [ sh:class linkml:Example ; sh:description "example usages of an element" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 12 ; sh:path linkml:examples ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 6 ; - sh:path linkml:alt_descriptions ], - [ 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:nodeKind sh:Literal ; - sh:order 21 ; - sh:path skos:altLabel ], - [ 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:nodeKind sh:IRI ; - sh:order 19 ; - sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:description "A related resource from which the element is derived." ; + sh:order 29 ; + sh:path pav:createdBy ], + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 16 ; - sh:path dcterms:source ], - [ 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:nodeKind sh:IRI ; - sh:order 27 ; - sh:path skos:narrowMatch ], - [ 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:nodeKind sh:Literal ; - sh:order 2 ; - sh:path linkml:partial_match ], + sh:order 33 ; + sh:path oslc:modifiedBy ], [ 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:nodeKind sh:Literal ; - sh:order 8 ; - sh:path linkml:deprecated ], - [ sh:datatype xsd:integer ; - sh:description "the relative order in which the element occurs, lower values are given precedence" ; + sh:order 7 ; + sh:path dcterms:title ], + [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 35 ; - sh:path sh:order ], + sh:nodeKind sh:IRI ; + sh:order 16 ; + sh:path dcterms:source ], [ 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:description "notes and comments about an element intended primarily for external consumption" ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path linkml:syntax ], + sh:order 11 ; + sh:path skos:note ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was created" ; sh:maxCount 1 ; @@ -4112,802 +4067,847 @@ linkml:PatternExpression a sh:NodeShape ; sh:order 31 ; sh:path pav:createdOn ], [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:description "Keywords or tags used to describe the element" ; sh:nodeKind sh:Literal ; - sh:order 10 ; - sh:path skos:editorialNote ], - [ sh:description "agent that created the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 29 ; - sh:path pav:createdBy ], - [ sh:description "id of the schema that defined the element" ; + sh:order 37 ; + sh:path schema1:keywords ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 14 ; - sh:path skos:inScheme ], + sh:nodeKind sh:Literal ; + sh:order 32 ; + sh:path pav:lastUpdatedOn ], [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 17 ; - sh:path schema1:inLanguage ], + sh:order 8 ; + sh:path linkml:deprecated ], [ sh:datatype xsd:boolean ; sh:description "if true then the pattern is first string interpolated" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 1 ; sh:path linkml:interpolated ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:nodeKind sh:IRI ; + sh:order 27 ; + sh:path skos:narrowMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:nodeKind sh:IRI ; + 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:nodeKind sh:IRI ; + sh:order 19 ; + sh:path linkml:deprecated_element_has_exact_replacement ], [ sh:description "A list of related entities or URLs that may be of relevance" ; sh:nodeKind sh:IRI ; sh:order 18 ; 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:nodeKind sh:Literal ; - sh:order 7 ; - sh:path dcterms:title ], - [ sh:description "status of the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 34 ; - sh:path bibo:status ], [ sh:class linkml:Extension ; sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 3 ; sh:path linkml:extensions ], - [ sh:description "agent that contributed to the element" ; - sh:nodeKind sh:IRI ; - sh:order 30 ; - sh:path dcterms:contributor ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:nodeKind sh:IRI ; - sh:order 26 ; - sh:path skos:relatedMatch ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:nodeKind sh:IRI ; - sh:order 25 ; - sh:path skos:closeMatch ], - [ 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 not true then the pattern must match the whole string, as if enclosed in ^...$" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 15 ; - sh:path linkml:imported_from ], + sh:order 2 ; + sh:path linkml:partial_match ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 6 ; + sh:path linkml:alt_descriptions ], + [ sh:description "status of the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 34 ; + sh:path bibo:status ], [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; sh:nodeKind sh:Literal ; - sh:order 37 ; - sh:path schema1:keywords ], + sh:order 10 ; + sh:path skos:editorialNote ], [ sh:class linkml:Annotation ; sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 4 ; sh:path linkml:annotations ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + [ 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 24 ; - sh:path skos:exactMatch ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; + sh:order 13 ; + sh:path OIO:inSubset ], + [ 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:Literal ; - sh:order 32 ; - sh:path pav:lastUpdatedOn ], + 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:nodeKind sh:IRI ; + sh:order 23 ; + sh:path skos:mappingRelation ], + [ sh:description "id of the schema that defined the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 14 ; + sh:path skos:inScheme ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:nodeKind sh:IRI ; + sh:order 25 ; + sh:path skos:closeMatch ], [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; + 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:nodeKind sh:Literal ; - sh:order 11 ; - sh:path skos:note ], + sh:order 0 ; + sh:path linkml:syntax ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:nodeKind sh:IRI ; + sh:order 36 ; + sh:path dcterms:subject ], [ sh:datatype xsd:string ; sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 5 ; sh:path skos:definition ], + [ sh:description "agent that contributed to the element" ; + sh:nodeKind sh:IRI ; + sh:order 30 ; + sh:path dcterms:contributor ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + 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 broader meaning." ; sh:nodeKind sh:IRI ; sh:order 28 ; - sh:path skos:broadMatch ] ; - sh:targetClass linkml:PatternExpression . - -qudt:Unit a sh:NodeShape ; - rdfs:comment "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:closed true ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "Used to link a unit to equivalent concepts in ontologies such as UO, SNOMED, OEM, OBOE, NCIT" ; + sh:path skos:broadMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; sh:nodeKind sh:IRI ; - sh:order 3 ; - sh:path skos:exactMatch ], + sh:order 26 ; + sh:path skos:relatedMatch ], [ sh:datatype xsd:string ; - sh:description "Expression for deriving this unit from other units" ; - sh:maxCount 1 ; + 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:nodeKind sh:Literal ; - sh:order 5 ; - sh:path linkml:derivation ], + sh:order 21 ; + sh:path skos:altLabel ], [ sh:datatype xsd:string ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 7 ; - sh:path qudt:iec61360Code ], + sh:order 15 ; + sh:path linkml:imported_from ], [ 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:description "the primary language used in the sources" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path qudt:abbreviation ], - [ sh:datatype xsd:string ; + sh:order 17 ; + sh:path schema1:inLanguage ] ; + sh:targetClass linkml:PatternExpression . + +qudt:Unit a sh:NodeShape ; + rdfs:comment "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:closed true ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; sh:description "name of the unit encoded as a symbol" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; 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:nodeKind sh:Literal ; - sh:order 4 ; - sh:path qudt:ucumCode ], + sh:order 1 ; + sh:path qudt:abbreviation ], + [ sh:datatype xsd:string ; + sh:description "Expression for deriving this unit from other units" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 5 ; + sh:path linkml:derivation ], [ sh:description "Concept in a vocabulary or ontology that denotes the kind of quantity being measured, e.g. length" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 6 ; sh:path qudt:hasQuantityKind ], + [ sh:description "Used to link a unit to equivalent concepts in ontologies such as UO, SNOMED, OEM, OBOE, NCIT" ; + sh:nodeKind sh:IRI ; + sh:order 3 ; + sh:path skos:exactMatch ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 7 ; + sh:path qudt:iec61360Code ], [ sh:datatype xsd:string ; sh:description "the spelled out name of the unit, for example, meter" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 2 ; - sh:path rdfs:label ] ; + sh:path rdfs:label ], + [ sh:datatype xsd:string ; + sh:description "associates a QUDT unit with its UCUM code (case-sensitive)." ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 4 ; + sh:path qudt:ucumCode ] ; sh:targetClass qudt:Unit . linkml:ClassDefinition a sh:NodeShape ; rdfs:comment "an element whose instances are complex objects that may have slot-value assignments" ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ 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:property [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 37 ; + sh:path linkml:extensions ], + [ 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:nodeKind sh:IRI ; - sh:order 6 ; - sh:path linkml:defining_slots ], - [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; + sh:order 27 ; + sh:path linkml:values_from ], + [ sh:description "An element in another schema which this element instantiates." ; + sh:nodeKind sh:IRI ; + sh:order 36 ; + sh:path linkml:instantiates ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 39 ; - sh:path skos: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:nodeKind sh:IRI ; - sh:order 32 ; - sh:path linkml:definition_uri ], - [ 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:description "A related resource from which the element is derived." ; + sh:order 66 ; + 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:nodeKind sh:IRI ; - sh:order 50 ; - sh:path dcterms:source ], - [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; + sh:nodeKind sh:Literal ; + sh:order 12 ; + sh:path linkml:represents_relationship ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 42 ; - sh:path linkml:deprecated ], - [ 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:BlankNodeOrIRI ; - sh:order 8 ; - sh:path linkml:unique_keys ], + sh:order 65 ; + sh:path pav:createdOn ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:nodeKind sh:IRI ; + sh:order 59 ; + sh:path skos:closeMatch ], [ 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 22 ; sh:path linkml:is_a ], - [ sh:description "DEPRECATED -- rdfs:subClassOf to be emitted in OWL generation" ; + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 56 ; + sh:path skosxl:altLabel ], + [ 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) GENERATE: 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:nodeKind sh:IRI ; - sh:order 4 ; - sh:path linkml:subclass_of ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:nodeKind sh:IRI ; - sh:order 70 ; - sh:path dcterms:subject ], + sh:nodeKind sh:Literal ; + sh:order 28 ; + sh:path linkml:string_serialization ], [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 43 ; - sh:path linkml:todos ], - [ sh:description "status of the element" ; + sh:order 49 ; + sh:path linkml:imported_from ], + [ 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:nodeKind sh:Literal ; + sh:order 55 ; + sh:path skos:altLabel ], + [ sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 68 ; - sh:path bibo:status ], - [ 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:order 48 ; + sh:path skos:inScheme ], + [ 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:class linkml:Example ; + sh:description "example usages of an element" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 10 ; - sh:path linkml:classification_rules ], - [ 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:nodeKind sh:Literal ; - sh:order 14 ; - sh:path linkml:children_are_mutually_disjoint ], - [ sh:class linkml:ExtraSlotsExpression ; - sh:description """How a class instance handles extra data not specified in the class definition. -Note that this does *not* define the constraints that are placed on additional slots defined by inheriting classes. - -Possible values: -- `allowed: true` - allow all additional data -- `allowed: false` (or `allowed:` or `allowed: null` while `range_expression` is `null`) - - forbid all additional data (default) -- `range_expression: ...` - allow additional data if it matches the slot expression (see examples) -""" ; + sh:order 46 ; + sh:path linkml:examples ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:nodeKind sh:IRI ; + sh:order 61 ; + sh:path skos:narrowMatch ], + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 67 ; + sh:path oslc:modifiedBy ], + [ sh:class linkml:ClassRule ; + sh:description "the collection of rules that apply to all members of this class" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 15 ; - sh:path linkml:extra_slots ], + sh:order 9 ; + sh:path sh:rule ], + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 39 ; + sh:path skos:definition ], + [ 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 26 ; + sh:path linkml:apply_to ], [ sh:class linkml:AltDescription ; sh:description "A sourced alternative description for an element" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 40 ; sh:path linkml:alt_descriptions ], + [ 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:nodeKind sh:Literal ; + sh:order 16 ; + sh:path skos:prefLabel ], [ 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:Literal ; sh:order 69 ; sh:path sh:order ], - [ sh:datatype xsd:string ; - sh:description "An established standard to which the element conforms." ; + [ sh:description "status of the element" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 34 ; - sh:path dcterms:conformsTo ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; sh:nodeKind sh:IRI ; - sh:order 52 ; - sh:path rdfs:seeAlso ], - [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:order 68 ; + sh:path bibo:status ], + [ sh:class linkml:UniqueKey ; + sh:description "A collection of named unique keys for this class. Such unique keys may be spread over several slots, which is why they are also called \"compound keys\". A unique key uniquely identifies instances of the class within a given container, meaning there cannot be two (or more) instances of the class with the same values for all the slots that make up the unique key." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 8 ; + sh:path linkml:unique_keys ], + [ sh:defaultValue "linkml:ClassDefinition"^^xsd:string ; + 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:nodeKind sh:Literal ; - sh:order 49 ; - sh:path linkml:imported_from ], + sh:nodeKind sh:IRI ; + sh:order 3 ; + sh:path linkml:class_uri ], + [ sh:class linkml:SlotDefinition ; + sh:description "expresses constraints on a group of slots for a class expression" ; + sh:nodeKind sh:IRI ; + sh:order 21 ; + sh:path linkml:slot_conditions ], + [ sh:class linkml:AnonymousClassExpression ; + sh:description "holds if only one of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 18 ; + sh:path linkml:exactly_one_of ], + [ 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:class linkml:AnonymousClassExpression ; + sh:description "holds if at least one of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 17 ; + sh:path linkml:any_of ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:nodeKind sh:IRI ; + sh:order 60 ; + 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 "if true then induced/mangled slot names are not created for class_usage and attributes" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 24 ; - sh:path linkml:mixin ], - [ 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 25 ; - sh:path linkml:mixins ], - [ sh:description "agent that created the element" ; + sh:order 11 ; + sh:path linkml:slot_names_unique ], + [ 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:nodeKind sh:Literal ; + sh:order 29 ; + sh:path rdfs:label ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; sh:nodeKind sh:IRI ; - sh:order 63 ; - sh:path pav:createdBy ], + sh:order 62 ; + sh:path skos:broadMatch ], + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:nodeKind sh:Literal ; + sh:order 44 ; + sh:path skos:editorialNote ], + [ sh:class linkml:AnonymousClassExpression ; + sh:description "holds if all of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 20 ; + sh:path linkml:all_of ], + [ sh:class linkml:SlotDefinition ; + sh:description "Inline definition of slots" ; + sh:nodeKind sh:IRI ; + sh:order 2 ; + sh:path linkml:attributes ], + [ sh:class linkml:LocalName ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 33 ; + sh:path linkml:local_names ], + [ 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 25 ; + sh:path linkml:mixins ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 53 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ 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:nodeKind sh:Literal ; + sh:order 14 ; + sh:path linkml:children_are_mutually_disjoint ], [ 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:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 7 ; sh:path linkml:tree_root ], - [ sh:datatype xsd:boolean ; - sh:description "true if this class represents a relationship rather than an entity" ; + [ sh:datatype xsd:string ; + sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 12 ; - sh:path linkml:represents_relationship ], - [ 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 42 ; + sh:path linkml:deprecated ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; sh:nodeKind sh:Literal ; - sh:order 23 ; - sh:path linkml:abstract ], + sh:order 43 ; + 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 47 ; sh:path OIO:inSubset ], - [ 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:nodeKind sh:IRI ; + sh:order 57 ; + 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:nodeKind sh:IRI ; - sh:order 67 ; - sh:path oslc:modifiedBy ], + sh:order 54 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ 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:Literal ; + sh:order 24 ; + sh:path linkml:mixin ], [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:description "Keywords or tags used to describe the element" ; sh:nodeKind sh:Literal ; - sh:order 44 ; - sh:path skos:editorialNote ], + sh:order 71 ; + sh:path schema1:keywords ], + [ 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:nodeKind sh:Literal ; + sh:order 30 ; + sh:path linkml:id_prefixes ], [ sh:class linkml:AnonymousClassExpression ; - sh:description "holds if only one of the expressions hold" ; + sh:description "holds if none of the expressions hold" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 18 ; - sh:path linkml:exactly_one_of ], - [ 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:nodeKind sh:IRI ; - sh:order 27 ; - sh:path linkml:values_from ], - [ sh:class linkml:SlotDefinition ; - sh:description "Inline definition of slots" ; + sh:order 19 ; + sh:path linkml:none_of ], + [ sh:description "A related resource from which the element is derived." ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 2 ; - sh:path linkml:attributes ], + sh:order 50 ; + sh:path dcterms:source ], [ sh:description "agent that contributed to the element" ; sh:nodeKind sh:IRI ; sh:order 64 ; sh:path dcterms:contributor ], - [ 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: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 57 ; - sh:path skos:mappingRelation ], - [ sh:description "An element in another schema which this element instantiates." ; + sh:order 5 ; + sh:path linkml:union_of ], + [ 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:IRI ; - sh:order 36 ; - sh:path linkml:instantiates ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; + sh:order 32 ; + sh:path linkml:definition_uri ], + [ sh:class linkml:ExtraSlotsExpression ; + sh:description """How a class instance handles extra data not specified in the class definition. +Note that this does *not* define the constraints that are placed on additional slots defined by inheriting classes. + +Possible values: +- `allowed: true` - allow all additional data +- `allowed: false` (or `allowed:` or `allowed: null` while `range_expression` is `null`) - + forbid all additional data (default) +- `range_expression: ...` - allow additional data if it matches the slot expression (see examples) +""" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 15 ; + sh:path linkml:extra_slots ], + [ 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:Literal ; - sh:order 66 ; - sh:path pav:lastUpdatedOn ], - [ sh:class linkml:SlotDefinition ; - sh:description "the refinement of a slot in the context of the containing class definition." ; + sh:order 31 ; + sh:path linkml:id_prefixes_are_closed ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; sh:nodeKind sh:IRI ; - sh:order 1 ; - sh:path linkml:slot_usage ], + sh:order 52 ; + sh:path rdfs:seeAlso ], + [ 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:nodeKind sh:Literal ; + sh:order 23 ; + sh:path linkml:abstract ], [ 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:nodeKind sh:IRI ; sh:order 35 ; sh:path linkml:implements ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 38 ; + sh:path linkml:annotations ], + [ 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 58 ; - sh:path skos:exactMatch ], - [ 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:nodeKind sh:Literal ; - sh:order 30 ; - sh:path linkml:id_prefixes ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:order 1 ; + sh:path linkml:slot_usage ], + [ sh:description "agent that created the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 53 ; - 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:nodeKind sh:IRI ; - sh:order 62 ; - sh:path skos:broadMatch ], - [ sh:class linkml:LocalName ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 33 ; - sh:path linkml:local_names ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 65 ; - sh:path pav:createdOn ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 46 ; - sh:path linkml:examples ], - [ 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 63 ; + sh:path pav:createdBy ], + [ sh:description "DEPRECATED -- rdfs:subClassOf to be emitted in OWL generation" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 31 ; - sh:path linkml:id_prefixes_are_closed ], + sh:nodeKind sh:IRI ; + sh:order 4 ; + sh:path linkml:subclass_of ], [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; + sh:description "notes and comments about an element intended primarily for external consumption" ; sh:nodeKind sh:Literal ; - sh:order 71 ; - sh:path schema1:keywords ], - [ sh:description "id of the schema that defined the element" ; + sh:order 45 ; + sh:path skos:note ], + [ sh:datatype xsd:string ; + sh:description "An established standard to which the element conforms." ; sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 34 ; + sh:path dcterms:conformsTo ], + [ 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 48 ; - sh:path skos:inScheme ], + sh:order 6 ; + sh:path linkml:defining_slots ], [ sh:class linkml:AnonymousClassExpression ; - sh:description "holds if all of the expressions hold" ; + 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:BlankNodeOrIRI ; - sh:order 20 ; - sh:path linkml:all_of ], + sh:order 10 ; + sh:path linkml:classification_rules ], [ 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:nodeKind sh:Literal ; - sh:order 41 ; - sh:path dcterms:title ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 51 ; + sh:path schema1:inLanguage ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; sh:nodeKind sh:IRI ; - sh:order 60 ; - sh:path skos:relatedMatch ], + sh:order 58 ; + sh:path skos:exactMatch ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:nodeKind sh:IRI ; + sh:order 70 ; + sh:path dcterms:subject ], [ 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) GENERATE: 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:nodeKind sh:Literal ; - sh:order 28 ; - sh:path linkml:string_serialization ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 54 ; - sh:path linkml:deprecated_element_has_possible_replacement ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "holds if none of the expressions hold" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 19 ; - sh:path linkml:none_of ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 41 ; + sh:path dcterms:title ] ; + sh:targetClass linkml:ClassDefinition . + +linkml:Definition a sh:NodeShape ; + rdfs:comment "abstract base class for core metaclasses" ; + sh:closed false ; + sh:ignoredProperties ( linkml:path_rule linkml:designates_type linkml:inherits linkml:pattern linkml:maximum_value linkml:matches linkml:pv_formula linkml:role linkml:inlined_as_list linkml:bindings skos:prefLabel linkml:inherited linkml:identifier linkml:multivalued linkml:enum_uri linkml:symmetric linkml:list_elements_ordered linkml:children_are_mutually_disjoint linkml:is_class_field linkml:reachable_from linkml:recommended linkml:relational_role linkml:transitive_form_of linkml:none_of owl:inverseOf linkml:type_mappings sh:rule rdfs:subPropertyOf linkml:exactly_one_of linkml:value_presence linkml:extra_slots linkml:include linkml:tree_root linkml:subclass_of linkml:all_of linkml:slot_conditions linkml:irreflexive linkml:range_expression linkml:transitive linkml:unique_keys linkml:reflexive linkml:array linkml:classification_rules linkml:slots linkml:list_elements_unique linkml:has_member linkml:usage_slot_name linkml:equals_number linkml:implicit_prefix linkml:inlined linkml:locally_reflexive rdf:type linkml:represents_relationship linkml:slot_names_unique linkml:defining_slots linkml:shared linkml:equals_expression linkml:required linkml:domain linkml:all_members linkml:concepts linkml:minimum_cardinality linkml:singular_name linkml:code_set_tag linkml:domain_of linkml:asymmetric linkml:enum_range linkml:permissible_values linkml:slot_uri linkml:key linkml:code_set linkml:is_grouping_slot linkml:structured_pattern linkml:attributes linkml:reflexive_transitive_form_of linkml:owner linkml:equals_string linkml:class_uri linkml:is_usage_slot linkml:readonly linkml:ifabsent linkml:disjoint_with linkml:minus linkml:range linkml:slot_usage linkml:exact_cardinality linkml:code_set_version linkml:union_of qudt:unit sh:group linkml:equals_string_in linkml:maximum_cardinality linkml:minimum_value linkml:any_of ) ; + sh:property [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; sh:nodeKind sh:IRI ; - sh:order 61 ; + sh:order 39 ; sh:path skos:narrowMatch ], - [ 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: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: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:nodeKind sh:Literal ; - sh:order 55 ; - sh:path skos:altLabel ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 37 ; - 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:BlankNodeOrIRI ; - sh:order 56 ; - sh:path skosxl:altLabel ], [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + 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) GENERATE: 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:nodeKind sh:Literal ; - sh:order 51 ; - sh:path schema1:inLanguage ], - [ sh:datatype xsd:boolean ; - sh:description "if true then induced/mangled slot names are not created for class_usage and attributes" ; + sh:order 6 ; + sh:path linkml:string_serialization ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:nodeKind sh:IRI ; + sh:order 36 ; + sh:path skos:exactMatch ], + [ 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:Literal ; - sh:order 11 ; - sh:path linkml:slot_names_unique ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "holds if at least one of the expressions hold" ; + sh:order 47 ; + sh:path sh:order ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 17 ; - sh:path linkml:any_of ], + sh:order 18 ; + sh:path linkml:alt_descriptions ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 32 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:description "agent that contributed to the element" ; + sh:nodeKind sh:IRI ; + sh:order 42 ; + 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:description "An established standard to which the element conforms." ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 16 ; - sh:path skos:prefLabel ], - [ 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 26 ; - sh:path linkml:apply_to ], + sh:order 12 ; + sh:path dcterms:conformsTo ], [ 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:nodeKind sh:Literal ; - sh:order 29 ; + sh:order 7 ; sh:path rdfs:label ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 38 ; - sh:path linkml:annotations ], - [ sh:class linkml:SlotDefinition ; - sh:description "expresses constraints on a group of slots for a class expression" ; + [ 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 21 ; - sh:path linkml:slot_conditions ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:order 0 ; + sh:path linkml:is_a ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 59 ; - sh:path skos:closeMatch ], + sh:order 31 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:description "status of the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 46 ; + sh:path bibo:status ], [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:description "Description of why and when this element will no longer be used" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 45 ; - sh:path skos:note ], - [ sh:defaultValue "linkml:ClassDefinition"^^xsd:string ; - 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 20 ; + sh:path linkml:deprecated ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:nodeKind sh:IRI ; + sh:order 37 ; + sh:path skos:closeMatch ], + [ sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 3 ; - sh:path linkml:class_uri ], - [ sh:class linkml:ClassRule ; - sh:description "the collection of rules that apply to all members of this class" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 9 ; - sh:path sh:rule ] ; - sh:targetClass linkml:ClassDefinition . - -linkml:Definition a sh:NodeShape ; - rdfs:comment "abstract base class for core metaclasses" ; - sh:closed false ; - sh:ignoredProperties ( linkml:exact_cardinality linkml:path_rule linkml:inherits linkml:any_of linkml:children_are_mutually_disjoint linkml:has_member linkml:classification_rules linkml:role rdf:type linkml:ifabsent linkml:value_presence rdfs:subPropertyOf linkml:code_set_tag linkml:equals_expression linkml:is_class_field linkml:symmetric linkml:identifier linkml:none_of linkml:include linkml:tree_root linkml:minus linkml:shared linkml:pv_formula linkml:relational_role linkml:slot_usage linkml:structured_pattern linkml:owner linkml:minimum_value linkml:inherited linkml:singular_name linkml:readonly linkml:maximum_value linkml:attributes linkml:usage_slot_name linkml:equals_number linkml:permissible_values linkml:domain_of linkml:slots linkml:asymmetric linkml:required linkml:recommended linkml:array linkml:list_elements_unique linkml:represents_relationship linkml:slot_names_unique linkml:designates_type linkml:pattern linkml:inlined_as_list linkml:extra_slots linkml:disjoint_with linkml:domain linkml:union_of linkml:transitive_form_of linkml:all_members linkml:transitive linkml:defining_slots linkml:equals_string_in linkml:slot_uri sh:group linkml:reflexive_transitive_form_of owl:inverseOf linkml:class_uri qudt:unit linkml:concepts linkml:is_grouping_slot linkml:locally_reflexive linkml:slot_conditions linkml:implicit_prefix linkml:irreflexive linkml:minimum_cardinality linkml:is_usage_slot linkml:subclass_of linkml:type_mappings linkml:range_expression linkml:enum_uri linkml:exactly_one_of linkml:list_elements_ordered linkml:key skos:prefLabel linkml:inlined linkml:code_set_version linkml:maximum_cardinality linkml:enum_range sh:rule linkml:code_set linkml:all_of linkml:unique_keys linkml:range linkml:reachable_from linkml:multivalued linkml:matches linkml:reflexive linkml:equals_string linkml:bindings ) ; - sh:property [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 24 ; - sh:path linkml:examples ], - [ sh:description "agent that modified the element" ; + sh:order 26 ; + sh:path skos:inScheme ], + [ 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:nodeKind sh:IRI ; + sh:order 13 ; + sh:path linkml:implements ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:nodeKind sh:Literal ; + sh:order 21 ; + sh:path linkml:todos ], + [ 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:IRI ; - sh:order 45 ; - sh:path oslc:modifiedBy ], + sh:order 10 ; + sh:path linkml:definition_uri ], [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 28 ; sh:path dcterms:source ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 16 ; + sh:path linkml:annotations ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; sh:nodeKind sh:IRI ; - sh:order 36 ; - sh:path skos:exactMatch ], + sh:order 40 ; + sh:path skos:broadMatch ], + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 41 ; + sh:path pav:createdBy ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:nodeKind sh:IRI ; + sh:order 30 ; + sh:path rdfs:seeAlso ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 43 ; + sh:path pav:createdOn ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:nodeKind sh:IRI ; + sh:order 38 ; + 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:nodeKind sh:Literal ; sh:order 33 ; 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 25 ; + sh:path OIO:inSubset ], + [ 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:nodeKind sh:IRI ; + sh:order 5 ; + sh:path linkml:values_from ], [ 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: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 concise human-readable display label for the element. The title should mirror the name, and should use ordinary textual punctuation." ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 19 ; - sh:path dcterms:title ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 15 ; - sh:path linkml:extensions ], - [ sh:datatype xsd:integer ; - sh:description "the relative order in which the element occurs, lower values are given precedence" ; - sh:maxCount 1 ; + 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:nodeKind sh:Literal ; - sh:order 47 ; - sh:path sh:order ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:nodeKind sh:IRI ; - sh:order 30 ; - sh:path rdfs:seeAlso ], + sh:order 8 ; + sh:path linkml:id_prefixes ], [ sh:datatype xsd:string ; sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 17 ; sh:path skos:definition ], - [ 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:nodeKind sh:IRI ; - sh:order 5 ; - sh:path linkml:values_from ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:nodeKind sh:IRI ; - sh:order 39 ; - sh:path skos:narrowMatch ], + [ sh:datatype xsd:string ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 27 ; + sh:path linkml:imported_from ], + [ 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:Literal ; + sh:order 2 ; + sh:path linkml:mixin ], [ sh:datatype xsd:string ; sh:description "Keywords or tags used to describe the element" ; sh:nodeKind sh:Literal ; sh:order 49 ; sh:path schema1:keywords ], - [ sh:description "agent that contributed to the element" ; - sh:nodeKind sh:IRI ; - sh:order 42 ; - sh:path dcterms:contributor ], - [ sh:description "An element in another schema which this element instantiates." ; - sh:nodeKind sh:IRI ; - sh:order 14 ; - sh:path linkml:instantiates ], [ 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:nodeKind sh:Literal ; - sh:order 8 ; - sh:path linkml:id_prefixes ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 18 ; - sh:path linkml:alt_descriptions ], - [ sh:description "status of the element" ; + sh:description "the primary language used in the sources" ; sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 46 ; - sh:path bibo:status ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 16 ; - sh:path linkml:annotations ], + sh:nodeKind sh:Literal ; + sh:order 29 ; + sh:path schema1:inLanguage ], [ 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) GENERATE: 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:description "notes and comments about an element intended primarily for external consumption" ; sh:nodeKind sh:Literal ; - sh:order 6 ; - sh:path linkml:string_serialization ], - [ 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:IRI ; - sh:order 10 ; - sh:path linkml:definition_uri ], + sh:order 23 ; + sh:path skos:note ], [ sh:datatype xsd:string ; - sh:description "An established standard to which the element conforms." ; - sh:maxCount 1 ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; sh:nodeKind sh:Literal ; - sh:order 12 ; - sh:path dcterms:conformsTo ], + sh:order 22 ; + sh:path skos:editorialNote ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 15 ; + sh:path linkml:extensions ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was last updated" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 44 ; sh:path pav:lastUpdatedOn ], - [ 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 created the element" ; + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 34 ; + sh:path skosxl:altLabel ], + [ 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:nodeKind sh:IRI ; - sh:order 41 ; - sh:path pav:createdBy ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; sh:nodeKind sh:Literal ; - sh:order 21 ; - sh:path linkml:todos ], + sh:order 1 ; + sh:path linkml:abstract ], [ 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:nodeKind sh:IRI ; sh:order 35 ; sh:path skos:mappingRelation ], - [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 27 ; - sh:path linkml:imported_from ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 29 ; - 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:nodeKind sh:IRI ; - sh:order 25 ; - sh:path OIO:inSubset ], - [ 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:nodeKind sh:IRI ; - sh:order 13 ; - sh:path linkml:implements ], - [ 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:nodeKind sh:Literal ; - sh:order 7 ; - sh:path rdfs:label ], - [ 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 "Description of why and when this element will no longer be used" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 20 ; - sh:path linkml:deprecated ], - [ sh:description "id of the schema that defined the element" ; + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - 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:order 45 ; + sh:path oslc:modifiedBy ], + [ sh:class linkml:LocalName ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 34 ; - sh:path skosxl:altLabel ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 43 ; - sh:path pav:createdOn ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:order 11 ; + sh:path linkml:local_names ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 24 ; + sh:path linkml:examples ], + [ sh:description "Controlled terms used to categorize an element." ; sh:nodeKind sh:IRI ; - sh:order 38 ; - sh:path skos:relatedMatch ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:nodeKind sh:Literal ; - sh:order 23 ; - sh:path skos:note ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:nodeKind sh:Literal ; - sh:order 22 ; - sh:path skos:editorialNote ], + sh:order 48 ; + 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:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 9 ; sh:path linkml:id_prefixes_are_closed ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:nodeKind sh:IRI ; - sh:order 37 ; - sh:path skos:closeMatch ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:nodeKind sh:IRI ; - sh:order 40 ; - sh:path skos:broadMatch ], - [ 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: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:nodeKind sh:Literal ; - sh:order 2 ; - sh:path linkml:mixin ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:nodeKind sh:IRI ; - sh:order 48 ; - 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:nodeKind sh:IRI ; - sh:order 32 ; - sh:path linkml:deprecated_element_has_possible_replacement ], - [ 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 dcterms:title ], + [ sh:description "An element in another schema which this element instantiates." ; sh:nodeKind sh:IRI ; - sh:order 31 ; - sh:path linkml:deprecated_element_has_exact_replacement ], - [ 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:nodeKind sh:Literal ; - sh:order 1 ; - sh:path linkml:abstract ], - [ sh:class linkml:LocalName ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 11 ; - sh:path linkml:local_names ] ; + sh:order 14 ; + sh:path linkml:instantiates ] ; sh:targetClass linkml:Definition . linkml:LocalName a sh:NodeShape ; @@ -4915,246 +4915,150 @@ linkml:LocalName a sh:NodeShape ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; - sh:description "a name assigned to an element in a given ontology" ; + sh:description "the ncname of the source of the name" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 1 ; - sh:path skos:altLabel ], + sh:order 0 ; + sh:path linkml:local_name_source ], [ sh:datatype xsd:string ; - sh:description "the ncname of the source of the name" ; + sh:description "a name assigned to an element in a given ontology" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path linkml:local_name_source ] ; + sh:order 1 ; + sh:path skos:altLabel ] ; sh:targetClass linkml:LocalName . linkml:AnonymousTypeExpression a sh:NodeShape ; rdfs:comment "A type expression that is not a top-level named type definition. Used for nesting." ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class linkml:AnonymousTypeExpression ; - sh:description "holds if none of the expressions hold" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 9 ; - sh:path linkml:none_of ], - [ sh:class linkml:AnonymousTypeExpression ; - sh:description "holds if only one of the expressions hold" ; - sh:nodeKind sh:BlankNodeOrIRI ; - 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:BlankNodeOrIRI ; - sh:order 11 ; - sh:path linkml:any_of ], - [ sh:description "For ordinal ranges, the value must be equal to or lower than this" ; - sh:maxCount 1 ; - sh:order 8 ; - sh:path linkml:maximum_value ], - [ sh:class qudt:Unit ; + sh:property [ sh:class qudt:Unit ; sh:description "an encoding of a unit" ; sh:maxCount 1 ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 2 ; sh:path qudt:unit ], - [ 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:BlankNodeOrIRI ; - sh:order 1 ; - sh:path linkml:structured_pattern ], [ 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:nodeKind sh:Literal ; sh:order 0 ; sh:path linkml:pattern ], + [ sh:class linkml:AnonymousTypeExpression ; + sh:description "holds if none of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 9 ; + sh:path linkml:none_of ], + [ sh:description "For ordinal ranges, the value must be equal to or higher than this" ; + sh:maxCount 1 ; + sh:order 7 ; + 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:description "the slot must have range string and the value of the slot must equal the specified value" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 5 ; - sh:path linkml:equals_string_in ], + sh:order 4 ; + sh:path linkml:equals_string ], [ sh:class linkml:AnonymousTypeExpression ; sh:description "holds if all of the expressions hold" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 12 ; sh:path linkml:all_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:description "Causes the slot value to be interpreted as a uriorcurie after prefixing with this string" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path linkml:equals_string ], - [ 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:order 3 ; + sh:path linkml:implicit_prefix ], + [ sh:description "For ordinal ranges, the value must be equal to or lower than this" ; + sh:maxCount 1 ; + sh:order 8 ; + sh:path linkml:maximum_value ], + [ sh:class linkml:AnonymousTypeExpression ; + sh:description "holds if only one of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 10 ; + sh:path linkml:exactly_one_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:nodeKind sh:Literal ; sh:order 6 ; sh:path linkml:equals_number ], - [ sh:description "For ordinal ranges, the value must be equal to or higher than this" ; + [ sh:class linkml:AnonymousTypeExpression ; + sh:description "holds if at least one of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 11 ; + sh:path linkml:any_of ], + [ 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 7 ; - sh:path linkml:minimum_value ], + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 1 ; + sh:path linkml:structured_pattern ], [ 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:description "the slot must have range string and the value of the slot must equal one of the specified values" ; sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path linkml:implicit_prefix ] ; + sh:order 5 ; + sh:path linkml:equals_string_in ] ; sh:targetClass linkml:AnonymousTypeExpression . linkml:AnonymousSlotExpression a sh:NodeShape ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ 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:nodeKind sh:Literal ; - sh:order 14 ; - sh:path linkml:implicit_prefix ], - [ sh:datatype xsd:string ; - sh:description "the value of the slot must equal the value of the evaluated expression" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 19 ; - sh:path linkml:equals_expression ], + sh:property [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 31 ; + sh:path linkml:annotations ], [ sh:datatype xsd:integer ; - sh:description "the minimum number of entries for a multivalued slot" ; + sh:description "the exact number of entries for a multivalued slot" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 21 ; - sh:path linkml:minimum_cardinality ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 46 ; - sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 30 ; - sh:path linkml:extensions ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:nodeKind sh:IRI ; - sh:order 52 ; - sh:path skos:closeMatch ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:nodeKind sh:IRI ; - sh:order 55 ; - sh:path skos:broadMatch ], + sh:order 20 ; + sh:path linkml:exact_cardinality ], [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 43 ; sh:path dcterms:source ], - [ sh:description "For ordinal ranges, the value must be equal to or higher than this" ; - sh:maxCount 1 ; - sh:order 9 ; - sh:path linkml:minimum_value ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "holds if only one of the expressions hold" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 26 ; - sh:path linkml:exactly_one_of ], - [ 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:Literal ; - sh:order 62 ; - sh:path sh:order ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:nodeKind sh:IRI ; - sh:order 63 ; - 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:nodeKind sh:Literal ; - sh:order 34 ; - sh:path dcterms:title ], - [ 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:description "Keywords or tags used to describe the element" ; sh:nodeKind sh:Literal ; - sh:order 7 ; - sh:path linkml:inlined ], - [ sh:description "agent that modified the element" ; - sh:maxCount 1 ; + sh:order 64 ; + sh:path schema1:keywords ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; sh:nodeKind sh:IRI ; - sh:order 60 ; - sh:path oslc:modifiedBy ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:nodeKind sh:Literal ; - sh:order 36 ; - sh:path linkml:todos ], - [ 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:order 55 ; + sh:path skos:broadMatch ], + [ 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:BlankNodeOrIRI ; + sh:order 23 ; + sh:path linkml:has_member ], + [ 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:nodeKind sh:Literal ; - sh:order 5 ; - sh:path linkml:recommended ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "A range that is described as a boolean expression combining existing ranges" ; + sh:order 17 ; + sh:path linkml:equals_string_in ], + [ sh:description "For ordinal ranges, the value must be equal to or higher than this" ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 1 ; - sh:path linkml:range_expression ], + sh:order 9 ; + sh:path linkml:minimum_value ], [ 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: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:BlankNodeOrIRI ; - sh:order 29 ; - sh:path linkml:array ], [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; + 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:nodeKind sh:Literal ; - sh:order 32 ; - sh:path skos:definition ], - [ sh:description "agent that created the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 56 ; - sh:path pav:createdBy ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:nodeKind sh:IRI ; - sh:order 53 ; - sh:path skos:relatedMatch ], - [ sh:class linkml:Element ; - sh:defaultValue "string"^^xsd:string ; - 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 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:AnonymousSlotExpression ; - sh:description "the value of the slot is multivalued with all members satisfying the condition" ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 24 ; - sh:path linkml:all_members ], + sh:order 34 ; + sh:path dcterms:title ], [ 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). @@ -5163,28 +5067,10 @@ Enum bindings allow enums to be bound to any object, including complex nested ob sh:order 3 ; sh:path linkml:bindings ], [ 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:nodeKind sh:Literal ; - sh:order 17 ; - sh:path linkml:equals_string_in ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 59 ; - sh:path pav:lastUpdatedOn ], - [ 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:BlankNodeOrIRI ; - sh:order 23 ; - sh:path linkml:has_member ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; - sh:maxCount 1 ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; sh:nodeKind sh:Literal ; - sh:order 44 ; - sh:path schema1:inLanguage ], + sh:order 37 ; + sh:path skos:editorialNote ], [ sh:class qudt:Unit ; sh:description "an encoding of a unit" ; sh:maxCount 1 ; @@ -5192,475 +5078,764 @@ Enum bindings allow enums to be bound to any object, including complex nested ob sh:order 13 ; sh:path qudt:unit ], [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:nodeKind sh:Literal ; - sh:order 37 ; - sh:path skos:editorialNote ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:nodeKind sh:IRI ; - sh:order 45 ; - sh:path rdfs:seeAlso ], - [ sh:description "For ordinal ranges, the value must be equal to or lower than this" ; + sh:description "the value of the slot must equal the value of the evaluated expression" ; sh:maxCount 1 ; - sh:order 10 ; - sh:path linkml:maximum_value ], + sh:nodeKind sh:Literal ; + sh:order 19 ; + sh:path linkml:equals_expression ], [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; - sh:maxCount 1 ; + 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:nodeKind sh:Literal ; - sh:order 42 ; - sh:path linkml:imported_from ], - [ sh:description "status of the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 61 ; - sh:path bibo:status ], - [ sh:description "id of the schema that defined the element" ; + sh:order 48 ; + sh:path skos:altLabel ], + [ sh:datatype xsd:string ; + sh:description "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 41 ; - sh:path skos:inScheme ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 33 ; - sh:path linkml:alt_descriptions ], + sh:nodeKind sh:Literal ; + sh:order 35 ; + sh:path linkml:deprecated ], [ 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:nodeKind sh:Literal ; sh:order 16 ; sh:path linkml:equals_string ], - [ sh:datatype xsd:string ; - sh:description "the string value of the slot must conform to this regular expression expressed in the string" ; + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 11 ; - sh:path linkml:pattern ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "holds if none of the expressions hold" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 25 ; - sh:path linkml:none_of ], - [ 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:nodeKind sh:IRI ; - sh:order 50 ; - sh:path skos:mappingRelation ], - [ 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:nodeKind sh:Literal ; - sh:order 6 ; - sh:path linkml:multivalued ], - [ sh:description "agent that contributed to the element" ; sh:nodeKind sh:IRI ; - sh:order 57 ; - sh:path dcterms:contributor ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "holds if all of the expressions hold" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 28 ; - sh:path linkml:all_of ], - [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:nodeKind sh:Literal ; - sh:order 64 ; - sh:path schema1:keywords ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:order 47 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ 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 54 ; - sh:path skos:narrowMatch ], + sh:order 40 ; + sh:path OIO:inSubset ], [ 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:BlankNodeOrIRI ; sh:order 12 ; sh:path linkml:structured_pattern ], - [ 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:class linkml:AnonymousSlotExpression ; + sh:description "holds if at least one of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 27 ; + sh:path linkml:any_of ], + [ 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:nodeKind sh:Literal ; - sh:order 18 ; - sh:path linkml:equals_number ], + sh:order 6 ; + sh:path linkml:multivalued ], + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 56 ; + sh:path pav:createdBy ], [ 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:description "true means that the slot must be present in instances of the class definition" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 8 ; - sh:path linkml:inlined_as_list ], + sh:order 4 ; + sh:path linkml:required ], + [ 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:nodeKind sh:Literal ; + sh:order 5 ; + sh:path linkml:recommended ], [ sh:datatype xsd:integer ; - sh:description "the exact 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:nodeKind sh:Literal ; - sh:order 20 ; - sh:path linkml:exact_cardinality ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 39 ; - sh:path linkml:examples ], + sh:order 62 ; + sh:path sh:order ], [ sh:class linkml:AnonymousSlotExpression ; - sh:description "holds if at least one of the expressions hold" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 27 ; - sh:path linkml:any_of ], - [ sh:class linkml:EnumExpression ; - sh:description "An inlined enumeration" ; - sh:maxCount 1 ; + sh:description "holds if none of the expressions hold" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 2 ; - sh:path linkml:enum_range ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 47 ; - sh:path linkml:deprecated_element_has_possible_replacement ], + sh:order 25 ; + sh:path linkml:none_of ], [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:description "the string value of the slot must conform to this regular expression expressed in the string" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 38 ; - sh:path skos:note ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 31 ; - sh:path linkml:annotations ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:nodeKind sh:IRI ; - sh:order 51 ; - 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:BlankNodeOrIRI ; - sh:order 49 ; - sh:path skosxl:altLabel ], + sh:order 11 ; + sh:path linkml:pattern ], [ sh:datatype xsd:dateTime ; sh:description "time at which the element was created" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 58 ; 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:nodeKind sh:Literal ; - sh:order 35 ; - sh:path linkml:deprecated ], [ sh:datatype xsd:integer ; - sh:description "the maximum number of entries for a multivalued slot" ; + 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:nodeKind sh:Literal ; - sh:order 22 ; - sh:path linkml:maximum_cardinality ], - [ 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:nodeKind sh:Literal ; - sh:order 48 ; - sh:path skos:altLabel ], - [ sh:datatype xsd:boolean ; - sh:description "true means that the slot must be present in instances of the class definition" ; + sh:order 18 ; + sh:path linkml:equals_number ], + [ 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:BlankNodeOrIRI ; + sh:order 29 ; + sh:path linkml:array ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path linkml:required ] ; - sh:targetClass linkml:AnonymousSlotExpression . - -linkml:AnonymousClassExpression a sh:NodeShape ; - sh:closed true ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ 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:description "Controlled terms used to categorize an element." ; - sh:nodeKind sh:IRI ; - sh:order 39 ; - sh:path dcterms:subject ], + sh:order 36 ; + 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:nodeKind sh:IRI ; - sh:order 26 ; + sh:order 50 ; sh:path skos:mappingRelation ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + [ sh:datatype xsd:integer ; + sh:description "the maximum number of entries for a multivalued slot" ; sh:maxCount 1 ; - sh:nodeKind sh:IRI ; + sh:nodeKind sh:Literal ; sh:order 22 ; - sh:path linkml:deprecated_element_has_exact_replacement ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:path linkml:maximum_cardinality ], + [ sh:class linkml:AnonymousSlotExpression ; + sh:description "holds if only one of the expressions hold" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 6 ; - sh:path linkml:extensions ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:order 26 ; + sh:path linkml:exactly_one_of ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:nodeKind sh:IRI ; + sh:order 52 ; + sh:path skos:closeMatch ], + [ sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 23 ; - sh:path linkml:deprecated_element_has_possible_replacement ], + sh:order 41 ; + sh:path skos:inScheme ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:nodeKind sh:IRI ; + sh:order 45 ; + sh:path rdfs:seeAlso ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 39 ; + sh:path linkml:examples ], [ sh:class linkml:AnonymousClassExpression ; - sh:description "holds if at least one of the expressions hold" ; + sh:description "A range that is described as a boolean expression combining existing ranges" ; + sh:maxCount 1 ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 1 ; - sh:path linkml:any_of ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:path linkml:range_expression ], + [ sh:class linkml:Element ; + sh:defaultValue "string"^^xsd:string ; + 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 27 ; - sh:path skos:exactMatch ], - [ 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:nodeKind sh:Literal ; - sh:order 24 ; - sh:path skos:altLabel ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "holds if none of the expressions hold" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 3 ; - sh:path linkml:none_of ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + sh:order 0 ; + sh:path linkml:range ], + [ 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:nodeKind sh:Literal ; - sh:order 20 ; - sh:path schema1:inLanguage ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:nodeKind sh:IRI ; - sh:order 28 ; - sh:path skos:closeMatch ], + sh:order 8 ; + sh:path linkml:inlined_as_list ], [ sh:class linkml:AltDescription ; sh:description "A sourced alternative description for an element" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 9 ; + sh:order 33 ; sh:path linkml:alt_descriptions ], - [ sh:description "A related resource from which the element is derived." ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 19 ; - sh:path dcterms:source ], [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; + sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 11 ; - sh:path linkml:deprecated ], - [ sh:description "id of the schema that defined the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 17 ; - sh:path skos:inScheme ], + sh:order 32 ; + sh:path skos:definition ], [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; sh:nodeKind sh:IRI ; - sh:order 29 ; + sh:order 53 ; sh:path skos:relatedMatch ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "holds if only one of the expressions hold" ; + [ sh:class linkml:EnumExpression ; + sh:description "An inlined enumeration" ; + sh:maxCount 1 ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 2 ; - sh:path linkml:exactly_one_of ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; + sh:path linkml:enum_range ], + [ sh:description "status of the element" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 35 ; - sh:path pav:lastUpdatedOn ], + sh:nodeKind sh:IRI ; + sh:order 61 ; + sh:path bibo:status ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:nodeKind sh:IRI ; + sh:order 54 ; + sh:path skos:narrowMatch ], [ sh:class skosxl:Label ; sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 25 ; + sh:order 49 ; sh:path skosxl:altLabel ], + [ sh:description "agent that contributed to the element" ; + sh:nodeKind sh:IRI ; + sh:order 57 ; + sh:path dcterms:contributor ], + [ sh:class linkml:AnonymousSlotExpression ; + sh:description "the value of the slot is multivalued with all members satisfying the condition" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 24 ; + sh:path linkml:all_members ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:nodeKind sh:IRI ; + sh:order 63 ; + sh:path dcterms:subject ], + [ sh:class linkml:AnonymousSlotExpression ; + sh:description "holds if all of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 28 ; + sh:path linkml:all_of ], [ sh:datatype xsd:string ; sh:description "notes and comments about an element intended primarily for external consumption" ; sh:nodeKind sh:Literal ; - sh:order 14 ; + sh:order 38 ; sh:path skos:note ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:nodeKind sh:Literal ; - sh:order 13 ; - sh:path skos:editorialNote ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "holds if all of the expressions hold" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 4 ; - sh:path linkml:all_of ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; + [ sh:description "agent that modified the element" ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 21 ; - sh:path rdfs:seeAlso ], + sh:order 60 ; + sh:path oslc:modifiedBy ], + [ sh:description "For ordinal ranges, the value must be equal to or lower than this" ; + sh:maxCount 1 ; + sh:order 10 ; + sh:path linkml:maximum_value ], [ 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 imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 10 ; - sh:path dcterms:title ], + sh:order 42 ; + sh:path linkml:imported_from ], [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; + sh:description "Causes the slot value to be interpreted as a uriorcurie after prefixing with this string" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 40 ; - sh:path schema1:keywords ], - [ 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:order 14 ; + sh:path linkml:implicit_prefix ], + [ 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:nodeKind sh:IRI ; - sh:order 0 ; - sh:path linkml:is_a ], - [ sh:description "agent that modified the element" ; + sh:nodeKind sh:Literal ; + sh:order 7 ; + sh:path linkml:inlined ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 59 ; + sh:path pav:lastUpdatedOn ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; sh:nodeKind sh:IRI ; - sh:order 36 ; - sh:path oslc:modifiedBy ], + sh:order 51 ; + sh:path skos:exactMatch ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 30 ; + sh:path linkml:extensions ], [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; + sh:description "the primary language used in the sources" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 12 ; - sh:path linkml:todos ], - [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:order 44 ; + sh:path schema1:inLanguage ], + [ sh:datatype xsd:integer ; + sh:description "the minimum number of entries for a multivalued slot" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 18 ; - sh:path linkml:imported_from ], - [ sh:class linkml:SlotDefinition ; - sh:description "expresses constraints on a group of slots for a class expression" ; + sh:order 21 ; + sh:path linkml:minimum_cardinality ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 5 ; - sh:path linkml:slot_conditions ], - [ sh:datatype xsd:string ; + sh:order 46 ; + sh:path linkml:deprecated_element_has_exact_replacement ] ; + sh:targetClass linkml:AnonymousSlotExpression . + +linkml:AnonymousClassExpression a sh:NodeShape ; + sh:closed true ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 8 ; 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:BlankNodeOrIRI ; - sh:order 7 ; - sh:path linkml:annotations ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; + [ sh:class linkml:AnonymousClassExpression ; + sh:description "holds if none of the expressions hold" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 15 ; - sh:path linkml:examples ], - [ sh:description "status of the element" ; + sh:order 3 ; + sh:path linkml:none_of ], + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 37 ; - sh:path bibo:status ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; + sh:order 36 ; + sh:path oslc:modifiedBy ], + [ 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 "Description of why and when this element will no longer be used" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 34 ; - sh:path pav:createdOn ], + sh:order 11 ; + sh:path linkml:deprecated ], [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; sh:nodeKind sh:IRI ; sh:order 31 ; sh:path skos:broadMatch ], - [ sh:description "agent that contributed to the element" ; - sh:nodeKind sh:IRI ; - sh:order 33 ; - sh:path dcterms:contributor ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:nodeKind sh:IRI ; - sh:order 30 ; - sh:path skos:narrowMatch ], - [ 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:nodeKind sh:Literal ; + sh:order 40 ; + sh:path schema1:keywords ], + [ sh:class linkml:AnonymousClassExpression ; + sh:description "holds if only one of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 2 ; + sh:path linkml:exactly_one_of ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 38 ; - sh:path sh:order ], + sh:order 34 ; + sh:path pav:createdOn ], [ sh:description "agent that created the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 32 ; - sh:path pav:createdBy ] ; - sh:targetClass linkml:AnonymousClassExpression . - -linkml:SlotDefinition a sh:NodeShape ; - rdfs:comment "an element that describes how instances are related to other instances" ; - sh:closed true ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ 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:path pav:createdBy ], + [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 22 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 40 ; - sh:path linkml:bindings ], - [ sh:datatype xsd:integer ; - sh:description "the relative order in which the element occurs, lower values are given precedence" ; + sh:order 9 ; + sh:path linkml:alt_descriptions ], + [ sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 114 ; - sh:path sh:order ], - [ 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:nodeKind sh:IRI ; + sh:order 17 ; + sh:path skos:inScheme ], + [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 18 ; - sh:path linkml:locally_reflexive ], - [ sh:datatype xsd:boolean ; - sh:description "If s is transitive, and i.s=z, and s.s=j, then i.s=j" ; + sh:nodeKind sh:IRI ; + sh:order 19 ; + sh:path dcterms:source ], + [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 21 ; - sh:path linkml:transitive ], + sh:order 20 ; + sh:path schema1:inLanguage ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:nodeKind sh:IRI ; + sh:order 28 ; + sh:path skos:closeMatch ], [ 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 "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:nodeKind sh:Literal ; - sh:order 74 ; - sh:path rdfs:label ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 91 ; - sh:path linkml:examples ], - [ sh:description "For ordinal ranges, the value must be equal to or lower than this" ; - sh:maxCount 1 ; - sh:order 47 ; - sh:path linkml:maximum_value ], - [ sh:datatype xsd:boolean ; - sh:description "If true then all direct is_a children are mutually disjoint and share no instances in common" ; + sh:order 10 ; + sh:path dcterms:title ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:nodeKind sh:IRI ; + sh:order 29 ; + sh:path skos:relatedMatch ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 34 ; - sh:path linkml:children_are_mutually_disjoint ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; sh:nodeKind sh:IRI ; - sh:order 104 ; - sh:path skos:closeMatch ], + sh:order 23 ; + sh:path linkml:deprecated_element_has_possible_replacement ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:nodeKind sh:Literal ; + sh:order 12 ; + sh:path linkml:todos ], [ sh:class linkml:Annotation ; sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 83 ; + sh:order 7 ; sh:path linkml:annotations ], - [ sh:datatype xsd:integer ; - sh:description "the minimum number of entries for a multivalued slot" ; - sh:maxCount 1 ; + [ 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:nodeKind sh:Literal ; - sh:order 58 ; - sh:path linkml:minimum_cardinality ], + sh:order 24 ; + sh:path skos:altLabel ], + [ sh:class linkml:AnonymousClassExpression ; + sh:description "holds if at least one of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 1 ; + sh:path linkml:any_of ], [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; sh:nodeKind sh:IRI ; - sh:order 106 ; + sh:order 30 ; sh:path skos:narrowMatch ], [ 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:order 16 ; sh:path OIO:inSubset ], - [ 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:description "status of the element" ; sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 37 ; + sh:path bibo:status ], + [ sh:class linkml:AnonymousClassExpression ; + sh:description "holds if all of the expressions hold" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 32 ; - sh:path linkml:path_rule ], + sh:order 4 ; + sh:path linkml:all_of ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:nodeKind sh:Literal ; + sh:order 14 ; + sh:path skos:note ], + [ 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:Literal ; + sh:order 38 ; + sh:path sh:order ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:nodeKind sh:IRI ; + sh:order 21 ; + sh:path rdfs:seeAlso ], + [ 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 "agent that contributed to the element" ; + sh:nodeKind sh:IRI ; + sh:order 33 ; + 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:nodeKind sh:Literal ; + sh:order 18 ; + sh:path linkml:imported_from ], + [ 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:nodeKind sh:IRI ; + sh:order 26 ; + sh:path skos:mappingRelation ], + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:nodeKind sh:Literal ; + sh:order 13 ; + sh:path skos:editorialNote ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:nodeKind sh:IRI ; + sh:order 27 ; + sh:path skos:exactMatch ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 35 ; + sh:path pav:lastUpdatedOn ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 6 ; + sh:path linkml:extensions ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 15 ; + sh:path linkml:examples ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 25 ; + sh:path skosxl:altLabel ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:nodeKind sh:IRI ; + sh:order 39 ; + sh:path dcterms:subject ] ; + sh:targetClass linkml:AnonymousClassExpression . + +linkml:SlotDefinition a sh:NodeShape ; + rdfs:comment "an element that describes how instances are related to other instances" ; + sh:closed true ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:nodeKind sh:Literal ; + sh:order 90 ; + sh:path skos:note ], + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 83 ; + sh:path linkml:annotations ], + [ sh:class linkml:AnonymousSlotExpression ; + sh:description "the value of the slot is multivalued with all members satisfying the condition" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 61 ; + sh:path linkml:all_members ], + [ sh:datatype xsd:string ; + sh:description "Description of why and when this element will no longer be used" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 87 ; + sh:path linkml:deprecated ], + [ 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:Literal ; + sh:order 114 ; + sh:path sh:order ], + [ sh:description "agent that created the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 108 ; + sh:path pav:createdBy ], + [ sh:description "agent that contributed to the element" ; + sh:nodeKind sh:IRI ; + sh:order 109 ; + sh:path dcterms:contributor ], + [ 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:nodeKind sh:IRI ; + sh:order 1 ; + sh:path linkml:domain ], [ sh:datatype xsd:boolean ; - sh:description "If s is reflexive, then i.s=i for all instances i" ; + 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:nodeKind sh:Literal ; - sh:order 17 ; - sh:path linkml:reflexive ], + sh:order 45 ; + sh:path linkml:inlined_as_list ], + [ sh:class linkml:AnonymousSlotExpression ; + sh:description "holds if only one of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 63 ; + sh:path linkml:exactly_one_of ], + [ 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:nodeKind sh:Literal ; + sh:order 68 ; + sh:path linkml:abstract ], + [ sh:datatype xsd:integer ; + sh:description "the maximum number of entries for a multivalued slot" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 59 ; + sh:path linkml:maximum_cardinality ], + [ 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 "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:nodeKind sh:IRI ; + sh:order 102 ; + sh:path skos:mappingRelation ], + [ sh:defaultValue "linkml:slot_uri"^^xsd:string ; + 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:nodeKind sh:IRI ; + sh:order 2 ; + sh:path linkml:slot_uri ], + [ 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:nodeKind sh:Literal ; + sh:order 86 ; + sh:path dcterms:title ], + [ 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:nodeKind sh:IRI ; + sh:order 22 ; + sh:path owl:inverseOf ], + [ 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:BlankNodeOrIRI ; + sh:order 60 ; + sh:path linkml:has_member ], + [ sh:class linkml:Element ; + sh:defaultValue "string"^^xsd:string ; + 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 37 ; + sh:path linkml:range ], + [ sh:datatype xsd:string ; + sh:description "the value of the slot must equal the value of the evaluated expression" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 56 ; + sh:path linkml:equals_expression ], + [ 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:nodeKind sh:Literal ; + sh:order 18 ; + sh:path linkml:locally_reflexive ], + [ 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 71 ; + sh:path linkml:apply_to ], + [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; + sh:nodeKind sh:IRI ; + sh:order 104 ; + sh:path skos:closeMatch ], + [ sh:description "A list of related entities or URLs that may be of relevance" ; + sh:nodeKind sh:IRI ; + sh:order 97 ; + sh:path rdfs:seeAlso ], + [ sh:datatype xsd:string ; + sh:description "An established standard to which the element conforms." ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 79 ; + sh:path dcterms:conformsTo ], + [ 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 33 ; + sh:path linkml:disjoint_with ], + [ sh:datatype xsd:string ; + sh:description "a name that is used in the singular form" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path linkml:singular_name ], + [ sh:class linkml:SlotDefinition ; + 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 30 ; + sh:path sh:group ], + [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 96 ; + sh:path schema1:inLanguage ], + [ 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:nodeKind sh:Literal ; + sh:order 11 ; + sh:path linkml:designates_type ], + [ 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:nodeKind sh:Literal ; + sh:order 7 ; + sh:path linkml:list_elements_ordered ], + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 84 ; + sh:path skos:definition ], + [ sh:datatype xsd:boolean ; + sh:description "true means that the slot must be present in instances of the class definition" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 41 ; + sh:path linkml:required ], + [ 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:nodeKind sh:IRI ; + sh:order 80 ; + sh:path linkml:implements ], + [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; + sh:nodeKind sh:IRI ; + sh:order 105 ; + sh:path skos:relatedMatch ], + [ 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 35 ; + sh:path linkml:union_of ], + [ 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:nodeKind sh:Literal ; + sh:order 74 ; + sh:path rdfs:label ], + [ sh:class linkml:AnonymousSlotExpression ; + sh:description "holds if all of the expressions hold" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 65 ; + sh:path linkml:all_of ], + [ 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:nodeKind sh:Literal ; + sh:order 75 ; + sh:path linkml:id_prefixes ], + [ sh:description "A related resource from which the element is derived." ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 95 ; + sh:path dcterms:source ], + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 91 ; + sh:path linkml:examples ], + [ sh:description "Controlled terms used to categorize an element." ; + sh:nodeKind sh:IRI ; + sh:order 115 ; + sh:path dcterms:subject ], + [ 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:nodeKind sh:Literal ; + sh:order 12 ; + sh:path skos:prefLabel ], + [ 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 29 ; + sh:path linkml:relational_role ], [ sh:datatype xsd:string ; sh:description """function that provides a default value for the slot. * [Tt]rue -- boolean True @@ -5680,676 +5855,534 @@ Enum bindings allow enums to be bound to any object, including complex nested ob sh:order 5 ; sh:path linkml:ifabsent ], [ 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:description "If present, slot is read only. Text explains why" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 75 ; - sh:path linkml:id_prefixes ], + sh:order 4 ; + sh:path linkml:readonly ], [ sh:datatype xsd:boolean ; - sh:description "If True, then there must be no duplicates in the elements of a multivalued slot" ; + sh:description "true means that the *value* of a slot is inherited by subclasses" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 6 ; - sh:path linkml:list_elements_unique ], + sh:order 3 ; + sh:path linkml:inherited ], [ 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:description "If s is reflexive, then i.s=i for all instances i" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 44 ; - sh:path linkml:inlined ], - [ sh:description "agent that contributed to the element" ; - sh:nodeKind sh:IRI ; - sh:order 109 ; - sh:path dcterms:contributor ], - [ sh:class linkml:PatternExpression ; - sh:description "the string value of the slot must conform to the regular expression in the pattern expression" ; + sh:order 17 ; + sh:path linkml:reflexive ], + [ sh:datatype xsd:boolean ; + sh:description "True means that the slot is the \"singular unique key\" (also known more simply as the \"key slot\") of its class. Such a slot uniquely identifies instances of the class within a single container, meaning there cannot be two (or more) instances of the class (or instances of any of its descendants) with the same value for the key slot within the container." ; sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 49 ; - sh:path linkml:structured_pattern ], - [ sh:datatype xsd:string ; - sh:description "a name that is used in the singular form" ; + sh:nodeKind sh:Literal ; + sh:order 9 ; + sh:path linkml:key ], + [ sh:datatype xsd:boolean ; + sh:description "If s is symmetric, and i.s=v, then v.s=i" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path linkml:singular_name ], + sh:order 16 ; + sh:path linkml:symmetric ], [ 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: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:nodeKind sh:Literal ; - sh:order 53 ; - sh:path linkml:equals_string ], + sh:order 100 ; + 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:nodeKind sh:IRI ; + sh:order 72 ; + sh:path linkml:values_from ], + [ 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 70 ; + sh:path linkml:mixins ], [ 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:BlankNodeOrIRI ; sh:order 36 ; sh:path linkml:type_mappings ], - [ sh:datatype xsd:string ; - sh:description "The name of the slot referenced in the slot_usage" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 28 ; - sh:path linkml:usage_slot_name ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 101 ; - sh:path skosxl:altLabel ], - [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:order 82 ; + 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 92 ; + sh:path OIO:inSubset ], + [ sh:description "agent that modified the element" ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 94 ; - sh:path linkml:imported_from ], - [ sh:class linkml:LocalName ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 78 ; - sh:path linkml:local_names ], + sh:nodeKind sh:IRI ; + sh:order 112 ; + sh:path oslc:modifiedBy ], [ 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:nodeKind sh:Literal ; sh:order 8 ; sh:path linkml:shared ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:nodeKind sh:IRI ; - sh:order 103 ; - sh:path skos:exactMatch ], - [ sh:class linkml:AnonymousClassExpression ; - sh:description "A range that is described as a boolean expression combining existing ranges" ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 38 ; - sh:path linkml:range_expression ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 98 ; - 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:nodeKind sh:IRI ; - sh:order 99 ; - sh:path linkml:deprecated_element_has_possible_replacement ], - [ 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:nodeKind sh:Literal ; - sh:order 54 ; - sh:path linkml:equals_string_in ], - [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; - sh:nodeKind sh:IRI ; - sh:order 105 ; - sh:path skos:relatedMatch ], - [ 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 70 ; - sh:path linkml:mixins ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 85 ; - sh:path linkml:alt_descriptions ], - [ sh:class linkml:ClassDefinition ; - sh:description "the class(es) that reference the slot in a \"slots\" or \"slot_usage\" context" ; + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; sh:nodeKind sh:IRI ; - sh:order 14 ; - sh:path linkml:domain_of ], - [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; - sh:nodeKind sh:Literal ; - sh:order 88 ; - sh:path linkml:todos ], - [ sh:datatype xsd:boolean ; - sh:description "true means that the slot must be present in instances of the class definition" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 41 ; - sh:path linkml:required ], + sh:order 106 ; + sh:path skos:narrowMatch ], [ 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) GENERATE: 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:nodeKind sh:Literal ; - sh:order 73 ; - sh:path linkml:string_serialization ], - [ 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:nodeKind sh:Literal ; - sh:order 7 ; - sh:path linkml:list_elements_ordered ], - [ 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:description "Causes the slot value to be interpreted as a uriorcurie after prefixing with this string" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 11 ; - sh:path linkml:designates_type ], - [ sh:class linkml:Element ; - sh:defaultValue "string"^^xsd:string ; - 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 37 ; - sh:path linkml:range ], + sh:order 51 ; + sh:path linkml:implicit_prefix ], [ 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 15 ; sh:path rdfs:subPropertyOf ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "holds if none of the expressions hold" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 62 ; - sh:path linkml:none_of ], - [ 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:nodeKind sh:Literal ; - sh:order 43 ; - sh:path linkml:multivalued ], - [ 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 "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:Literal ; - sh:order 42 ; - sh:path linkml:recommended ], + sh:nodeKind sh:IRI ; + sh:order 77 ; + sh:path linkml:definition_uri ], [ sh:datatype xsd:string ; - sh:description "If present, slot is read only. Text explains why" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 4 ; - sh:path linkml:readonly ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; - sh:maxCount 1 ; + sh:description "Keywords or tags used to describe the element" ; sh:nodeKind sh:Literal ; - sh:order 110 ; - sh:path pav:createdOn ], - [ sh:datatype xsd:string ; - sh:description "the value of the slot must equal the value of the evaluated expression" ; + sh:order 116 ; + sh:path schema1:keywords ], + [ 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:nodeKind sh:Literal ; - sh:order 56 ; - sh:path linkml:equals_expression ], - [ 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 71 ; - sh:path linkml:apply_to ], - [ sh:class linkml:SlotDefinition ; - sh:description "A primary parent slot from which inheritable metaslots are propagated" ; + sh:order 20 ; + sh:path linkml:asymmetric ], + [ 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 67 ; - sh:path linkml:is_a ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 82 ; - sh:path linkml:extensions ], - [ 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:nodeKind sh:Literal ; - sh:order 100 ; - sh:path skos:altLabel ], - [ 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:order 13 ; + sh:path linkml:owner ], + [ sh:class qudt:Unit ; + sh:description "an encoding of a unit" ; sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 24 ; - sh:path linkml:transitive_form_of ], + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 50 ; + sh:path qudt:unit ], [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; + 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) GENERATE: 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:nodeKind sh:Literal ; - sh:order 84 ; - sh:path skos:definition ], - [ 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 33 ; - sh:path linkml:disjoint_with ], - [ 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:nodeKind sh:IRI ; - sh:order 72 ; - sh:path linkml:values_from ], + sh:order 73 ; + sh:path linkml:string_serialization ], [ sh:class linkml:AnonymousSlotExpression ; - sh:description "holds if all of the expressions hold" ; + sh:description "holds if none of the expressions hold" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 65 ; - sh:path linkml:all_of ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; + sh:order 62 ; + sh:path linkml:none_of ], + [ sh:description "For ordinal ranges, the value must be equal to or lower than this" ; + sh:maxCount 1 ; + sh:order 47 ; + sh:path linkml:maximum_value ], + [ 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:Literal ; - sh:order 96 ; - sh:path schema1:inLanguage ], + sh:order 69 ; + sh:path linkml:mixin ], [ 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:BlankNodeOrIRI ; - sh:order 63 ; - sh:path linkml:exactly_one_of ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "the value of the slot is multivalued with all members satisfying the condition" ; + sh:order 64 ; + sh:path linkml:any_of ], + [ sh:class linkml:EnumExpression ; + sh:description "An inlined enumeration" ; sh:maxCount 1 ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 61 ; - sh:path linkml:all_members ], - [ sh:defaultValue "linkml:slot_uri"^^xsd:string ; - 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:nodeKind sh:IRI ; - sh:order 2 ; - sh:path linkml:slot_uri ], - [ sh:datatype xsd:integer ; - sh:description "the maximum number of entries for a multivalued slot" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 59 ; - sh:path linkml:maximum_cardinality ], + sh:order 39 ; + sh:path linkml:enum_range ], [ sh:datatype xsd:boolean ; sh:description "True means that this slot was defined in a slot_usage situation" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 27 ; sh:path linkml:is_usage_slot ], - [ sh:description "status of the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 113 ; - sh:path bibo:status ], - [ sh:description "Controlled terms used to categorize an element." ; - sh:nodeKind sh:IRI ; - sh:order 115 ; - sh:path dcterms:subject ], - [ 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:nodeKind sh:IRI ; - sh:order 102 ; - sh:path skos:mappingRelation ], - [ 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:Literal ; - sh:order 69 ; - sh:path linkml:mixin ], [ 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 52 ; sh:path linkml:value_presence ], - [ sh:description "id of the schema that defined the element" ; + [ 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:nodeKind sh:IRI ; - sh:order 93 ; - sh:path skos:inScheme ], - [ sh:datatype xsd:string ; - sh:description "the string value of the slot must conform to this regular expression expressed in the string" ; + sh:nodeKind sh:Literal ; + sh:order 44 ; + sh:path linkml:inlined ], + [ sh:datatype xsd:integer ; + sh:description "the exact number of entries for a multivalued slot" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 48 ; - sh:path linkml:pattern ], + sh:order 57 ; + sh:path linkml:exact_cardinality ], + [ 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:nodeKind sh:Literal ; + sh:order 42 ; + sh:path linkml:recommended ], [ sh:datatype xsd:string ; sh:description "a textual descriptor that indicates the role played by the slot range" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 26 ; sh:path linkml:role ], - [ 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:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 22 ; - sh:path owl:inverseOf ], - [ sh:description "An element in another schema which this element instantiates." ; - sh:nodeKind sh:IRI ; - sh:order 81 ; - sh:path linkml:instantiates ], - [ 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 98 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:datatype xsd:boolean ; + sh:description "True means that the slot is the identifier slot of its class. Such a slot uniquely identifies instances of the class throughout an entire document, meaning there cannot be two (or more) instances of the class (or instances of any of its descendants) with the same value for the identifier slot anywhere in the document." ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 12 ; - sh:path skos:prefLabel ], - [ 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:order 10 ; + sh:path linkml:identifier ], + [ sh:class linkml:LocalName ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 60 ; - sh:path linkml:has_member ], + sh:order 78 ; + sh:path linkml:local_names ], [ sh:datatype xsd:boolean ; - sh:description "true means that the *value* of a slot is inherited by subclasses" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 3 ; - sh:path linkml:inherited ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; + 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:nodeKind sh:Literal ; - sh:order 111 ; - sh:path pav:lastUpdatedOn ], - [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:nodeKind sh:Literal ; - sh:order 116 ; - sh:path schema1:keywords ], - [ sh:datatype xsd:string ; - sh:description "An established standard to which the element conforms." ; + sh:order 43 ; + sh:path linkml:multivalued ], + [ 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:Literal ; - sh:order 79 ; - sh:path dcterms:conformsTo ], + sh:order 76 ; + sh:path linkml:id_prefixes_are_closed ], [ sh:datatype xsd:boolean ; - sh:description "If s is symmetric, and i.s=v, then v.s=i" ; + sh:description "true if this slot is a grouping slot" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 16 ; - sh:path linkml:symmetric ], - [ 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:IRI ; - sh:order 77 ; - sh:path linkml:definition_uri ], + sh:order 31 ; + sh:path linkml:is_grouping_slot ], [ sh:description "For ordinal ranges, the value must be equal to or higher than this" ; sh:maxCount 1 ; sh:order 46 ; sh:path linkml:minimum_value ], - [ 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 29 ; - sh:path linkml:relational_role ], - [ 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: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:nodeKind sh:Literal ; + sh:order 55 ; + sh:path linkml:equals_number ], + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; + sh:nodeKind sh:Literal ; + sh:order 88 ; + sh:path linkml:todos ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; sh:nodeKind sh:IRI ; - sh:order 13 ; - sh:path linkml:owner ], + sh:order 103 ; + sh:path skos:exactMatch ], + [ sh:datatype xsd:string ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:nodeKind sh:Literal ; + sh:order 89 ; + sh:path skos:editorialNote ], + [ sh:datatype xsd:string ; + sh:description "The name of the slot referenced in the slot_usage" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 28 ; + sh:path linkml:usage_slot_name ], + [ 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:BlankNodeOrIRI ; + sh:order 49 ; + sh:path linkml:structured_pattern ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 85 ; + sh:path linkml:alt_descriptions ], + [ 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:BlankNodeOrIRI ; + sh:order 32 ; + sh:path linkml:path_rule ], [ 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:BlankNodeOrIRI ; sh:order 66 ; sh:path linkml:array ], - [ sh:class qudt:Unit ; - sh:description "an encoding of a unit" ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 50 ; - sh:path qudt:unit ], - [ 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:nodeKind sh:Literal ; - sh:order 20 ; - sh:path linkml:asymmetric ], - [ sh:datatype xsd:boolean ; - sh:description "true if this slot is a grouping slot" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 31 ; - sh:path linkml:is_grouping_slot ], - [ sh:class linkml:SlotDefinition ; - sh:description "transitive_form_of including the reflexive case" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 25 ; - sh:path linkml:reflexive_transitive_form_of ], - [ 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 35 ; - sh:path linkml:union_of ], - [ 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:nodeKind sh:Literal ; - sh:order 9 ; - sh:path linkml:key ], - [ 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:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 86 ; - sh:path dcterms:title ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; - sh:nodeKind sh:Literal ; - sh:order 90 ; - sh:path skos:note ], - [ sh:description "A list of related entities or URLs that may be of relevance" ; - sh:nodeKind sh:IRI ; - sh:order 97 ; - sh:path rdfs:seeAlso ], - [ sh:datatype xsd:boolean ; - sh:description "If s is irreflexive, then there exists no i such i.s=i" ; + sh:order 110 ; + sh:path pav:createdOn ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 19 ; - sh:path linkml:irreflexive ], + sh:order 111 ; + sh:path pav:lastUpdatedOn ], [ 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:description "If true then all direct is_a children are mutually disjoint and share no instances in common" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 23 ; - sh:path linkml:is_class_field ], - [ sh:class linkml:AnonymousSlotExpression ; - sh:description "holds if at least one of the expressions hold" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 64 ; - sh:path linkml:any_of ], - [ sh:description "agent that created the element" ; + sh:order 34 ; + sh:path linkml:children_are_mutually_disjoint ], + [ sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 108 ; - sh:path pav:createdBy ], - [ 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:order 93 ; + sh:path skos:inScheme ], + [ sh:description "status of the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 1 ; - sh:path linkml:domain ], + sh:order 113 ; + sh:path bibo:status ], [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; - sh:maxCount 1 ; + sh:description "the slot must have range string and the value of the slot must equal one of the specified values" ; sh:nodeKind sh:Literal ; - sh:order 87 ; - sh:path linkml:deprecated ], - [ 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 54 ; + sh:path linkml:equals_string_in ], + [ sh:datatype xsd:string ; + sh:description "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 76 ; - sh:path linkml:id_prefixes_are_closed ], - [ sh:description "A related resource from which the element is derived." ; - sh:maxCount 1 ; + sh:order 94 ; + sh:path linkml:imported_from ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; sh:nodeKind sh:IRI ; - sh:order 95 ; - sh:path dcterms:source ], - [ sh:class linkml:EnumExpression ; - sh:description "An inlined enumeration" ; - sh:maxCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 39 ; - sh:path linkml:enum_range ], + sh:order 107 ; + sh:path skos:broadMatch ], + [ 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 14 ; + sh:path linkml:domain_of ], [ sh:class linkml:SlotDefinition ; - sh:description "allows for grouping of related slots into a grouping slot that serves the role of a group" ; + sh:description "transitive_form_of including the reflexive case" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 30 ; - sh:path sh:group ], + sh:order 25 ; + sh:path linkml:reflexive_transitive_form_of ], + [ sh:class linkml:AnonymousClassExpression ; + sh:description "A range that is described as a boolean expression combining existing ranges" ; + sh:maxCount 1 ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 38 ; + sh:path linkml:range_expression ], [ 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 minimum number of entries for a multivalued slot" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 55 ; - sh:path linkml:equals_number ], - [ 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:nodeKind sh:IRI ; - sh:order 80 ; - sh:path linkml:implements ], + sh:order 58 ; + sh:path linkml:minimum_cardinality ], [ 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:description "If s is transitive, and i.s=z, and s.s=j, then i.s=j" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 45 ; - sh:path linkml:inlined_as_list ], + sh:order 21 ; + sh:path linkml:transitive ], + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 99 ; + sh:path linkml:deprecated_element_has_possible_replacement ], [ sh:datatype xsd:boolean ; - sh:description "Indicates the class or slot cannot be directly instantiated and is intended for grouping purposes." ; + sh:description "If True, then there must be no duplicates in the elements of a multivalued slot" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 68 ; - sh:path linkml:abstract ], + sh:order 6 ; + sh:path linkml:list_elements_unique ], + [ 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:BlankNodeOrIRI ; + sh:order 40 ; + sh:path linkml:bindings ], + [ sh:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 101 ; + sh:path skosxl:altLabel ], + [ sh:description "An element in another schema which this element instantiates." ; + sh:nodeKind sh:IRI ; + sh:order 81 ; + sh:path linkml:instantiates ], + [ 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 24 ; + sh:path linkml:transitive_form_of ], [ sh:datatype xsd:string ; - sh:description "Causes the slot value to be interpreted as a uriorcurie after prefixing with this string" ; + sh:description "the string value of the slot must conform to this regular expression expressed in the string" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 51 ; - sh:path linkml:implicit_prefix ], + sh:order 48 ; + sh:path linkml:pattern ], [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; + sh:description "the slot must have range string and the value of the slot must equal the specified value" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 89 ; - sh:path skos:editorialNote ], + sh:order 53 ; + 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:description "indicates that for any instance, i, the domain of this slot will include an assertion of i s range" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 10 ; - sh:path linkml:identifier ], - [ sh:description "agent that modified the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 112 ; - sh:path oslc:modifiedBy ], - [ sh:datatype xsd:integer ; - sh:description "the exact number of entries for a multivalued slot" ; + sh:order 23 ; + sh:path linkml:is_class_field ], + [ sh:datatype xsd:boolean ; + sh:description "If s is irreflexive, then there exists no i such i.s=i" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 57 ; - sh:path linkml:exact_cardinality ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:nodeKind sh:IRI ; - sh:order 107 ; - sh:path skos:broadMatch ] ; + sh:order 19 ; + sh:path linkml:irreflexive ] ; sh:targetClass linkml:SlotDefinition . skosxl:Label a sh:NodeShape ; rdfs:comment "object that contains meta data about a synonym or alias including where it came from (source) and its scope (narrow, broad, etc.)" ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "id of the schema that defined the element" ; + sh:property [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + 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:nodeKind sh:IRI ; + sh:order 26 ; + sh:path skos:closeMatch ], + [ 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:nodeKind sh:Literal ; + sh:order 22 ; + sh:path skos:altLabel ], + [ sh:description "agent that contributed to the element" ; + sh:nodeKind sh:IRI ; + sh:order 31 ; + sh:path dcterms:contributor ], + [ sh:datatype xsd:string ; + sh:description "The literal lexical form of a structured alias; i.e the actual alias value." ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path skosxl:literalForm ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 32 ; + sh:path pav:createdOn ], + [ 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:nodeKind sh:IRI ; - sh:order 15 ; - 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:BlankNodeOrIRI ; - sh:order 5 ; - sh:path linkml:annotations ], + sh:order 24 ; + 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 14 ; sh:path OIO:inSubset ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 13 ; - sh:path linkml:examples ], - [ sh:description "The relationship between an element and its alias." ; - sh:in ( skos:exactMatch skos:relatedMatch skos:broaderMatch skos:narrowerMatch ) ; + [ sh:datatype xsd:string ; + sh:description "the primary language used in the sources" ; sh:maxCount 1 ; - sh:order 1 ; - sh:path rdf:predicate ], + sh:nodeKind sh:Literal ; + sh:order 18 ; + sh:path schema1:inLanguage ], + [ sh:description "agent that modified the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 34 ; + 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:nodeKind sh:IRI ; + sh:order 21 ; + 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:nodeKind sh:IRI ; + sh:order 27 ; + sh:path skos:relatedMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:nodeKind sh:IRI ; + sh:order 29 ; + sh:path skos:broadMatch ], [ sh:description "The category or categories of an alias. This can be drawn from any relevant vocabulary" ; sh:nodeKind sh:IRI ; sh:order 2 ; sh:path dcterms:subject ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; + [ sh:class linkml:Annotation ; + sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 7 ; - sh:path linkml:alt_descriptions ], + sh:order 5 ; + sh:path linkml:annotations ], [ sh:class linkml:Extension ; sh:description "a tag/text tuple attached to an arbitrary element" ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 4 ; sh:path linkml:extensions ], - [ sh:description "A related resource from which the element is derived." ; - sh:maxCount 1 ; + [ sh:class linkml:Example ; + sh:description "example usages of an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 13 ; + sh:path linkml:examples ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; sh:nodeKind sh:IRI ; - sh:order 17 ; - sh:path dcterms:source ], + sh:order 28 ; + 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:nodeKind sh:IRI ; sh:order 20 ; sh:path linkml:deprecated_element_has_exact_replacement ], [ sh:datatype xsd:string ; - sh:description "Description of why and when this element will no longer be used" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 9 ; - sh:path linkml:deprecated ], - [ 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:nodeKind sh:Literal ; - sh:order 6 ; - sh:path skos:definition ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; - sh:nodeKind sh:IRI ; - sh:order 25 ; - sh:path skos:exactMatch ], - [ sh:description "agent that modified the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 34 ; - sh:path oslc:modifiedBy ], + sh:order 16 ; + sh:path linkml:imported_from ], [ sh:datatype xsd:string ; sh:description "editorial notes about an element intended primarily for internal consumption" ; sh:nodeKind sh:Literal ; sh:order 11 ; sh:path skos:editorialNote ], - [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; - sh:nodeKind sh:IRI ; - sh:order 26 ; - sh:path skos:closeMatch ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; - sh:maxCount 1 ; + [ sh:datatype xsd:string ; + sh:description "Outstanding issues that needs resolution" ; sh:nodeKind sh:Literal ; - sh:order 32 ; - sh:path pav:createdOn ], + sh:order 10 ; + sh:path linkml:todos ], [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; + sh:description "Keywords or tags used to describe the element" ; + sh:nodeKind sh:Literal ; + sh:order 37 ; + sh:path schema1:keywords ], + [ sh:datatype xsd:string ; + sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:nodeKind sh:Literal ; + sh:order 12 ; + 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:nodeKind sh:Literal ; - sh:order 16 ; - sh:path linkml:imported_from ], + sh:order 8 ; + sh:path dcterms:title ], [ sh:description "agent that created the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; @@ -6360,95 +6393,62 @@ skosxl:Label a sh:NodeShape ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 23 ; sh:path skosxl:altLabel ], - [ sh:description "agent that contributed to the element" ; - sh:nodeKind sh:IRI ; - sh:order 31 ; - sh:path dcterms:contributor ], [ sh:description "A list of related entities or URLs that may be of relevance" ; sh:nodeKind sh:IRI ; sh:order 19 ; sh:path rdfs:seeAlso ], - [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 18 ; - sh:path schema1:inLanguage ], - [ sh:description "The context in which an alias should be applied" ; - sh:nodeKind sh:IRI ; - sh:order 3 ; - sh:path linkml:alias_contexts ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + [ sh:description "id of the schema that defined the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 21 ; - 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:nodeKind sh:IRI ; - sh:order 27 ; - sh:path skos:relatedMatch ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; + sh:order 15 ; + 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:nodeKind sh:Literal ; - sh:order 33 ; - sh:path pav:lastUpdatedOn ], + sh:order 9 ; + sh:path linkml:deprecated ], [ sh:datatype xsd:string ; - sh:description "Outstanding issues that needs resolution" ; + sh:description "a textual description of the element's purpose and use" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 10 ; - sh:path linkml:todos ], - [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; - sh:nodeKind sh:IRI ; - sh:order 29 ; - sh:path skos:broadMatch ], - [ 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:nodeKind sh:IRI ; - sh:order 24 ; - sh:path skos:mappingRelation ], + sh:order 6 ; + sh:path skos:definition ], [ sh:description "status of the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 35 ; sh:path bibo:status ], - [ 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:nodeKind sh:Literal ; - sh:order 22 ; - 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:nodeKind sh:Literal ; - sh:order 8 ; - sh:path dcterms:title ], - [ sh:datatype xsd:string ; - sh:description "The literal lexical form of a structured alias; i.e the actual alias value." ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path skosxl:literalForm ], [ 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:Literal ; sh:order 36 ; sh:path sh:order ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:nodeKind sh:IRI ; - sh:order 28 ; - sh:path skos:narrowMatch ], - [ sh:datatype xsd:string ; - sh:description "Keywords or tags used to describe the element" ; - sh:nodeKind sh:Literal ; - sh:order 37 ; - sh:path schema1:keywords ], - [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; + sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 12 ; - sh:path skos:note ] ; + sh:order 33 ; + sh:path pav:lastUpdatedOn ], + [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:nodeKind sh:IRI ; + sh:order 25 ; + sh:path skos:exactMatch ], + [ sh:description "The context in which an alias should be applied" ; + sh:nodeKind sh:IRI ; + sh:order 3 ; + sh:path linkml:alias_contexts ], + [ 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 "A related resource from which the element is derived." ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 17 ; + sh:path dcterms:source ] ; sh:targetClass skosxl:Label . linkml:AltDescription a sh:NodeShape ; @@ -6456,26 +6456,32 @@ linkml:AltDescription a sh:NodeShape ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; sh:property [ 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:nodeKind sh:Literal ; - sh:order 1 ; - sh:path linkml:alt_description_text ], + sh:order 0 ; + sh:path linkml:alt_description_source ], [ 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:nodeKind sh:Literal ; - sh:order 0 ; - sh:path linkml:alt_description_source ] ; + sh:order 1 ; + sh:path linkml:alt_description_text ] ; sh:targetClass linkml:AltDescription . linkml:Example a sh:NodeShape ; rdfs:comment "usage example and description" ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "direct object representation of the example" ; + sh:property [ sh:datatype xsd:string ; + sh:description "example value" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path skos:example ], + [ sh:description "direct object representation of the example" ; sh:maxCount 1 ; sh:order 2 ; sh:path linkml:value_object ], @@ -6484,224 +6490,179 @@ linkml:Example a sh:NodeShape ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; sh:order 1 ; - sh:path linkml:value_description ], - [ sh:datatype xsd:string ; - sh:description "example value" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path skos:example ] ; + sh:path linkml:value_description ] ; sh:targetClass linkml:Example . linkml:Annotation a sh:NodeShape ; rdfs:comment "a tag/value pair with the semantics of OWL Annotation" ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "a tag associated with an extension" ; + sh:property [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 3 ; + sh:path linkml:extensions ], + [ sh:description "a tag associated with an extension" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:IRI ; sh:order 1 ; sh:path linkml:extension_tag ], - [ sh:description "the actual annotation" ; - sh:maxCount 1 ; - sh:minCount 1 ; - 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:BlankNodeOrIRI ; sh:order 0 ; sh:path linkml:annotations ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 3 ; - sh:path linkml:extensions ] ; + [ sh:description "the actual annotation" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 2 ; + sh:path linkml:extension_value ] ; sh:targetClass linkml:Annotation . linkml:SubsetDefinition a sh:NodeShape ; rdfs:comment "an element that can be used to group other metamodel elements" ; sh:closed true ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "the primary language used in the sources" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 22 ; - sh:path schema1:inLanguage ], - [ sh:description "agent that modified the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 38 ; - sh:path oslc:modifiedBy ], - [ sh:datatype xsd:string ; - sh:description "a textual description of the element's purpose and use" ; - sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 10 ; - sh:path skos:definition ], - [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; - sh:nodeKind sh:IRI ; - sh:order 32 ; - sh:path skos:narrowMatch ], - [ sh:description "A related resource from which the element is derived." ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 21 ; - sh:path dcterms:source ], - [ sh:description "An element in another schema which this element instantiates." ; - sh:nodeKind sh:IRI ; - sh:order 7 ; - sh:path linkml:instantiates ], - [ sh:datatype xsd:string ; - sh:description "editorial notes about an element intended primarily for internal consumption" ; - sh:nodeKind sh:Literal ; - sh:order 15 ; - sh:path skos:editorialNote ], - [ 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 broader meaning." ; - sh:nodeKind sh:IRI ; - sh:order 33 ; - sh:path skos:broadMatch ], - [ sh:description "id of the schema that defined the element" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 19 ; - sh:path skos:inScheme ], - [ sh:description "agent that created the element" ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:description "agent that modified the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 34 ; - sh:path pav:createdBy ], - [ sh:description "agent that contributed to the element" ; + sh:order 38 ; + sh:path oslc:modifiedBy ], + [ sh:description "Controlled terms used to categorize an element." ; sh:nodeKind sh:IRI ; - sh:order 35 ; - sh:path dcterms:contributor ], - [ sh:class skosxl:Label ; - sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 27 ; - sh:path skosxl:altLabel ], + sh:order 41 ; + 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:nodeKind sh:Literal ; + sh:order 26 ; + sh:path skos:altLabel ], [ sh:datatype xsd:string ; sh:description "Keywords or tags used to describe the element" ; sh:nodeKind sh:Literal ; sh:order 42 ; sh:path schema1:keywords ], - [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 25 ; - sh:path linkml:deprecated_element_has_possible_replacement ], - [ sh:description "status of the element" ; + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was last updated" ; sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 39 ; - sh:path bibo:status ], + sh:nodeKind sh:Literal ; + sh:order 37 ; + sh:path pav:lastUpdatedOn ], [ sh:description "A list of terms from different schemas or terminology systems that have related meaning." ; sh:nodeKind sh:IRI ; sh:order 31 ; sh:path skos:relatedMatch ], + [ sh:description "A list of terms from different schemas or terminology systems that have broader meaning." ; + sh:nodeKind sh:IRI ; + sh:order 33 ; + sh:path skos:broadMatch ], [ 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 "the imports entry that this element was derived from. Empty means primary source" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 0 ; - sh:path rdfs:label ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was created" ; + 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:nodeKind sh:IRI ; + sh:order 29 ; + sh:path skos:exactMatch ], + [ 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:BlankNodeOrIRI ; + sh:order 17 ; + 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:nodeKind sh:Literal ; - sh:order 36 ; - sh:path pav:createdOn ], + sh:nodeKind sh:IRI ; + sh:order 24 ; + sh:path linkml:deprecated_element_has_exact_replacement ], + [ sh:class linkml:LocalName ; + sh:nodeKind sh:BlankNodeOrIRI ; + 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:maxCount 1 ; + sh:description "notes and comments about an element intended primarily for external consumption" ; sh:nodeKind sh:Literal ; - sh:order 13 ; - sh:path linkml:deprecated ], + sh:order 16 ; + sh:path skos:note ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 8 ; + sh:path linkml:extensions ], + [ sh:description "An element in another schema which this element instantiates." ; + sh:nodeKind sh:IRI ; + sh:order 7 ; + sh:path linkml:instantiates ], [ 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 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:nodeKind sh:Literal ; - sh:order 12 ; - sh:path dcterms:title ], - [ sh:datatype xsd:dateTime ; - sh:description "time at which the element was last updated" ; + sh:order 0 ; + sh:path rdfs:label ], + [ sh:description "A related resource from which the element is derived." ; sh:maxCount 1 ; - sh:nodeKind sh:Literal ; - sh:order 37 ; - sh:path pav:lastUpdatedOn ], - [ 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:nodeKind sh:IRI ; - sh:order 6 ; - sh:path linkml:implements ], + sh:order 21 ; + sh:path dcterms:source ], [ 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:IRI ; sh:order 3 ; sh:path linkml:definition_uri ], - [ sh:class linkml:AltDescription ; - sh:description "A sourced alternative description for an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 11 ; - sh:path linkml:alt_descriptions ], - [ 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:nodeKind sh:IRI ; - sh:order 28 ; - sh:path skos:mappingRelation ], - [ sh:class linkml:Annotation ; - sh:description "a collection of tag/text tuples with the semantics of OWL Annotation" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 9 ; - sh:path linkml:annotations ], - [ sh:description "Controlled terms used to categorize an element." ; + [ sh:description "When an element is deprecated, it can be potentially replaced by this uri or curie" ; + sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 41 ; - sh:path dcterms:subject ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 8 ; - sh:path linkml:extensions ], - [ sh:class linkml:Example ; - sh:description "example usages of an element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 17 ; - sh:path linkml:examples ], + sh:order 25 ; + 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:nodeKind sh:Literal ; + sh:order 22 ; + sh:path schema1:inLanguage ], [ sh:description "A list of related entities or URLs that may be of relevance" ; sh:nodeKind sh:IRI ; sh:order 23 ; sh:path rdfs:seeAlso ], - [ sh:class linkml:LocalName ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 4 ; - 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: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:Literal ; - sh:order 40 ; - sh:path sh:order ], + sh:order 2 ; + sh:path linkml:id_prefixes_are_closed ], [ sh:datatype xsd:string ; - sh:description "the imports entry that this element was derived from. Empty means primary source" ; + 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:nodeKind sh:Literal ; - sh:order 20 ; - sh:path linkml:imported_from ], + sh:order 12 ; + sh:path dcterms:title ], [ sh:description "A list of terms from different schemas or terminology systems that have close meaning." ; sh:nodeKind sh:IRI ; sh:order 30 ; sh:path skos:closeMatch ], - [ 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:description "status of the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + 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:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 26 ; - sh:path skos:altLabel ], + sh:order 40 ; + sh:path sh:order ], + [ sh:description "id of the schema that defined the element" ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 19 ; + sh:path skos:inScheme ], [ sh:datatype xsd:string ; sh:description "Outstanding issues that needs resolution" ; sh:nodeKind sh:Literal ; @@ -6712,26 +6673,65 @@ linkml:SubsetDefinition a sh:NodeShape ; sh:nodeKind sh:Literal ; 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:class skosxl:Label ; + sh:description "A list of structured_alias objects, used to provide aliases in conjunction with additional metadata." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 27 ; + 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:BlankNodeOrIRI ; + sh:order 9 ; + sh:path linkml:annotations ], + [ sh:datatype xsd:string ; + sh:description "a textual description of the element's purpose and use" ; sh:maxCount 1 ; sh:nodeKind sh:Literal ; - sh:order 2 ; - sh:path linkml:id_prefixes_are_closed ], - [ sh:description "When an element is deprecated, it can be automatically replaced by this uri or curie" ; + sh:order 10 ; + sh:path skos:definition ], + [ sh:description "agent that created the element" ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; - sh:order 24 ; - sh:path linkml:deprecated_element_has_exact_replacement ], + sh:order 34 ; + sh:path pav:createdBy ], [ sh:datatype xsd:string ; - sh:description "notes and comments about an element intended primarily for external consumption" ; + sh:description "editorial notes about an element intended primarily for internal consumption" ; sh:nodeKind sh:Literal ; - sh:order 16 ; - sh:path skos:note ], - [ sh:description "A list of terms from different schemas or terminology systems that have identical meaning." ; + sh:order 15 ; + sh:path skos:editorialNote ], + [ sh:datatype xsd:dateTime ; + sh:description "time at which the element was created" ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 36 ; + 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:nodeKind sh:Literal ; + sh:order 13 ; + sh:path linkml:deprecated ], + [ sh:class linkml:AltDescription ; + sh:description "A sourced alternative description for an element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 11 ; + 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:nodeKind sh:IRI ; - sh:order 29 ; - sh:path skos:exactMatch ], + sh:order 6 ; + sh:path linkml:implements ], + [ 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:nodeKind sh:IRI ; + sh:order 28 ; + sh:path skos:mappingRelation ], + [ sh:description "agent that contributed to the element" ; + sh:nodeKind sh:IRI ; + sh:order 35 ; + sh:path dcterms:contributor ], + [ sh:description "A list of terms from different schemas or terminology systems that have narrower meaning." ; + sh:nodeKind sh:IRI ; + sh:order 32 ; + sh:path skos:narrowMatch ], [ sh:datatype xsd:string ; sh:description "An established standard to which the element conforms." ; sh:maxCount 1 ; @@ -6743,21 +6743,21 @@ linkml:SubsetDefinition a sh:NodeShape ; linkml:Extension a sh:NodeShape ; rdfs:comment "a tag/value pair used to add non-model information to an entry" ; sh:closed true ; - sh:ignoredProperties ( rdf:type linkml:annotations ) ; + sh:ignoredProperties ( linkml:annotations rdf:type ) ; sh:property [ sh:description "a tag associated with an extension" ; sh:maxCount 1 ; sh:minCount 1 ; sh:nodeKind sh:IRI ; sh:order 0 ; sh:path linkml:extension_tag ], - [ sh:class linkml:Extension ; - sh:description "a tag/text tuple attached to an arbitrary element" ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 2 ; - sh:path linkml:extensions ], [ sh:description "the actual annotation" ; sh:maxCount 1 ; sh:minCount 1 ; sh:order 1 ; - sh:path linkml:extension_value ] ; + sh:path linkml:extension_value ], + [ sh:class linkml:Extension ; + sh:description "a tag/text tuple attached to an arbitrary element" ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 2 ; + sh:path linkml:extensions ] ; sh:targetClass linkml:Extension . diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/shex/meta.shex b/packages/linkml_runtime/src/linkml_runtime/linkml_model/shex/meta.shex index 00dc71c76a..156cc7cf49 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/shex/meta.shex +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/shex/meta.shex @@ -12,7 +12,7 @@ PREFIX oslc: PREFIX schema1: PREFIX bibo: PREFIX qudt: -PREFIX dcterms: +PREFIX dc1: PREFIX oboInOwl: @@ -132,7 +132,7 @@ PREFIX oboInOwl: @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -141,7 +141,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -155,13 +155,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] ? @@ -257,7 +257,7 @@ PREFIX oboInOwl: @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -266,7 +266,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -280,13 +280,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] ? @@ -366,7 +366,7 @@ PREFIX oboInOwl: @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -375,7 +375,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -389,12 +389,12 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] ? @@ -404,7 +404,7 @@ PREFIX oboInOwl: { ( $ ( skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -413,7 +413,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -427,13 +427,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] ? @@ -473,7 +473,7 @@ PREFIX oboInOwl: @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -482,7 +482,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -496,13 +496,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] ? @@ -524,14 +524,14 @@ PREFIX oboInOwl: @ ? ; @ ? ; @ * ; - dcterms:conformsTo @ ? ; + dc1:conformsTo @ ? ; @ * ; @ * ; @ * ; @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -540,7 +540,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -554,13 +554,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] @@ -586,7 +586,7 @@ PREFIX oboInOwl: @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -595,7 +595,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -609,13 +609,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] ? @@ -727,7 +727,7 @@ PREFIX oboInOwl: @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -736,7 +736,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -750,13 +750,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] ? @@ -800,7 +800,7 @@ PREFIX oboInOwl: @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -809,7 +809,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -823,13 +823,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] ? @@ -850,7 +850,7 @@ PREFIX oboInOwl: @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -859,7 +859,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -873,13 +873,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] ? @@ -902,7 +902,7 @@ PREFIX oboInOwl: @ * ; @ * ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -911,7 +911,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -925,13 +925,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] @@ -964,7 +964,7 @@ PREFIX oboInOwl: @ ; pav:version @ ? ; @ * ; - dcterms:license @ ? ; + dc1:license @ ? ; sh:declare @ * ; @ * ; @ * ; @@ -1127,13 +1127,13 @@ PREFIX oboInOwl: rdf:type [ ] ? ; skosxl:literalForm @ ; rdf:predicate [ skos:exactMatch skos:relatedMatch skos:broaderMatch skos:narrowerMatch ] ? ; - dcterms:subject @ * ; + dc1:subject @ * ; @ * ; @ * ; @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -1142,7 +1142,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -1156,7 +1156,7 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; @@ -1239,7 +1239,7 @@ PREFIX oboInOwl: @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -1248,7 +1248,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -1262,13 +1262,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] @@ -1289,7 +1289,7 @@ PREFIX oboInOwl: @ * ; skos:definition @ ? ; @ * ; - dcterms:title @ ? ; + dc1:title @ ? ; @ ? ; @ * ; skos:editorialNote @ * ; @@ -1298,7 +1298,7 @@ PREFIX oboInOwl: oboInOwl:inSubset @ * ; skos:inScheme @ ? ; @ ? ; - dcterms:source @ ? ; + dc1:source @ ? ; schema1:inLanguage @ ? ; rdfs:seeAlso @ * ; @ ? ; @@ -1312,13 +1312,13 @@ PREFIX oboInOwl: skos:narrowMatch @ * ; skos:broadMatch @ * ; pav:createdBy @ ? ; - dcterms:contributor @ * ; + dc1:contributor @ * ; pav:createdOn @ ? ; pav:lastUpdatedOn @ ? ; oslc:modifiedBy @ ? ; bibo:status @ ? ; sh:order @ ? ; - dcterms:subject @ * ; + dc1:subject @ * ; schema1:keywords @ * ) ; rdf:type [ ] diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/sqlddl/meta.sql b/packages/linkml_runtime/src/linkml_runtime/linkml_model/sqlddl/meta.sql index 0185c5bb39..fc91c25720 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/sqlddl/meta.sql +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/sqlddl/meta.sql @@ -408,8 +408,8 @@ -- * 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 --- * Slot: key Description: True means that the key slot(s) uniquely identify the elements within a single container --- * Slot: identifier Description: True means that the key slot(s) uniquely identifies the elements. There can be at most one identifier or key per container +-- * Slot: key Description: True means that the slot is the "singular unique key" (also known more simply as the "key slot") of its class. Such a slot uniquely identifies instances of the class within a single container, meaning there cannot be two (or more) instances of the class (or instances of any of its descendants) with the same value for the key slot within the container. +-- * Slot: identifier Description: True means that the slot is the identifier slot of its class. Such a slot uniquely identifies instances of the class throughout an entire document, meaning there cannot be two (or more) instances of the class (or instances of any of its descendants) with the same value for the identifier slot anywhere in the document. -- * Slot: designates_type Description: True means that the key slot(s) is used to determine the instantiation (types) relation between objects and a ClassDefinition -- * Slot: alias 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. -- * Slot: owner Description: the "owner" of the slot. It is the class if it appears in the slots list, otherwise the declaring slot @@ -843,10 +843,10 @@ -- * Slot: annotatable_id Description: Autocreated FK slot -- * Slot: annotation_tag Description: Autocreated FK slot -- * Slot: value_id Description: the actual annotation --- # Class: UnitOfMeasure 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). +-- # Class: UnitOfMeasure 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). -- * Slot: id -- * Slot: symbol Description: name of the unit encoded as a symbol --- * Slot: abbreviation 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) +-- * Slot: abbreviation 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) -- * Slot: descriptive_name Description: the spelled out name of the unit, for example, meter -- * Slot: ucum_code Description: associates a QUDT unit with its UCUM code (case-sensitive). -- * Slot: derivation Description: Expression for deriving this unit from other units @@ -3019,12 +3019,12 @@ CREATE TABLE setting ( FOREIGN KEY(schema_definition_name) REFERENCES schema_definition (name), FOREIGN KEY(import_expression_id) REFERENCES import_expression (id) ); +CREATE INDEX setting_schema_definition_name_setting_key_idx ON setting (schema_definition_name, setting_key); +CREATE INDEX ix_setting_schema_definition_name ON setting (schema_definition_name); CREATE INDEX ix_setting_setting_key ON setting (setting_key); CREATE INDEX ix_setting_setting_value ON setting (setting_value); CREATE INDEX setting_import_expression_id_setting_key_idx ON setting (import_expression_id, setting_key); CREATE INDEX ix_setting_import_expression_id ON setting (import_expression_id); -CREATE INDEX setting_schema_definition_name_setting_key_idx ON setting (schema_definition_name, setting_key); -CREATE INDEX ix_setting_schema_definition_name ON setting (schema_definition_name); CREATE TABLE prefix ( prefix_prefix TEXT NOT NULL, @@ -3036,8 +3036,8 @@ CREATE TABLE prefix ( ); CREATE INDEX ix_prefix_prefix_prefix ON prefix (prefix_prefix); CREATE INDEX ix_prefix_prefix_reference ON prefix (prefix_reference); -CREATE INDEX ix_prefix_schema_definition_name ON prefix (schema_definition_name); CREATE INDEX prefix_schema_definition_name_prefix_prefix_idx ON prefix (schema_definition_name, prefix_prefix); +CREATE INDEX ix_prefix_schema_definition_name ON prefix (schema_definition_name); CREATE TABLE unique_key ( unique_key_name TEXT NOT NULL, @@ -3062,25 +3062,25 @@ CREATE TABLE unique_key ( UNIQUE (class_definition_name, unique_key_name), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX unique_key_class_definition_name_unique_key_name_idx ON unique_key (class_definition_name, unique_key_name); -CREATE INDEX ix_unique_key_deprecated_element_has_exact_replacement ON unique_key (deprecated_element_has_exact_replacement); -CREATE INDEX ix_unique_key_class_definition_name ON unique_key (class_definition_name); -CREATE INDEX ix_unique_key_source ON unique_key (source); +CREATE INDEX ix_unique_key_status ON unique_key (status); CREATE INDEX ix_unique_key_title ON unique_key (title); CREATE INDEX ix_unique_key_from_schema ON unique_key (from_schema); +CREATE INDEX ix_unique_key_source ON unique_key (source); CREATE INDEX ix_unique_key_created_by ON unique_key (created_by); CREATE INDEX ix_unique_key_last_updated_on ON unique_key (last_updated_on); -CREATE INDEX ix_unique_key_status ON unique_key (status); CREATE INDEX ix_unique_key_consider_nulls_inequal ON unique_key (consider_nulls_inequal); +CREATE INDEX ix_unique_key_deprecated_element_has_exact_replacement ON unique_key (deprecated_element_has_exact_replacement); CREATE INDEX ix_unique_key_in_language ON unique_key (in_language); -CREATE INDEX ix_unique_key_imported_from ON unique_key (imported_from); CREATE INDEX ix_unique_key_deprecated_element_has_possible_replacement ON unique_key (deprecated_element_has_possible_replacement); +CREATE INDEX ix_unique_key_rank ON unique_key (rank); CREATE INDEX ix_unique_key_deprecated ON unique_key (deprecated); +CREATE INDEX ix_unique_key_imported_from ON unique_key (imported_from); CREATE INDEX ix_unique_key_created_on ON unique_key (created_on); CREATE INDEX ix_unique_key_modified_by ON unique_key (modified_by); -CREATE INDEX ix_unique_key_rank ON unique_key (rank); CREATE INDEX ix_unique_key_description ON unique_key (description); CREATE INDEX ix_unique_key_unique_key_name ON unique_key (unique_key_name); +CREATE INDEX unique_key_class_definition_name_unique_key_name_idx ON unique_key (class_definition_name, unique_key_name); +CREATE INDEX ix_unique_key_class_definition_name ON unique_key (class_definition_name); CREATE TABLE type_mapping ( framework TEXT NOT NULL, @@ -3104,23 +3104,23 @@ CREATE TABLE type_mapping ( PRIMARY KEY (framework, type, string_serialization, description, title, deprecated, from_schema, imported_from, source, in_language, deprecated_element_has_exact_replacement, deprecated_element_has_possible_replacement, created_by, created_on, last_updated_on, modified_by, status, rank), FOREIGN KEY(type) REFERENCES type_definition (name) ); -CREATE INDEX ix_type_mapping_description ON type_mapping (description); -CREATE INDEX ix_type_mapping_title ON type_mapping (title); -CREATE INDEX ix_type_mapping_string_serialization ON type_mapping (string_serialization); -CREATE INDEX ix_type_mapping_created_by ON type_mapping (created_by); -CREATE INDEX ix_type_mapping_created_on ON type_mapping (created_on); +CREATE INDEX ix_type_mapping_from_schema ON type_mapping (from_schema); +CREATE INDEX ix_type_mapping_imported_from ON type_mapping (imported_from); CREATE INDEX ix_type_mapping_framework ON type_mapping (framework); -CREATE INDEX ix_type_mapping_last_updated_on ON type_mapping (last_updated_on); -CREATE INDEX ix_type_mapping_modified_by ON type_mapping (modified_by); CREATE INDEX ix_type_mapping_source ON type_mapping (source); -CREATE INDEX ix_type_mapping_status ON type_mapping (status); -CREATE INDEX ix_type_mapping_rank ON type_mapping (rank); CREATE INDEX ix_type_mapping_type ON type_mapping (type); CREATE INDEX ix_type_mapping_in_language ON type_mapping (in_language); CREATE INDEX ix_type_mapping_deprecated_element_has_exact_replacement ON type_mapping (deprecated_element_has_exact_replacement); CREATE INDEX ix_type_mapping_deprecated_element_has_possible_replacement ON type_mapping (deprecated_element_has_possible_replacement); -CREATE INDEX ix_type_mapping_from_schema ON type_mapping (from_schema); -CREATE INDEX ix_type_mapping_imported_from ON type_mapping (imported_from); +CREATE INDEX ix_type_mapping_created_by ON type_mapping (created_by); +CREATE INDEX ix_type_mapping_created_on ON type_mapping (created_on); +CREATE INDEX ix_type_mapping_last_updated_on ON type_mapping (last_updated_on); +CREATE INDEX ix_type_mapping_description ON type_mapping (description); +CREATE INDEX ix_type_mapping_modified_by ON type_mapping (modified_by); +CREATE INDEX ix_type_mapping_status ON type_mapping (status); +CREATE INDEX ix_type_mapping_title ON type_mapping (title); +CREATE INDEX ix_type_mapping_string_serialization ON type_mapping (string_serialization); +CREATE INDEX ix_type_mapping_rank ON type_mapping (rank); CREATE INDEX ix_type_mapping_deprecated ON type_mapping (deprecated); CREATE TABLE common_metadata_todos ( @@ -3138,8 +3138,8 @@ CREATE TABLE common_metadata_notes ( PRIMARY KEY (common_metadata_id, notes), FOREIGN KEY(common_metadata_id) REFERENCES common_metadata (id) ); -CREATE INDEX ix_common_metadata_notes_notes ON common_metadata_notes (notes); CREATE INDEX ix_common_metadata_notes_common_metadata_id ON common_metadata_notes (common_metadata_id); +CREATE INDEX ix_common_metadata_notes_notes ON common_metadata_notes (notes); CREATE TABLE common_metadata_comments ( common_metadata_id INTEGER, @@ -3147,8 +3147,8 @@ CREATE TABLE common_metadata_comments ( PRIMARY KEY (common_metadata_id, comments), FOREIGN KEY(common_metadata_id) REFERENCES common_metadata (id) ); -CREATE INDEX ix_common_metadata_comments_comments ON common_metadata_comments (comments); CREATE INDEX ix_common_metadata_comments_common_metadata_id ON common_metadata_comments (common_metadata_id); +CREATE INDEX ix_common_metadata_comments_comments ON common_metadata_comments (comments); CREATE TABLE common_metadata_see_also ( common_metadata_id INTEGER, @@ -3156,8 +3156,8 @@ CREATE TABLE common_metadata_see_also ( PRIMARY KEY (common_metadata_id, see_also), FOREIGN KEY(common_metadata_id) REFERENCES common_metadata (id) ); -CREATE INDEX ix_common_metadata_see_also_common_metadata_id ON common_metadata_see_also (common_metadata_id); CREATE INDEX ix_common_metadata_see_also_see_also ON common_metadata_see_also (see_also); +CREATE INDEX ix_common_metadata_see_also_common_metadata_id ON common_metadata_see_also (common_metadata_id); CREATE TABLE common_metadata_aliases ( common_metadata_id INTEGER, @@ -3165,8 +3165,8 @@ CREATE TABLE common_metadata_aliases ( PRIMARY KEY (common_metadata_id, aliases), FOREIGN KEY(common_metadata_id) REFERENCES common_metadata (id) ); -CREATE INDEX ix_common_metadata_aliases_aliases ON common_metadata_aliases (aliases); CREATE INDEX ix_common_metadata_aliases_common_metadata_id ON common_metadata_aliases (common_metadata_id); +CREATE INDEX ix_common_metadata_aliases_aliases ON common_metadata_aliases (aliases); CREATE TABLE common_metadata_mappings ( common_metadata_id INTEGER, @@ -3192,8 +3192,8 @@ CREATE TABLE common_metadata_close_mappings ( PRIMARY KEY (common_metadata_id, close_mappings), FOREIGN KEY(common_metadata_id) REFERENCES common_metadata (id) ); -CREATE INDEX ix_common_metadata_close_mappings_close_mappings ON common_metadata_close_mappings (close_mappings); CREATE INDEX ix_common_metadata_close_mappings_common_metadata_id ON common_metadata_close_mappings (common_metadata_id); +CREATE INDEX ix_common_metadata_close_mappings_close_mappings ON common_metadata_close_mappings (close_mappings); CREATE TABLE common_metadata_related_mappings ( common_metadata_id INTEGER, @@ -3219,8 +3219,8 @@ CREATE TABLE common_metadata_broad_mappings ( PRIMARY KEY (common_metadata_id, broad_mappings), FOREIGN KEY(common_metadata_id) REFERENCES common_metadata (id) ); -CREATE INDEX ix_common_metadata_broad_mappings_broad_mappings ON common_metadata_broad_mappings (broad_mappings); CREATE INDEX ix_common_metadata_broad_mappings_common_metadata_id ON common_metadata_broad_mappings (common_metadata_id); +CREATE INDEX ix_common_metadata_broad_mappings_broad_mappings ON common_metadata_broad_mappings (broad_mappings); CREATE TABLE common_metadata_contributors ( common_metadata_id INTEGER, @@ -3237,8 +3237,8 @@ CREATE TABLE common_metadata_category ( PRIMARY KEY (common_metadata_id, category), FOREIGN KEY(common_metadata_id) REFERENCES common_metadata (id) ); -CREATE INDEX ix_common_metadata_category_common_metadata_id ON common_metadata_category (common_metadata_id); CREATE INDEX ix_common_metadata_category_category ON common_metadata_category (category); +CREATE INDEX ix_common_metadata_category_common_metadata_id ON common_metadata_category (common_metadata_id); CREATE TABLE common_metadata_keyword ( common_metadata_id INTEGER, @@ -3246,8 +3246,8 @@ CREATE TABLE common_metadata_keyword ( PRIMARY KEY (common_metadata_id, keyword), FOREIGN KEY(common_metadata_id) REFERENCES common_metadata (id) ); -CREATE INDEX ix_common_metadata_keyword_keyword ON common_metadata_keyword (keyword); CREATE INDEX ix_common_metadata_keyword_common_metadata_id ON common_metadata_keyword (common_metadata_id); +CREATE INDEX ix_common_metadata_keyword_keyword ON common_metadata_keyword (keyword); CREATE TABLE element_id_prefixes ( element_name TEXT, @@ -3264,8 +3264,8 @@ CREATE TABLE element_implements ( PRIMARY KEY (element_name, implements), FOREIGN KEY(element_name) REFERENCES element (name) ); -CREATE INDEX ix_element_implements_element_name ON element_implements (element_name); CREATE INDEX ix_element_implements_implements ON element_implements (implements); +CREATE INDEX ix_element_implements_element_name ON element_implements (element_name); CREATE TABLE element_instantiates ( element_name TEXT, @@ -3273,8 +3273,8 @@ CREATE TABLE element_instantiates ( PRIMARY KEY (element_name, instantiates), FOREIGN KEY(element_name) REFERENCES element (name) ); -CREATE INDEX ix_element_instantiates_element_name ON element_instantiates (element_name); CREATE INDEX ix_element_instantiates_instantiates ON element_instantiates (instantiates); +CREATE INDEX ix_element_instantiates_element_name ON element_instantiates (element_name); CREATE TABLE element_todos ( element_name TEXT, @@ -3291,8 +3291,8 @@ CREATE TABLE element_notes ( PRIMARY KEY (element_name, notes), FOREIGN KEY(element_name) REFERENCES element (name) ); -CREATE INDEX ix_element_notes_notes ON element_notes (notes); CREATE INDEX ix_element_notes_element_name ON element_notes (element_name); +CREATE INDEX ix_element_notes_notes ON element_notes (notes); CREATE TABLE element_comments ( element_name TEXT, @@ -3300,8 +3300,8 @@ CREATE TABLE element_comments ( PRIMARY KEY (element_name, comments), FOREIGN KEY(element_name) REFERENCES element (name) ); -CREATE INDEX ix_element_comments_comments ON element_comments (comments); CREATE INDEX ix_element_comments_element_name ON element_comments (element_name); +CREATE INDEX ix_element_comments_comments ON element_comments (comments); CREATE TABLE element_see_also ( element_name TEXT, @@ -3327,8 +3327,8 @@ CREATE TABLE element_mappings ( PRIMARY KEY (element_name, mappings), FOREIGN KEY(element_name) REFERENCES element (name) ); -CREATE INDEX ix_element_mappings_element_name ON element_mappings (element_name); CREATE INDEX ix_element_mappings_mappings ON element_mappings (mappings); +CREATE INDEX ix_element_mappings_element_name ON element_mappings (element_name); CREATE TABLE element_exact_mappings ( element_name TEXT, @@ -3354,8 +3354,8 @@ CREATE TABLE element_related_mappings ( PRIMARY KEY (element_name, related_mappings), FOREIGN KEY(element_name) REFERENCES element (name) ); -CREATE INDEX ix_element_related_mappings_related_mappings ON element_related_mappings (related_mappings); CREATE INDEX ix_element_related_mappings_element_name ON element_related_mappings (element_name); +CREATE INDEX ix_element_related_mappings_related_mappings ON element_related_mappings (related_mappings); CREATE TABLE element_narrow_mappings ( element_name TEXT, @@ -3381,8 +3381,8 @@ CREATE TABLE element_contributors ( PRIMARY KEY (element_name, contributors), FOREIGN KEY(element_name) REFERENCES element (name) ); -CREATE INDEX ix_element_contributors_element_name ON element_contributors (element_name); CREATE INDEX ix_element_contributors_contributors ON element_contributors (contributors); +CREATE INDEX ix_element_contributors_element_name ON element_contributors (element_name); CREATE TABLE element_category ( element_name TEXT, @@ -3408,8 +3408,8 @@ CREATE TABLE schema_definition_imports ( PRIMARY KEY (schema_definition_name, imports), FOREIGN KEY(schema_definition_name) REFERENCES schema_definition (name) ); -CREATE INDEX ix_schema_definition_imports_schema_definition_name ON schema_definition_imports (schema_definition_name); CREATE INDEX ix_schema_definition_imports_imports ON schema_definition_imports (imports); +CREATE INDEX ix_schema_definition_imports_schema_definition_name ON schema_definition_imports (schema_definition_name); CREATE TABLE schema_definition_emit_prefixes ( schema_definition_name TEXT, @@ -3507,8 +3507,8 @@ CREATE TABLE schema_definition_mappings ( PRIMARY KEY (schema_definition_name, mappings), FOREIGN KEY(schema_definition_name) REFERENCES schema_definition (name) ); -CREATE INDEX ix_schema_definition_mappings_mappings ON schema_definition_mappings (mappings); CREATE INDEX ix_schema_definition_mappings_schema_definition_name ON schema_definition_mappings (schema_definition_name); +CREATE INDEX ix_schema_definition_mappings_mappings ON schema_definition_mappings (mappings); CREATE TABLE schema_definition_exact_mappings ( schema_definition_name TEXT, @@ -3598,8 +3598,8 @@ CREATE TABLE type_definition_equals_string_in ( PRIMARY KEY (type_definition_name, equals_string_in), FOREIGN KEY(type_definition_name) REFERENCES type_definition (name) ); -CREATE INDEX ix_type_definition_equals_string_in_type_definition_name ON type_definition_equals_string_in (type_definition_name); CREATE INDEX ix_type_definition_equals_string_in_equals_string_in ON type_definition_equals_string_in (equals_string_in); +CREATE INDEX ix_type_definition_equals_string_in_type_definition_name ON type_definition_equals_string_in (type_definition_name); CREATE TABLE type_definition_id_prefixes ( type_definition_name TEXT, @@ -3661,8 +3661,8 @@ CREATE TABLE type_definition_see_also ( PRIMARY KEY (type_definition_name, see_also), FOREIGN KEY(type_definition_name) REFERENCES type_definition (name) ); -CREATE INDEX ix_type_definition_see_also_type_definition_name ON type_definition_see_also (type_definition_name); CREATE INDEX ix_type_definition_see_also_see_also ON type_definition_see_also (see_also); +CREATE INDEX ix_type_definition_see_also_type_definition_name ON type_definition_see_also (type_definition_name); CREATE TABLE type_definition_aliases ( type_definition_name TEXT, @@ -3697,8 +3697,8 @@ CREATE TABLE type_definition_close_mappings ( PRIMARY KEY (type_definition_name, close_mappings), FOREIGN KEY(type_definition_name) REFERENCES type_definition (name) ); -CREATE INDEX ix_type_definition_close_mappings_close_mappings ON type_definition_close_mappings (close_mappings); CREATE INDEX ix_type_definition_close_mappings_type_definition_name ON type_definition_close_mappings (type_definition_name); +CREATE INDEX ix_type_definition_close_mappings_close_mappings ON type_definition_close_mappings (close_mappings); CREATE TABLE type_definition_related_mappings ( type_definition_name TEXT, @@ -3706,8 +3706,8 @@ CREATE TABLE type_definition_related_mappings ( PRIMARY KEY (type_definition_name, related_mappings), FOREIGN KEY(type_definition_name) REFERENCES type_definition (name) ); -CREATE INDEX ix_type_definition_related_mappings_type_definition_name ON type_definition_related_mappings (type_definition_name); CREATE INDEX ix_type_definition_related_mappings_related_mappings ON type_definition_related_mappings (related_mappings); +CREATE INDEX ix_type_definition_related_mappings_type_definition_name ON type_definition_related_mappings (type_definition_name); CREATE TABLE type_definition_narrow_mappings ( type_definition_name TEXT, @@ -3724,8 +3724,8 @@ CREATE TABLE type_definition_broad_mappings ( PRIMARY KEY (type_definition_name, broad_mappings), FOREIGN KEY(type_definition_name) REFERENCES type_definition (name) ); -CREATE INDEX ix_type_definition_broad_mappings_broad_mappings ON type_definition_broad_mappings (broad_mappings); CREATE INDEX ix_type_definition_broad_mappings_type_definition_name ON type_definition_broad_mappings (type_definition_name); +CREATE INDEX ix_type_definition_broad_mappings_broad_mappings ON type_definition_broad_mappings (broad_mappings); CREATE TABLE type_definition_contributors ( type_definition_name TEXT, @@ -3733,8 +3733,8 @@ CREATE TABLE type_definition_contributors ( PRIMARY KEY (type_definition_name, contributors), FOREIGN KEY(type_definition_name) REFERENCES type_definition (name) ); -CREATE INDEX ix_type_definition_contributors_type_definition_name ON type_definition_contributors (type_definition_name); CREATE INDEX ix_type_definition_contributors_contributors ON type_definition_contributors (contributors); +CREATE INDEX ix_type_definition_contributors_type_definition_name ON type_definition_contributors (type_definition_name); CREATE TABLE type_definition_category ( type_definition_name TEXT, @@ -3780,8 +3780,8 @@ CREATE TABLE definition_values_from ( PRIMARY KEY (definition_name, values_from), FOREIGN KEY(definition_name) REFERENCES definition (name) ); -CREATE INDEX ix_definition_values_from_definition_name ON definition_values_from (definition_name); CREATE INDEX ix_definition_values_from_values_from ON definition_values_from (values_from); +CREATE INDEX ix_definition_values_from_definition_name ON definition_values_from (definition_name); CREATE TABLE definition_id_prefixes ( definition_name TEXT, @@ -3807,8 +3807,8 @@ CREATE TABLE definition_instantiates ( PRIMARY KEY (definition_name, instantiates), FOREIGN KEY(definition_name) REFERENCES definition (name) ); -CREATE INDEX ix_definition_instantiates_instantiates ON definition_instantiates (instantiates); CREATE INDEX ix_definition_instantiates_definition_name ON definition_instantiates (definition_name); +CREATE INDEX ix_definition_instantiates_instantiates ON definition_instantiates (instantiates); CREATE TABLE definition_todos ( definition_name TEXT, @@ -3834,8 +3834,8 @@ CREATE TABLE definition_comments ( PRIMARY KEY (definition_name, comments), FOREIGN KEY(definition_name) REFERENCES definition (name) ); -CREATE INDEX ix_definition_comments_definition_name ON definition_comments (definition_name); CREATE INDEX ix_definition_comments_comments ON definition_comments (comments); +CREATE INDEX ix_definition_comments_definition_name ON definition_comments (definition_name); CREATE TABLE definition_see_also ( definition_name TEXT, @@ -3852,8 +3852,8 @@ CREATE TABLE definition_aliases ( PRIMARY KEY (definition_name, aliases), FOREIGN KEY(definition_name) REFERENCES definition (name) ); -CREATE INDEX ix_definition_aliases_aliases ON definition_aliases (aliases); CREATE INDEX ix_definition_aliases_definition_name ON definition_aliases (definition_name); +CREATE INDEX ix_definition_aliases_aliases ON definition_aliases (aliases); CREATE TABLE definition_mappings ( definition_name TEXT, @@ -3870,8 +3870,8 @@ CREATE TABLE definition_exact_mappings ( PRIMARY KEY (definition_name, exact_mappings), FOREIGN KEY(definition_name) REFERENCES definition (name) ); -CREATE INDEX ix_definition_exact_mappings_exact_mappings ON definition_exact_mappings (exact_mappings); CREATE INDEX ix_definition_exact_mappings_definition_name ON definition_exact_mappings (definition_name); +CREATE INDEX ix_definition_exact_mappings_exact_mappings ON definition_exact_mappings (exact_mappings); CREATE TABLE definition_close_mappings ( definition_name TEXT, @@ -3888,8 +3888,8 @@ CREATE TABLE definition_related_mappings ( PRIMARY KEY (definition_name, related_mappings), FOREIGN KEY(definition_name) REFERENCES definition (name) ); -CREATE INDEX ix_definition_related_mappings_definition_name ON definition_related_mappings (definition_name); CREATE INDEX ix_definition_related_mappings_related_mappings ON definition_related_mappings (related_mappings); +CREATE INDEX ix_definition_related_mappings_definition_name ON definition_related_mappings (definition_name); CREATE TABLE definition_narrow_mappings ( definition_name TEXT, @@ -3897,8 +3897,8 @@ CREATE TABLE definition_narrow_mappings ( PRIMARY KEY (definition_name, narrow_mappings), FOREIGN KEY(definition_name) REFERENCES definition (name) ); -CREATE INDEX ix_definition_narrow_mappings_definition_name ON definition_narrow_mappings (definition_name); CREATE INDEX ix_definition_narrow_mappings_narrow_mappings ON definition_narrow_mappings (narrow_mappings); +CREATE INDEX ix_definition_narrow_mappings_definition_name ON definition_narrow_mappings (definition_name); CREATE TABLE definition_broad_mappings ( definition_name TEXT, @@ -3915,8 +3915,8 @@ CREATE TABLE definition_contributors ( PRIMARY KEY (definition_name, contributors), FOREIGN KEY(definition_name) REFERENCES definition (name) ); -CREATE INDEX ix_definition_contributors_contributors ON definition_contributors (contributors); CREATE INDEX ix_definition_contributors_definition_name ON definition_contributors (definition_name); +CREATE INDEX ix_definition_contributors_contributors ON definition_contributors (contributors); CREATE TABLE definition_category ( definition_name TEXT, @@ -3924,8 +3924,8 @@ CREATE TABLE definition_category ( PRIMARY KEY (definition_name, category), FOREIGN KEY(definition_name) REFERENCES definition (name) ); -CREATE INDEX ix_definition_category_category ON definition_category (category); CREATE INDEX ix_definition_category_definition_name ON definition_category (definition_name); +CREATE INDEX ix_definition_category_category ON definition_category (category); CREATE TABLE definition_keyword ( definition_name TEXT, @@ -4005,8 +4005,8 @@ CREATE TABLE anonymous_expression_mappings ( PRIMARY KEY (anonymous_expression_id, mappings), FOREIGN KEY(anonymous_expression_id) REFERENCES anonymous_expression (id) ); -CREATE INDEX ix_anonymous_expression_mappings_mappings ON anonymous_expression_mappings (mappings); CREATE INDEX ix_anonymous_expression_mappings_anonymous_expression_id ON anonymous_expression_mappings (anonymous_expression_id); +CREATE INDEX ix_anonymous_expression_mappings_mappings ON anonymous_expression_mappings (mappings); CREATE TABLE anonymous_expression_exact_mappings ( anonymous_expression_id INTEGER, @@ -4032,8 +4032,8 @@ CREATE TABLE anonymous_expression_related_mappings ( PRIMARY KEY (anonymous_expression_id, related_mappings), FOREIGN KEY(anonymous_expression_id) REFERENCES anonymous_expression (id) ); -CREATE INDEX ix_anonymous_expression_related_mappings_related_mappings ON anonymous_expression_related_mappings (related_mappings); CREATE INDEX ix_anonymous_expression_related_mappings_anonymous_expression_id ON anonymous_expression_related_mappings (anonymous_expression_id); +CREATE INDEX ix_anonymous_expression_related_mappings_related_mappings ON anonymous_expression_related_mappings (related_mappings); CREATE TABLE anonymous_expression_narrow_mappings ( anonymous_expression_id INTEGER, @@ -4087,8 +4087,8 @@ CREATE TABLE path_expression_none_of ( FOREIGN KEY(path_expression_id) REFERENCES path_expression (id), FOREIGN KEY(none_of_id) REFERENCES path_expression (id) ); -CREATE INDEX ix_path_expression_none_of_none_of_id ON path_expression_none_of (none_of_id); CREATE INDEX ix_path_expression_none_of_path_expression_id ON path_expression_none_of (path_expression_id); +CREATE INDEX ix_path_expression_none_of_none_of_id ON path_expression_none_of (none_of_id); CREATE TABLE path_expression_any_of ( path_expression_id INTEGER, @@ -4107,8 +4107,8 @@ CREATE TABLE path_expression_all_of ( FOREIGN KEY(path_expression_id) REFERENCES path_expression (id), FOREIGN KEY(all_of_id) REFERENCES path_expression (id) ); -CREATE INDEX ix_path_expression_all_of_all_of_id ON path_expression_all_of (all_of_id); CREATE INDEX ix_path_expression_all_of_path_expression_id ON path_expression_all_of (path_expression_id); +CREATE INDEX ix_path_expression_all_of_all_of_id ON path_expression_all_of (all_of_id); CREATE TABLE path_expression_exactly_one_of ( path_expression_id INTEGER, @@ -4135,8 +4135,8 @@ CREATE TABLE path_expression_notes ( PRIMARY KEY (path_expression_id, notes), FOREIGN KEY(path_expression_id) REFERENCES path_expression (id) ); -CREATE INDEX ix_path_expression_notes_path_expression_id ON path_expression_notes (path_expression_id); CREATE INDEX ix_path_expression_notes_notes ON path_expression_notes (notes); +CREATE INDEX ix_path_expression_notes_path_expression_id ON path_expression_notes (path_expression_id); CREATE TABLE path_expression_comments ( path_expression_id INTEGER, @@ -4153,8 +4153,8 @@ CREATE TABLE path_expression_see_also ( PRIMARY KEY (path_expression_id, see_also), FOREIGN KEY(path_expression_id) REFERENCES path_expression (id) ); -CREATE INDEX ix_path_expression_see_also_path_expression_id ON path_expression_see_also (path_expression_id); CREATE INDEX ix_path_expression_see_also_see_also ON path_expression_see_also (see_also); +CREATE INDEX ix_path_expression_see_also_path_expression_id ON path_expression_see_also (path_expression_id); CREATE TABLE path_expression_aliases ( path_expression_id INTEGER, @@ -4180,8 +4180,8 @@ CREATE TABLE path_expression_exact_mappings ( PRIMARY KEY (path_expression_id, exact_mappings), FOREIGN KEY(path_expression_id) REFERENCES path_expression (id) ); -CREATE INDEX ix_path_expression_exact_mappings_path_expression_id ON path_expression_exact_mappings (path_expression_id); CREATE INDEX ix_path_expression_exact_mappings_exact_mappings ON path_expression_exact_mappings (exact_mappings); +CREATE INDEX ix_path_expression_exact_mappings_path_expression_id ON path_expression_exact_mappings (path_expression_id); CREATE TABLE path_expression_close_mappings ( path_expression_id INTEGER, @@ -4189,8 +4189,8 @@ CREATE TABLE path_expression_close_mappings ( PRIMARY KEY (path_expression_id, close_mappings), FOREIGN KEY(path_expression_id) REFERENCES path_expression (id) ); -CREATE INDEX ix_path_expression_close_mappings_close_mappings ON path_expression_close_mappings (close_mappings); CREATE INDEX ix_path_expression_close_mappings_path_expression_id ON path_expression_close_mappings (path_expression_id); +CREATE INDEX ix_path_expression_close_mappings_close_mappings ON path_expression_close_mappings (close_mappings); CREATE TABLE path_expression_related_mappings ( path_expression_id INTEGER, @@ -4207,8 +4207,8 @@ CREATE TABLE path_expression_narrow_mappings ( PRIMARY KEY (path_expression_id, narrow_mappings), FOREIGN KEY(path_expression_id) REFERENCES path_expression (id) ); -CREATE INDEX ix_path_expression_narrow_mappings_path_expression_id ON path_expression_narrow_mappings (path_expression_id); CREATE INDEX ix_path_expression_narrow_mappings_narrow_mappings ON path_expression_narrow_mappings (narrow_mappings); +CREATE INDEX ix_path_expression_narrow_mappings_path_expression_id ON path_expression_narrow_mappings (path_expression_id); CREATE TABLE path_expression_broad_mappings ( path_expression_id INTEGER, @@ -4216,8 +4216,8 @@ CREATE TABLE path_expression_broad_mappings ( PRIMARY KEY (path_expression_id, broad_mappings), FOREIGN KEY(path_expression_id) REFERENCES path_expression (id) ); -CREATE INDEX ix_path_expression_broad_mappings_broad_mappings ON path_expression_broad_mappings (broad_mappings); CREATE INDEX ix_path_expression_broad_mappings_path_expression_id ON path_expression_broad_mappings (path_expression_id); +CREATE INDEX ix_path_expression_broad_mappings_broad_mappings ON path_expression_broad_mappings (broad_mappings); CREATE TABLE path_expression_contributors ( path_expression_id INTEGER, @@ -4234,8 +4234,8 @@ CREATE TABLE path_expression_category ( PRIMARY KEY (path_expression_id, category), FOREIGN KEY(path_expression_id) REFERENCES path_expression (id) ); -CREATE INDEX ix_path_expression_category_category ON path_expression_category (category); CREATE INDEX ix_path_expression_category_path_expression_id ON path_expression_category (path_expression_id); +CREATE INDEX ix_path_expression_category_category ON path_expression_category (category); CREATE TABLE path_expression_keyword ( path_expression_id INTEGER, @@ -4252,8 +4252,8 @@ CREATE TABLE anonymous_slot_expression_equals_string_in ( PRIMARY KEY (anonymous_slot_expression_id, equals_string_in), FOREIGN KEY(anonymous_slot_expression_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_anonymous_slot_expression_equals_string_in_equals_string_in ON anonymous_slot_expression_equals_string_in (equals_string_in); CREATE INDEX ix_anonymous_slot_expression_equals_string_in_anonymous_slot_expression_id ON anonymous_slot_expression_equals_string_in (anonymous_slot_expression_id); +CREATE INDEX ix_anonymous_slot_expression_equals_string_in_equals_string_in ON anonymous_slot_expression_equals_string_in (equals_string_in); CREATE TABLE anonymous_slot_expression_none_of ( anonymous_slot_expression_id INTEGER, @@ -4262,8 +4262,8 @@ CREATE TABLE anonymous_slot_expression_none_of ( FOREIGN KEY(anonymous_slot_expression_id) REFERENCES anonymous_slot_expression (id), FOREIGN KEY(none_of_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_anonymous_slot_expression_none_of_anonymous_slot_expression_id ON anonymous_slot_expression_none_of (anonymous_slot_expression_id); CREATE INDEX ix_anonymous_slot_expression_none_of_none_of_id ON anonymous_slot_expression_none_of (none_of_id); +CREATE INDEX ix_anonymous_slot_expression_none_of_anonymous_slot_expression_id ON anonymous_slot_expression_none_of (anonymous_slot_expression_id); CREATE TABLE anonymous_slot_expression_exactly_one_of ( anonymous_slot_expression_id INTEGER, @@ -4272,8 +4272,8 @@ CREATE TABLE anonymous_slot_expression_exactly_one_of ( FOREIGN KEY(anonymous_slot_expression_id) REFERENCES anonymous_slot_expression (id), FOREIGN KEY(exactly_one_of_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_anonymous_slot_expression_exactly_one_of_exactly_one_of_id ON anonymous_slot_expression_exactly_one_of (exactly_one_of_id); CREATE INDEX ix_anonymous_slot_expression_exactly_one_of_anonymous_slot_expression_id ON anonymous_slot_expression_exactly_one_of (anonymous_slot_expression_id); +CREATE INDEX ix_anonymous_slot_expression_exactly_one_of_exactly_one_of_id ON anonymous_slot_expression_exactly_one_of (exactly_one_of_id); CREATE TABLE anonymous_slot_expression_any_of ( anonymous_slot_expression_id INTEGER, @@ -4310,8 +4310,8 @@ CREATE TABLE anonymous_slot_expression_notes ( PRIMARY KEY (anonymous_slot_expression_id, notes), FOREIGN KEY(anonymous_slot_expression_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_anonymous_slot_expression_notes_notes ON anonymous_slot_expression_notes (notes); CREATE INDEX ix_anonymous_slot_expression_notes_anonymous_slot_expression_id ON anonymous_slot_expression_notes (anonymous_slot_expression_id); +CREATE INDEX ix_anonymous_slot_expression_notes_notes ON anonymous_slot_expression_notes (notes); CREATE TABLE anonymous_slot_expression_comments ( anonymous_slot_expression_id INTEGER, @@ -4328,8 +4328,8 @@ CREATE TABLE anonymous_slot_expression_see_also ( PRIMARY KEY (anonymous_slot_expression_id, see_also), FOREIGN KEY(anonymous_slot_expression_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_anonymous_slot_expression_see_also_anonymous_slot_expression_id ON anonymous_slot_expression_see_also (anonymous_slot_expression_id); CREATE INDEX ix_anonymous_slot_expression_see_also_see_also ON anonymous_slot_expression_see_also (see_also); +CREATE INDEX ix_anonymous_slot_expression_see_also_anonymous_slot_expression_id ON anonymous_slot_expression_see_also (anonymous_slot_expression_id); CREATE TABLE anonymous_slot_expression_aliases ( anonymous_slot_expression_id INTEGER, @@ -4400,8 +4400,8 @@ CREATE TABLE anonymous_slot_expression_contributors ( PRIMARY KEY (anonymous_slot_expression_id, contributors), FOREIGN KEY(anonymous_slot_expression_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_anonymous_slot_expression_contributors_contributors ON anonymous_slot_expression_contributors (contributors); CREATE INDEX ix_anonymous_slot_expression_contributors_anonymous_slot_expression_id ON anonymous_slot_expression_contributors (anonymous_slot_expression_id); +CREATE INDEX ix_anonymous_slot_expression_contributors_contributors ON anonymous_slot_expression_contributors (contributors); CREATE TABLE anonymous_slot_expression_category ( anonymous_slot_expression_id INTEGER, @@ -4428,8 +4428,8 @@ CREATE TABLE slot_definition_domain_of ( FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name), FOREIGN KEY(domain_of_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_slot_definition_domain_of_slot_definition_name ON slot_definition_domain_of (slot_definition_name); CREATE INDEX ix_slot_definition_domain_of_domain_of_name ON slot_definition_domain_of (domain_of_name); +CREATE INDEX ix_slot_definition_domain_of_slot_definition_name ON slot_definition_domain_of (slot_definition_name); CREATE TABLE slot_definition_disjoint_with ( slot_definition_name TEXT, @@ -4438,8 +4438,8 @@ CREATE TABLE slot_definition_disjoint_with ( FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name), FOREIGN KEY(disjoint_with_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_disjoint_with_slot_definition_name ON slot_definition_disjoint_with (slot_definition_name); CREATE INDEX ix_slot_definition_disjoint_with_disjoint_with_name ON slot_definition_disjoint_with (disjoint_with_name); +CREATE INDEX ix_slot_definition_disjoint_with_slot_definition_name ON slot_definition_disjoint_with (slot_definition_name); CREATE TABLE slot_definition_union_of ( slot_definition_name TEXT, @@ -4448,8 +4448,8 @@ CREATE TABLE slot_definition_union_of ( FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name), FOREIGN KEY(union_of_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_union_of_union_of_name ON slot_definition_union_of (union_of_name); CREATE INDEX ix_slot_definition_union_of_slot_definition_name ON slot_definition_union_of (slot_definition_name); +CREATE INDEX ix_slot_definition_union_of_union_of_name ON slot_definition_union_of (union_of_name); CREATE TABLE slot_definition_equals_string_in ( slot_definition_name TEXT, @@ -4457,8 +4457,8 @@ CREATE TABLE slot_definition_equals_string_in ( PRIMARY KEY (slot_definition_name, equals_string_in), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_equals_string_in_equals_string_in ON slot_definition_equals_string_in (equals_string_in); CREATE INDEX ix_slot_definition_equals_string_in_slot_definition_name ON slot_definition_equals_string_in (slot_definition_name); +CREATE INDEX ix_slot_definition_equals_string_in_equals_string_in ON slot_definition_equals_string_in (equals_string_in); CREATE TABLE slot_definition_none_of ( slot_definition_name TEXT, @@ -4467,8 +4467,8 @@ CREATE TABLE slot_definition_none_of ( FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name), FOREIGN KEY(none_of_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_slot_definition_none_of_none_of_id ON slot_definition_none_of (none_of_id); CREATE INDEX ix_slot_definition_none_of_slot_definition_name ON slot_definition_none_of (slot_definition_name); +CREATE INDEX ix_slot_definition_none_of_none_of_id ON slot_definition_none_of (none_of_id); CREATE TABLE slot_definition_exactly_one_of ( slot_definition_name TEXT, @@ -4477,8 +4477,8 @@ CREATE TABLE slot_definition_exactly_one_of ( FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name), FOREIGN KEY(exactly_one_of_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_slot_definition_exactly_one_of_slot_definition_name ON slot_definition_exactly_one_of (slot_definition_name); CREATE INDEX ix_slot_definition_exactly_one_of_exactly_one_of_id ON slot_definition_exactly_one_of (exactly_one_of_id); +CREATE INDEX ix_slot_definition_exactly_one_of_slot_definition_name ON slot_definition_exactly_one_of (slot_definition_name); CREATE TABLE slot_definition_any_of ( slot_definition_name TEXT, @@ -4487,8 +4487,8 @@ CREATE TABLE slot_definition_any_of ( FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name), FOREIGN KEY(any_of_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_slot_definition_any_of_slot_definition_name ON slot_definition_any_of (slot_definition_name); CREATE INDEX ix_slot_definition_any_of_any_of_id ON slot_definition_any_of (any_of_id); +CREATE INDEX ix_slot_definition_any_of_slot_definition_name ON slot_definition_any_of (slot_definition_name); CREATE TABLE slot_definition_all_of ( slot_definition_name TEXT, @@ -4497,8 +4497,8 @@ CREATE TABLE slot_definition_all_of ( FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name), FOREIGN KEY(all_of_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_slot_definition_all_of_all_of_id ON slot_definition_all_of (all_of_id); CREATE INDEX ix_slot_definition_all_of_slot_definition_name ON slot_definition_all_of (slot_definition_name); +CREATE INDEX ix_slot_definition_all_of_all_of_id ON slot_definition_all_of (all_of_id); CREATE TABLE slot_definition_mixins ( slot_definition_name TEXT, @@ -4507,8 +4507,8 @@ CREATE TABLE slot_definition_mixins ( FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name), FOREIGN KEY(mixins_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_mixins_mixins_name ON slot_definition_mixins (mixins_name); CREATE INDEX ix_slot_definition_mixins_slot_definition_name ON slot_definition_mixins (slot_definition_name); +CREATE INDEX ix_slot_definition_mixins_mixins_name ON slot_definition_mixins (mixins_name); CREATE TABLE slot_definition_apply_to ( slot_definition_name TEXT, @@ -4526,8 +4526,8 @@ CREATE TABLE slot_definition_values_from ( PRIMARY KEY (slot_definition_name, values_from), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_values_from_values_from ON slot_definition_values_from (values_from); CREATE INDEX ix_slot_definition_values_from_slot_definition_name ON slot_definition_values_from (slot_definition_name); +CREATE INDEX ix_slot_definition_values_from_values_from ON slot_definition_values_from (values_from); CREATE TABLE slot_definition_id_prefixes ( slot_definition_name TEXT, @@ -4535,8 +4535,8 @@ CREATE TABLE slot_definition_id_prefixes ( PRIMARY KEY (slot_definition_name, id_prefixes), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_id_prefixes_slot_definition_name ON slot_definition_id_prefixes (slot_definition_name); CREATE INDEX ix_slot_definition_id_prefixes_id_prefixes ON slot_definition_id_prefixes (id_prefixes); +CREATE INDEX ix_slot_definition_id_prefixes_slot_definition_name ON slot_definition_id_prefixes (slot_definition_name); CREATE TABLE slot_definition_implements ( slot_definition_name TEXT, @@ -4544,8 +4544,8 @@ CREATE TABLE slot_definition_implements ( PRIMARY KEY (slot_definition_name, implements), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_implements_slot_definition_name ON slot_definition_implements (slot_definition_name); CREATE INDEX ix_slot_definition_implements_implements ON slot_definition_implements (implements); +CREATE INDEX ix_slot_definition_implements_slot_definition_name ON slot_definition_implements (slot_definition_name); CREATE TABLE slot_definition_instantiates ( slot_definition_name TEXT, @@ -4553,8 +4553,8 @@ CREATE TABLE slot_definition_instantiates ( PRIMARY KEY (slot_definition_name, instantiates), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_instantiates_slot_definition_name ON slot_definition_instantiates (slot_definition_name); CREATE INDEX ix_slot_definition_instantiates_instantiates ON slot_definition_instantiates (instantiates); +CREATE INDEX ix_slot_definition_instantiates_slot_definition_name ON slot_definition_instantiates (slot_definition_name); CREATE TABLE slot_definition_todos ( slot_definition_name TEXT, @@ -4562,8 +4562,8 @@ CREATE TABLE slot_definition_todos ( PRIMARY KEY (slot_definition_name, todos), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_todos_todos ON slot_definition_todos (todos); CREATE INDEX ix_slot_definition_todos_slot_definition_name ON slot_definition_todos (slot_definition_name); +CREATE INDEX ix_slot_definition_todos_todos ON slot_definition_todos (todos); CREATE TABLE slot_definition_notes ( slot_definition_name TEXT, @@ -4571,8 +4571,8 @@ CREATE TABLE slot_definition_notes ( PRIMARY KEY (slot_definition_name, notes), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_notes_slot_definition_name ON slot_definition_notes (slot_definition_name); CREATE INDEX ix_slot_definition_notes_notes ON slot_definition_notes (notes); +CREATE INDEX ix_slot_definition_notes_slot_definition_name ON slot_definition_notes (slot_definition_name); CREATE TABLE slot_definition_comments ( slot_definition_name TEXT, @@ -4580,8 +4580,8 @@ CREATE TABLE slot_definition_comments ( PRIMARY KEY (slot_definition_name, comments), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_comments_comments ON slot_definition_comments (comments); CREATE INDEX ix_slot_definition_comments_slot_definition_name ON slot_definition_comments (slot_definition_name); +CREATE INDEX ix_slot_definition_comments_comments ON slot_definition_comments (comments); CREATE TABLE slot_definition_see_also ( slot_definition_name TEXT, @@ -4589,8 +4589,8 @@ CREATE TABLE slot_definition_see_also ( PRIMARY KEY (slot_definition_name, see_also), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_see_also_see_also ON slot_definition_see_also (see_also); CREATE INDEX ix_slot_definition_see_also_slot_definition_name ON slot_definition_see_also (slot_definition_name); +CREATE INDEX ix_slot_definition_see_also_see_also ON slot_definition_see_also (see_also); CREATE TABLE slot_definition_aliases ( slot_definition_name TEXT, @@ -4607,8 +4607,8 @@ CREATE TABLE slot_definition_mappings ( PRIMARY KEY (slot_definition_name, mappings), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_mappings_slot_definition_name ON slot_definition_mappings (slot_definition_name); CREATE INDEX ix_slot_definition_mappings_mappings ON slot_definition_mappings (mappings); +CREATE INDEX ix_slot_definition_mappings_slot_definition_name ON slot_definition_mappings (slot_definition_name); CREATE TABLE slot_definition_exact_mappings ( slot_definition_name TEXT, @@ -4616,8 +4616,8 @@ CREATE TABLE slot_definition_exact_mappings ( PRIMARY KEY (slot_definition_name, exact_mappings), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_exact_mappings_exact_mappings ON slot_definition_exact_mappings (exact_mappings); CREATE INDEX ix_slot_definition_exact_mappings_slot_definition_name ON slot_definition_exact_mappings (slot_definition_name); +CREATE INDEX ix_slot_definition_exact_mappings_exact_mappings ON slot_definition_exact_mappings (exact_mappings); CREATE TABLE slot_definition_close_mappings ( slot_definition_name TEXT, @@ -4643,8 +4643,8 @@ CREATE TABLE slot_definition_narrow_mappings ( PRIMARY KEY (slot_definition_name, narrow_mappings), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_narrow_mappings_narrow_mappings ON slot_definition_narrow_mappings (narrow_mappings); CREATE INDEX ix_slot_definition_narrow_mappings_slot_definition_name ON slot_definition_narrow_mappings (slot_definition_name); +CREATE INDEX ix_slot_definition_narrow_mappings_narrow_mappings ON slot_definition_narrow_mappings (narrow_mappings); CREATE TABLE slot_definition_broad_mappings ( slot_definition_name TEXT, @@ -4670,8 +4670,8 @@ CREATE TABLE slot_definition_category ( PRIMARY KEY (slot_definition_name, category), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_category_category ON slot_definition_category (category); CREATE INDEX ix_slot_definition_category_slot_definition_name ON slot_definition_category (slot_definition_name); +CREATE INDEX ix_slot_definition_category_category ON slot_definition_category (category); CREATE TABLE slot_definition_keyword ( slot_definition_name TEXT, @@ -4689,8 +4689,8 @@ CREATE TABLE class_expression_any_of ( FOREIGN KEY(class_expression_id) REFERENCES class_expression (id), FOREIGN KEY(any_of_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_class_expression_any_of_class_expression_id ON class_expression_any_of (class_expression_id); CREATE INDEX ix_class_expression_any_of_any_of_id ON class_expression_any_of (any_of_id); +CREATE INDEX ix_class_expression_any_of_class_expression_id ON class_expression_any_of (class_expression_id); CREATE TABLE class_expression_exactly_one_of ( class_expression_id INTEGER, @@ -4699,8 +4699,8 @@ CREATE TABLE class_expression_exactly_one_of ( FOREIGN KEY(class_expression_id) REFERENCES class_expression (id), FOREIGN KEY(exactly_one_of_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_class_expression_exactly_one_of_class_expression_id ON class_expression_exactly_one_of (class_expression_id); CREATE INDEX ix_class_expression_exactly_one_of_exactly_one_of_id ON class_expression_exactly_one_of (exactly_one_of_id); +CREATE INDEX ix_class_expression_exactly_one_of_class_expression_id ON class_expression_exactly_one_of (class_expression_id); CREATE TABLE class_expression_none_of ( class_expression_id INTEGER, @@ -4709,8 +4709,8 @@ CREATE TABLE class_expression_none_of ( FOREIGN KEY(class_expression_id) REFERENCES class_expression (id), FOREIGN KEY(none_of_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_class_expression_none_of_none_of_id ON class_expression_none_of (none_of_id); CREATE INDEX ix_class_expression_none_of_class_expression_id ON class_expression_none_of (class_expression_id); +CREATE INDEX ix_class_expression_none_of_none_of_id ON class_expression_none_of (none_of_id); CREATE TABLE class_expression_all_of ( class_expression_id INTEGER, @@ -4719,8 +4719,8 @@ CREATE TABLE class_expression_all_of ( FOREIGN KEY(class_expression_id) REFERENCES class_expression (id), FOREIGN KEY(all_of_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_class_expression_all_of_all_of_id ON class_expression_all_of (all_of_id); CREATE INDEX ix_class_expression_all_of_class_expression_id ON class_expression_all_of (class_expression_id); +CREATE INDEX ix_class_expression_all_of_all_of_id ON class_expression_all_of (all_of_id); CREATE TABLE anonymous_class_expression_any_of ( anonymous_class_expression_id INTEGER, @@ -4749,8 +4749,8 @@ CREATE TABLE anonymous_class_expression_none_of ( FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id), FOREIGN KEY(none_of_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_none_of_anonymous_class_expression_id ON anonymous_class_expression_none_of (anonymous_class_expression_id); CREATE INDEX ix_anonymous_class_expression_none_of_none_of_id ON anonymous_class_expression_none_of (none_of_id); +CREATE INDEX ix_anonymous_class_expression_none_of_anonymous_class_expression_id ON anonymous_class_expression_none_of (anonymous_class_expression_id); CREATE TABLE anonymous_class_expression_all_of ( anonymous_class_expression_id INTEGER, @@ -4759,8 +4759,8 @@ CREATE TABLE anonymous_class_expression_all_of ( FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id), FOREIGN KEY(all_of_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_all_of_all_of_id ON anonymous_class_expression_all_of (all_of_id); CREATE INDEX ix_anonymous_class_expression_all_of_anonymous_class_expression_id ON anonymous_class_expression_all_of (anonymous_class_expression_id); +CREATE INDEX ix_anonymous_class_expression_all_of_all_of_id ON anonymous_class_expression_all_of (all_of_id); CREATE TABLE anonymous_class_expression_todos ( anonymous_class_expression_id INTEGER, @@ -4786,8 +4786,8 @@ CREATE TABLE anonymous_class_expression_comments ( PRIMARY KEY (anonymous_class_expression_id, comments), FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_comments_comments ON anonymous_class_expression_comments (comments); CREATE INDEX ix_anonymous_class_expression_comments_anonymous_class_expression_id ON anonymous_class_expression_comments (anonymous_class_expression_id); +CREATE INDEX ix_anonymous_class_expression_comments_comments ON anonymous_class_expression_comments (comments); CREATE TABLE anonymous_class_expression_see_also ( anonymous_class_expression_id INTEGER, @@ -4795,8 +4795,8 @@ CREATE TABLE anonymous_class_expression_see_also ( PRIMARY KEY (anonymous_class_expression_id, see_also), FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_see_also_see_also ON anonymous_class_expression_see_also (see_also); CREATE INDEX ix_anonymous_class_expression_see_also_anonymous_class_expression_id ON anonymous_class_expression_see_also (anonymous_class_expression_id); +CREATE INDEX ix_anonymous_class_expression_see_also_see_also ON anonymous_class_expression_see_also (see_also); CREATE TABLE anonymous_class_expression_aliases ( anonymous_class_expression_id INTEGER, @@ -4804,8 +4804,8 @@ CREATE TABLE anonymous_class_expression_aliases ( PRIMARY KEY (anonymous_class_expression_id, aliases), FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_aliases_anonymous_class_expression_id ON anonymous_class_expression_aliases (anonymous_class_expression_id); CREATE INDEX ix_anonymous_class_expression_aliases_aliases ON anonymous_class_expression_aliases (aliases); +CREATE INDEX ix_anonymous_class_expression_aliases_anonymous_class_expression_id ON anonymous_class_expression_aliases (anonymous_class_expression_id); CREATE TABLE anonymous_class_expression_mappings ( anonymous_class_expression_id INTEGER, @@ -4813,8 +4813,8 @@ CREATE TABLE anonymous_class_expression_mappings ( PRIMARY KEY (anonymous_class_expression_id, mappings), FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_mappings_anonymous_class_expression_id ON anonymous_class_expression_mappings (anonymous_class_expression_id); CREATE INDEX ix_anonymous_class_expression_mappings_mappings ON anonymous_class_expression_mappings (mappings); +CREATE INDEX ix_anonymous_class_expression_mappings_anonymous_class_expression_id ON anonymous_class_expression_mappings (anonymous_class_expression_id); CREATE TABLE anonymous_class_expression_exact_mappings ( anonymous_class_expression_id INTEGER, @@ -4822,8 +4822,8 @@ CREATE TABLE anonymous_class_expression_exact_mappings ( PRIMARY KEY (anonymous_class_expression_id, exact_mappings), FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_exact_mappings_anonymous_class_expression_id ON anonymous_class_expression_exact_mappings (anonymous_class_expression_id); CREATE INDEX ix_anonymous_class_expression_exact_mappings_exact_mappings ON anonymous_class_expression_exact_mappings (exact_mappings); +CREATE INDEX ix_anonymous_class_expression_exact_mappings_anonymous_class_expression_id ON anonymous_class_expression_exact_mappings (anonymous_class_expression_id); CREATE TABLE anonymous_class_expression_close_mappings ( anonymous_class_expression_id INTEGER, @@ -4831,8 +4831,8 @@ CREATE TABLE anonymous_class_expression_close_mappings ( PRIMARY KEY (anonymous_class_expression_id, close_mappings), FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_close_mappings_close_mappings ON anonymous_class_expression_close_mappings (close_mappings); CREATE INDEX ix_anonymous_class_expression_close_mappings_anonymous_class_expression_id ON anonymous_class_expression_close_mappings (anonymous_class_expression_id); +CREATE INDEX ix_anonymous_class_expression_close_mappings_close_mappings ON anonymous_class_expression_close_mappings (close_mappings); CREATE TABLE anonymous_class_expression_related_mappings ( anonymous_class_expression_id INTEGER, @@ -4849,8 +4849,8 @@ CREATE TABLE anonymous_class_expression_narrow_mappings ( PRIMARY KEY (anonymous_class_expression_id, narrow_mappings), FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_narrow_mappings_anonymous_class_expression_id ON anonymous_class_expression_narrow_mappings (anonymous_class_expression_id); CREATE INDEX ix_anonymous_class_expression_narrow_mappings_narrow_mappings ON anonymous_class_expression_narrow_mappings (narrow_mappings); +CREATE INDEX ix_anonymous_class_expression_narrow_mappings_anonymous_class_expression_id ON anonymous_class_expression_narrow_mappings (anonymous_class_expression_id); CREATE TABLE anonymous_class_expression_broad_mappings ( anonymous_class_expression_id INTEGER, @@ -4858,8 +4858,8 @@ CREATE TABLE anonymous_class_expression_broad_mappings ( PRIMARY KEY (anonymous_class_expression_id, broad_mappings), FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_broad_mappings_broad_mappings ON anonymous_class_expression_broad_mappings (broad_mappings); CREATE INDEX ix_anonymous_class_expression_broad_mappings_anonymous_class_expression_id ON anonymous_class_expression_broad_mappings (anonymous_class_expression_id); +CREATE INDEX ix_anonymous_class_expression_broad_mappings_broad_mappings ON anonymous_class_expression_broad_mappings (broad_mappings); CREATE TABLE anonymous_class_expression_contributors ( anonymous_class_expression_id INTEGER, @@ -4876,8 +4876,8 @@ CREATE TABLE anonymous_class_expression_category ( PRIMARY KEY (anonymous_class_expression_id, category), FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_category_anonymous_class_expression_id ON anonymous_class_expression_category (anonymous_class_expression_id); CREATE INDEX ix_anonymous_class_expression_category_category ON anonymous_class_expression_category (category); +CREATE INDEX ix_anonymous_class_expression_category_anonymous_class_expression_id ON anonymous_class_expression_category (anonymous_class_expression_id); CREATE TABLE anonymous_class_expression_keyword ( anonymous_class_expression_id INTEGER, @@ -4895,8 +4895,8 @@ CREATE TABLE class_definition_slots ( FOREIGN KEY(class_definition_name) REFERENCES class_definition (name), FOREIGN KEY(slots_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_class_definition_slots_class_definition_name ON class_definition_slots (class_definition_name); CREATE INDEX ix_class_definition_slots_slots_name ON class_definition_slots (slots_name); +CREATE INDEX ix_class_definition_slots_class_definition_name ON class_definition_slots (class_definition_name); CREATE TABLE class_definition_union_of ( class_definition_name TEXT, @@ -4905,8 +4905,8 @@ CREATE TABLE class_definition_union_of ( FOREIGN KEY(class_definition_name) REFERENCES class_definition (name), FOREIGN KEY(union_of_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_union_of_union_of_name ON class_definition_union_of (union_of_name); CREATE INDEX ix_class_definition_union_of_class_definition_name ON class_definition_union_of (class_definition_name); +CREATE INDEX ix_class_definition_union_of_union_of_name ON class_definition_union_of (union_of_name); CREATE TABLE class_definition_defining_slots ( class_definition_name TEXT, @@ -4915,8 +4915,8 @@ CREATE TABLE class_definition_defining_slots ( FOREIGN KEY(class_definition_name) REFERENCES class_definition (name), FOREIGN KEY(defining_slots_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_class_definition_defining_slots_defining_slots_name ON class_definition_defining_slots (defining_slots_name); CREATE INDEX ix_class_definition_defining_slots_class_definition_name ON class_definition_defining_slots (class_definition_name); +CREATE INDEX ix_class_definition_defining_slots_defining_slots_name ON class_definition_defining_slots (defining_slots_name); CREATE TABLE class_definition_disjoint_with ( class_definition_name TEXT, @@ -4925,8 +4925,8 @@ CREATE TABLE class_definition_disjoint_with ( FOREIGN KEY(class_definition_name) REFERENCES class_definition (name), FOREIGN KEY(disjoint_with_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_disjoint_with_class_definition_name ON class_definition_disjoint_with (class_definition_name); CREATE INDEX ix_class_definition_disjoint_with_disjoint_with_name ON class_definition_disjoint_with (disjoint_with_name); +CREATE INDEX ix_class_definition_disjoint_with_class_definition_name ON class_definition_disjoint_with (class_definition_name); CREATE TABLE class_definition_any_of ( class_definition_name TEXT, @@ -4945,8 +4945,8 @@ CREATE TABLE class_definition_exactly_one_of ( FOREIGN KEY(class_definition_name) REFERENCES class_definition (name), FOREIGN KEY(exactly_one_of_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_class_definition_exactly_one_of_class_definition_name ON class_definition_exactly_one_of (class_definition_name); CREATE INDEX ix_class_definition_exactly_one_of_exactly_one_of_id ON class_definition_exactly_one_of (exactly_one_of_id); +CREATE INDEX ix_class_definition_exactly_one_of_class_definition_name ON class_definition_exactly_one_of (class_definition_name); CREATE TABLE class_definition_none_of ( class_definition_name TEXT, @@ -4965,8 +4965,8 @@ CREATE TABLE class_definition_all_of ( FOREIGN KEY(class_definition_name) REFERENCES class_definition (name), FOREIGN KEY(all_of_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_class_definition_all_of_class_definition_name ON class_definition_all_of (class_definition_name); CREATE INDEX ix_class_definition_all_of_all_of_id ON class_definition_all_of (all_of_id); +CREATE INDEX ix_class_definition_all_of_class_definition_name ON class_definition_all_of (class_definition_name); CREATE TABLE class_definition_mixins ( class_definition_name TEXT, @@ -4975,8 +4975,8 @@ CREATE TABLE class_definition_mixins ( FOREIGN KEY(class_definition_name) REFERENCES class_definition (name), FOREIGN KEY(mixins_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_mixins_mixins_name ON class_definition_mixins (mixins_name); CREATE INDEX ix_class_definition_mixins_class_definition_name ON class_definition_mixins (class_definition_name); +CREATE INDEX ix_class_definition_mixins_mixins_name ON class_definition_mixins (mixins_name); CREATE TABLE class_definition_apply_to ( class_definition_name TEXT, @@ -4985,8 +4985,8 @@ CREATE TABLE class_definition_apply_to ( FOREIGN KEY(class_definition_name) REFERENCES class_definition (name), FOREIGN KEY(apply_to_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_apply_to_apply_to_name ON class_definition_apply_to (apply_to_name); CREATE INDEX ix_class_definition_apply_to_class_definition_name ON class_definition_apply_to (class_definition_name); +CREATE INDEX ix_class_definition_apply_to_apply_to_name ON class_definition_apply_to (apply_to_name); CREATE TABLE class_definition_values_from ( class_definition_name TEXT, @@ -4994,8 +4994,8 @@ CREATE TABLE class_definition_values_from ( PRIMARY KEY (class_definition_name, values_from), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_values_from_values_from ON class_definition_values_from (values_from); CREATE INDEX ix_class_definition_values_from_class_definition_name ON class_definition_values_from (class_definition_name); +CREATE INDEX ix_class_definition_values_from_values_from ON class_definition_values_from (values_from); CREATE TABLE class_definition_id_prefixes ( class_definition_name TEXT, @@ -5003,8 +5003,8 @@ CREATE TABLE class_definition_id_prefixes ( PRIMARY KEY (class_definition_name, id_prefixes), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_id_prefixes_class_definition_name ON class_definition_id_prefixes (class_definition_name); CREATE INDEX ix_class_definition_id_prefixes_id_prefixes ON class_definition_id_prefixes (id_prefixes); +CREATE INDEX ix_class_definition_id_prefixes_class_definition_name ON class_definition_id_prefixes (class_definition_name); CREATE TABLE class_definition_implements ( class_definition_name TEXT, @@ -5012,8 +5012,8 @@ CREATE TABLE class_definition_implements ( PRIMARY KEY (class_definition_name, implements), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_implements_class_definition_name ON class_definition_implements (class_definition_name); CREATE INDEX ix_class_definition_implements_implements ON class_definition_implements (implements); +CREATE INDEX ix_class_definition_implements_class_definition_name ON class_definition_implements (class_definition_name); CREATE TABLE class_definition_instantiates ( class_definition_name TEXT, @@ -5021,8 +5021,8 @@ CREATE TABLE class_definition_instantiates ( PRIMARY KEY (class_definition_name, instantiates), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_instantiates_instantiates ON class_definition_instantiates (instantiates); CREATE INDEX ix_class_definition_instantiates_class_definition_name ON class_definition_instantiates (class_definition_name); +CREATE INDEX ix_class_definition_instantiates_instantiates ON class_definition_instantiates (instantiates); CREATE TABLE class_definition_todos ( class_definition_name TEXT, @@ -5030,8 +5030,8 @@ CREATE TABLE class_definition_todos ( PRIMARY KEY (class_definition_name, todos), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_todos_class_definition_name ON class_definition_todos (class_definition_name); CREATE INDEX ix_class_definition_todos_todos ON class_definition_todos (todos); +CREATE INDEX ix_class_definition_todos_class_definition_name ON class_definition_todos (class_definition_name); CREATE TABLE class_definition_notes ( class_definition_name TEXT, @@ -5048,8 +5048,8 @@ CREATE TABLE class_definition_comments ( PRIMARY KEY (class_definition_name, comments), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_comments_comments ON class_definition_comments (comments); CREATE INDEX ix_class_definition_comments_class_definition_name ON class_definition_comments (class_definition_name); +CREATE INDEX ix_class_definition_comments_comments ON class_definition_comments (comments); CREATE TABLE class_definition_see_also ( class_definition_name TEXT, @@ -5057,8 +5057,8 @@ CREATE TABLE class_definition_see_also ( PRIMARY KEY (class_definition_name, see_also), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_see_also_class_definition_name ON class_definition_see_also (class_definition_name); CREATE INDEX ix_class_definition_see_also_see_also ON class_definition_see_also (see_also); +CREATE INDEX ix_class_definition_see_also_class_definition_name ON class_definition_see_also (class_definition_name); CREATE TABLE class_definition_aliases ( class_definition_name TEXT, @@ -5066,8 +5066,8 @@ CREATE TABLE class_definition_aliases ( PRIMARY KEY (class_definition_name, aliases), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_aliases_aliases ON class_definition_aliases (aliases); CREATE INDEX ix_class_definition_aliases_class_definition_name ON class_definition_aliases (class_definition_name); +CREATE INDEX ix_class_definition_aliases_aliases ON class_definition_aliases (aliases); CREATE TABLE class_definition_mappings ( class_definition_name TEXT, @@ -5075,8 +5075,8 @@ CREATE TABLE class_definition_mappings ( PRIMARY KEY (class_definition_name, mappings), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_mappings_class_definition_name ON class_definition_mappings (class_definition_name); CREATE INDEX ix_class_definition_mappings_mappings ON class_definition_mappings (mappings); +CREATE INDEX ix_class_definition_mappings_class_definition_name ON class_definition_mappings (class_definition_name); CREATE TABLE class_definition_exact_mappings ( class_definition_name TEXT, @@ -5084,8 +5084,8 @@ CREATE TABLE class_definition_exact_mappings ( PRIMARY KEY (class_definition_name, exact_mappings), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_exact_mappings_class_definition_name ON class_definition_exact_mappings (class_definition_name); CREATE INDEX ix_class_definition_exact_mappings_exact_mappings ON class_definition_exact_mappings (exact_mappings); +CREATE INDEX ix_class_definition_exact_mappings_class_definition_name ON class_definition_exact_mappings (class_definition_name); CREATE TABLE class_definition_close_mappings ( class_definition_name TEXT, @@ -5093,8 +5093,8 @@ CREATE TABLE class_definition_close_mappings ( PRIMARY KEY (class_definition_name, close_mappings), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_close_mappings_class_definition_name ON class_definition_close_mappings (class_definition_name); CREATE INDEX ix_class_definition_close_mappings_close_mappings ON class_definition_close_mappings (close_mappings); +CREATE INDEX ix_class_definition_close_mappings_class_definition_name ON class_definition_close_mappings (class_definition_name); CREATE TABLE class_definition_related_mappings ( class_definition_name TEXT, @@ -5102,8 +5102,8 @@ CREATE TABLE class_definition_related_mappings ( PRIMARY KEY (class_definition_name, related_mappings), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_related_mappings_class_definition_name ON class_definition_related_mappings (class_definition_name); CREATE INDEX ix_class_definition_related_mappings_related_mappings ON class_definition_related_mappings (related_mappings); +CREATE INDEX ix_class_definition_related_mappings_class_definition_name ON class_definition_related_mappings (class_definition_name); CREATE TABLE class_definition_narrow_mappings ( class_definition_name TEXT, @@ -5111,8 +5111,8 @@ CREATE TABLE class_definition_narrow_mappings ( PRIMARY KEY (class_definition_name, narrow_mappings), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_narrow_mappings_narrow_mappings ON class_definition_narrow_mappings (narrow_mappings); CREATE INDEX ix_class_definition_narrow_mappings_class_definition_name ON class_definition_narrow_mappings (class_definition_name); +CREATE INDEX ix_class_definition_narrow_mappings_narrow_mappings ON class_definition_narrow_mappings (narrow_mappings); CREATE TABLE class_definition_broad_mappings ( class_definition_name TEXT, @@ -5120,8 +5120,8 @@ CREATE TABLE class_definition_broad_mappings ( PRIMARY KEY (class_definition_name, broad_mappings), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_broad_mappings_broad_mappings ON class_definition_broad_mappings (broad_mappings); CREATE INDEX ix_class_definition_broad_mappings_class_definition_name ON class_definition_broad_mappings (class_definition_name); +CREATE INDEX ix_class_definition_broad_mappings_broad_mappings ON class_definition_broad_mappings (broad_mappings); CREATE TABLE class_definition_contributors ( class_definition_name TEXT, @@ -5129,8 +5129,8 @@ CREATE TABLE class_definition_contributors ( PRIMARY KEY (class_definition_name, contributors), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_contributors_contributors ON class_definition_contributors (contributors); CREATE INDEX ix_class_definition_contributors_class_definition_name ON class_definition_contributors (class_definition_name); +CREATE INDEX ix_class_definition_contributors_contributors ON class_definition_contributors (contributors); CREATE TABLE class_definition_category ( class_definition_name TEXT, @@ -5147,8 +5147,8 @@ CREATE TABLE class_definition_keyword ( PRIMARY KEY (class_definition_name, keyword), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_keyword_class_definition_name ON class_definition_keyword (class_definition_name); CREATE INDEX ix_class_definition_keyword_keyword ON class_definition_keyword (keyword); +CREATE INDEX ix_class_definition_keyword_class_definition_name ON class_definition_keyword (class_definition_name); CREATE TABLE dimension_expression_todos ( dimension_expression_id INTEGER, @@ -5228,8 +5228,8 @@ CREATE TABLE dimension_expression_related_mappings ( PRIMARY KEY (dimension_expression_id, related_mappings), FOREIGN KEY(dimension_expression_id) REFERENCES dimension_expression (id) ); -CREATE INDEX ix_dimension_expression_related_mappings_related_mappings ON dimension_expression_related_mappings (related_mappings); CREATE INDEX ix_dimension_expression_related_mappings_dimension_expression_id ON dimension_expression_related_mappings (dimension_expression_id); +CREATE INDEX ix_dimension_expression_related_mappings_related_mappings ON dimension_expression_related_mappings (related_mappings); CREATE TABLE dimension_expression_narrow_mappings ( dimension_expression_id INTEGER, @@ -5408,8 +5408,8 @@ CREATE TABLE import_expression_todos ( PRIMARY KEY (import_expression_id, todos), FOREIGN KEY(import_expression_id) REFERENCES import_expression (id) ); -CREATE INDEX ix_import_expression_todos_todos ON import_expression_todos (todos); CREATE INDEX ix_import_expression_todos_import_expression_id ON import_expression_todos (import_expression_id); +CREATE INDEX ix_import_expression_todos_todos ON import_expression_todos (todos); CREATE TABLE import_expression_notes ( import_expression_id INTEGER, @@ -5426,8 +5426,8 @@ CREATE TABLE import_expression_comments ( PRIMARY KEY (import_expression_id, comments), FOREIGN KEY(import_expression_id) REFERENCES import_expression (id) ); -CREATE INDEX ix_import_expression_comments_import_expression_id ON import_expression_comments (import_expression_id); CREATE INDEX ix_import_expression_comments_comments ON import_expression_comments (comments); +CREATE INDEX ix_import_expression_comments_import_expression_id ON import_expression_comments (import_expression_id); CREATE TABLE import_expression_see_also ( import_expression_id INTEGER, @@ -5507,8 +5507,8 @@ CREATE TABLE import_expression_contributors ( PRIMARY KEY (import_expression_id, contributors), FOREIGN KEY(import_expression_id) REFERENCES import_expression (id) ); -CREATE INDEX ix_import_expression_contributors_contributors ON import_expression_contributors (contributors); CREATE INDEX ix_import_expression_contributors_import_expression_id ON import_expression_contributors (import_expression_id); +CREATE INDEX ix_import_expression_contributors_contributors ON import_expression_contributors (contributors); CREATE TABLE import_expression_category ( import_expression_id INTEGER, @@ -5534,8 +5534,8 @@ CREATE TABLE "UnitOfMeasure_exact_mappings" ( PRIMARY KEY ("UnitOfMeasure_id", exact_mappings), FOREIGN KEY("UnitOfMeasure_id") REFERENCES "UnitOfMeasure" (id) ); -CREATE INDEX "ix_UnitOfMeasure_exact_mappings_exact_mappings" ON "UnitOfMeasure_exact_mappings" (exact_mappings); CREATE INDEX "ix_UnitOfMeasure_exact_mappings_UnitOfMeasure_id" ON "UnitOfMeasure_exact_mappings" ("UnitOfMeasure_id"); +CREATE INDEX "ix_UnitOfMeasure_exact_mappings_exact_mappings" ON "UnitOfMeasure_exact_mappings" (exact_mappings); CREATE TABLE slot_expression ( id INTEGER NOT NULL, @@ -5606,24 +5606,24 @@ CREATE TABLE local_name ( FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_local_name_slot_definition_name ON local_name (slot_definition_name); CREATE INDEX ix_local_name_type_definition_name ON local_name (type_definition_name); -CREATE INDEX ix_local_name_definition_name ON local_name (definition_name); -CREATE INDEX local_name_type_definition_name_local_name_source_idx ON local_name (type_definition_name, local_name_source); -CREATE INDEX local_name_subset_definition_name_local_name_source_idx ON local_name (subset_definition_name, local_name_source); +CREATE INDEX local_name_definition_name_local_name_source_idx ON local_name (definition_name, local_name_source); CREATE INDEX ix_local_name_element_name ON local_name (element_name); CREATE INDEX ix_local_name_local_name_value ON local_name (local_name_value); -CREATE INDEX local_name_definition_name_local_name_source_idx ON local_name (definition_name, local_name_source); -CREATE INDEX local_name_enum_definition_name_local_name_source_idx ON local_name (enum_definition_name, local_name_source); -CREATE INDEX ix_local_name_class_definition_name ON local_name (class_definition_name); +CREATE INDEX ix_local_name_slot_definition_name ON local_name (slot_definition_name); CREATE INDEX local_name_element_name_local_name_source_idx ON local_name (element_name, local_name_source); -CREATE INDEX local_name_class_definition_name_local_name_source_idx ON local_name (class_definition_name, local_name_source); +CREATE INDEX ix_local_name_class_definition_name ON local_name (class_definition_name); +CREATE INDEX local_name_enum_definition_name_local_name_source_idx ON local_name (enum_definition_name, local_name_source); CREATE INDEX ix_local_name_schema_definition_name ON local_name (schema_definition_name); -CREATE INDEX local_name_slot_definition_name_local_name_source_idx ON local_name (slot_definition_name, local_name_source); -CREATE INDEX ix_local_name_subset_definition_name ON local_name (subset_definition_name); CREATE INDEX ix_local_name_enum_definition_name ON local_name (enum_definition_name); CREATE INDEX local_name_schema_definition_name_local_name_source_idx ON local_name (schema_definition_name, local_name_source); +CREATE INDEX local_name_type_definition_name_local_name_source_idx ON local_name (type_definition_name, local_name_source); +CREATE INDEX ix_local_name_subset_definition_name ON local_name (subset_definition_name); +CREATE INDEX local_name_subset_definition_name_local_name_source_idx ON local_name (subset_definition_name, local_name_source); +CREATE INDEX local_name_slot_definition_name_local_name_source_idx ON local_name (slot_definition_name, local_name_source); CREATE INDEX ix_local_name_local_name_source ON local_name (local_name_source); +CREATE INDEX local_name_class_definition_name_local_name_source_idx ON local_name (class_definition_name, local_name_source); +CREATE INDEX ix_local_name_definition_name ON local_name (definition_name); CREATE TABLE permissible_value ( text TEXT NOT NULL, @@ -5674,8 +5674,8 @@ CREATE TABLE element_in_subset ( FOREIGN KEY(element_name) REFERENCES element (name), FOREIGN KEY(in_subset_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_element_in_subset_element_name ON element_in_subset (element_name); CREATE INDEX ix_element_in_subset_in_subset_name ON element_in_subset (in_subset_name); +CREATE INDEX ix_element_in_subset_element_name ON element_in_subset (element_name); CREATE TABLE schema_definition_in_subset ( schema_definition_name TEXT, @@ -5693,8 +5693,8 @@ CREATE TABLE type_expression_equals_string_in ( PRIMARY KEY (type_expression_id, equals_string_in), FOREIGN KEY(type_expression_id) REFERENCES type_expression (id) ); -CREATE INDEX ix_type_expression_equals_string_in_equals_string_in ON type_expression_equals_string_in (equals_string_in); CREATE INDEX ix_type_expression_equals_string_in_type_expression_id ON type_expression_equals_string_in (type_expression_id); +CREATE INDEX ix_type_expression_equals_string_in_equals_string_in ON type_expression_equals_string_in (equals_string_in); CREATE TABLE type_expression_none_of ( type_expression_id INTEGER, @@ -5723,8 +5723,8 @@ CREATE TABLE type_expression_any_of ( FOREIGN KEY(type_expression_id) REFERENCES type_expression (id), FOREIGN KEY(any_of_id) REFERENCES anonymous_type_expression (id) ); -CREATE INDEX ix_type_expression_any_of_any_of_id ON type_expression_any_of (any_of_id); CREATE INDEX ix_type_expression_any_of_type_expression_id ON type_expression_any_of (type_expression_id); +CREATE INDEX ix_type_expression_any_of_any_of_id ON type_expression_any_of (any_of_id); CREATE TABLE type_expression_all_of ( type_expression_id INTEGER, @@ -5752,8 +5752,8 @@ CREATE TABLE anonymous_type_expression_none_of ( FOREIGN KEY(anonymous_type_expression_id) REFERENCES anonymous_type_expression (id), FOREIGN KEY(none_of_id) REFERENCES anonymous_type_expression (id) ); -CREATE INDEX ix_anonymous_type_expression_none_of_anonymous_type_expression_id ON anonymous_type_expression_none_of (anonymous_type_expression_id); CREATE INDEX ix_anonymous_type_expression_none_of_none_of_id ON anonymous_type_expression_none_of (none_of_id); +CREATE INDEX ix_anonymous_type_expression_none_of_anonymous_type_expression_id ON anonymous_type_expression_none_of (anonymous_type_expression_id); CREATE TABLE anonymous_type_expression_exactly_one_of ( anonymous_type_expression_id INTEGER, @@ -5762,8 +5762,8 @@ CREATE TABLE anonymous_type_expression_exactly_one_of ( FOREIGN KEY(anonymous_type_expression_id) REFERENCES anonymous_type_expression (id), FOREIGN KEY(exactly_one_of_id) REFERENCES anonymous_type_expression (id) ); -CREATE INDEX ix_anonymous_type_expression_exactly_one_of_exactly_one_of_id ON anonymous_type_expression_exactly_one_of (exactly_one_of_id); CREATE INDEX ix_anonymous_type_expression_exactly_one_of_anonymous_type_expression_id ON anonymous_type_expression_exactly_one_of (anonymous_type_expression_id); +CREATE INDEX ix_anonymous_type_expression_exactly_one_of_exactly_one_of_id ON anonymous_type_expression_exactly_one_of (exactly_one_of_id); CREATE TABLE anonymous_type_expression_any_of ( anonymous_type_expression_id INTEGER, @@ -5772,8 +5772,8 @@ CREATE TABLE anonymous_type_expression_any_of ( FOREIGN KEY(anonymous_type_expression_id) REFERENCES anonymous_type_expression (id), FOREIGN KEY(any_of_id) REFERENCES anonymous_type_expression (id) ); -CREATE INDEX ix_anonymous_type_expression_any_of_anonymous_type_expression_id ON anonymous_type_expression_any_of (anonymous_type_expression_id); CREATE INDEX ix_anonymous_type_expression_any_of_any_of_id ON anonymous_type_expression_any_of (any_of_id); +CREATE INDEX ix_anonymous_type_expression_any_of_anonymous_type_expression_id ON anonymous_type_expression_any_of (anonymous_type_expression_id); CREATE TABLE anonymous_type_expression_all_of ( anonymous_type_expression_id INTEGER, @@ -5832,8 +5832,8 @@ CREATE TABLE type_definition_in_subset ( FOREIGN KEY(type_definition_name) REFERENCES type_definition (name), FOREIGN KEY(in_subset_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_type_definition_in_subset_type_definition_name ON type_definition_in_subset (type_definition_name); CREATE INDEX ix_type_definition_in_subset_in_subset_name ON type_definition_in_subset (in_subset_name); +CREATE INDEX ix_type_definition_in_subset_type_definition_name ON type_definition_in_subset (type_definition_name); CREATE TABLE subset_definition_id_prefixes ( subset_definition_name TEXT, @@ -6015,8 +6015,8 @@ CREATE TABLE enum_expression_include ( FOREIGN KEY(enum_expression_id) REFERENCES enum_expression (id), FOREIGN KEY(include_id) REFERENCES anonymous_enum_expression (id) ); -CREATE INDEX ix_enum_expression_include_enum_expression_id ON enum_expression_include (enum_expression_id); CREATE INDEX ix_enum_expression_include_include_id ON enum_expression_include (include_id); +CREATE INDEX ix_enum_expression_include_enum_expression_id ON enum_expression_include (enum_expression_id); CREATE TABLE enum_expression_minus ( enum_expression_id INTEGER, @@ -6025,8 +6025,8 @@ CREATE TABLE enum_expression_minus ( FOREIGN KEY(enum_expression_id) REFERENCES enum_expression (id), FOREIGN KEY(minus_id) REFERENCES anonymous_enum_expression (id) ); -CREATE INDEX ix_enum_expression_minus_enum_expression_id ON enum_expression_minus (enum_expression_id); CREATE INDEX ix_enum_expression_minus_minus_id ON enum_expression_minus (minus_id); +CREATE INDEX ix_enum_expression_minus_enum_expression_id ON enum_expression_minus (enum_expression_id); CREATE TABLE enum_expression_inherits ( enum_expression_id INTEGER, @@ -6035,8 +6035,8 @@ CREATE TABLE enum_expression_inherits ( FOREIGN KEY(enum_expression_id) REFERENCES enum_expression (id), FOREIGN KEY(inherits_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_expression_inherits_enum_expression_id ON enum_expression_inherits (enum_expression_id); CREATE INDEX ix_enum_expression_inherits_inherits_name ON enum_expression_inherits (inherits_name); +CREATE INDEX ix_enum_expression_inherits_enum_expression_id ON enum_expression_inherits (enum_expression_id); CREATE TABLE enum_expression_concepts ( enum_expression_id INTEGER, @@ -6044,8 +6044,8 @@ CREATE TABLE enum_expression_concepts ( PRIMARY KEY (enum_expression_id, concepts), FOREIGN KEY(enum_expression_id) REFERENCES enum_expression (id) ); -CREATE INDEX ix_enum_expression_concepts_enum_expression_id ON enum_expression_concepts (enum_expression_id); CREATE INDEX ix_enum_expression_concepts_concepts ON enum_expression_concepts (concepts); +CREATE INDEX ix_enum_expression_concepts_enum_expression_id ON enum_expression_concepts (enum_expression_id); CREATE TABLE anonymous_enum_expression_include ( anonymous_enum_expression_id INTEGER, @@ -6064,8 +6064,8 @@ CREATE TABLE anonymous_enum_expression_minus ( FOREIGN KEY(anonymous_enum_expression_id) REFERENCES anonymous_enum_expression (id), FOREIGN KEY(minus_id) REFERENCES anonymous_enum_expression (id) ); -CREATE INDEX ix_anonymous_enum_expression_minus_anonymous_enum_expression_id ON anonymous_enum_expression_minus (anonymous_enum_expression_id); CREATE INDEX ix_anonymous_enum_expression_minus_minus_id ON anonymous_enum_expression_minus (minus_id); +CREATE INDEX ix_anonymous_enum_expression_minus_anonymous_enum_expression_id ON anonymous_enum_expression_minus (anonymous_enum_expression_id); CREATE TABLE anonymous_enum_expression_inherits ( anonymous_enum_expression_id INTEGER, @@ -6074,8 +6074,8 @@ CREATE TABLE anonymous_enum_expression_inherits ( FOREIGN KEY(anonymous_enum_expression_id) REFERENCES anonymous_enum_expression (id), FOREIGN KEY(inherits_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_anonymous_enum_expression_inherits_inherits_name ON anonymous_enum_expression_inherits (inherits_name); CREATE INDEX ix_anonymous_enum_expression_inherits_anonymous_enum_expression_id ON anonymous_enum_expression_inherits (anonymous_enum_expression_id); +CREATE INDEX ix_anonymous_enum_expression_inherits_inherits_name ON anonymous_enum_expression_inherits (inherits_name); CREATE TABLE anonymous_enum_expression_concepts ( anonymous_enum_expression_id INTEGER, @@ -6093,8 +6093,8 @@ CREATE TABLE enum_definition_include ( FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name), FOREIGN KEY(include_id) REFERENCES anonymous_enum_expression (id) ); -CREATE INDEX ix_enum_definition_include_include_id ON enum_definition_include (include_id); CREATE INDEX ix_enum_definition_include_enum_definition_name ON enum_definition_include (enum_definition_name); +CREATE INDEX ix_enum_definition_include_include_id ON enum_definition_include (include_id); CREATE TABLE enum_definition_minus ( enum_definition_name TEXT, @@ -6103,8 +6103,8 @@ CREATE TABLE enum_definition_minus ( FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name), FOREIGN KEY(minus_id) REFERENCES anonymous_enum_expression (id) ); -CREATE INDEX ix_enum_definition_minus_enum_definition_name ON enum_definition_minus (enum_definition_name); CREATE INDEX ix_enum_definition_minus_minus_id ON enum_definition_minus (minus_id); +CREATE INDEX ix_enum_definition_minus_enum_definition_name ON enum_definition_minus (enum_definition_name); CREATE TABLE enum_definition_inherits ( enum_definition_name TEXT, @@ -6113,8 +6113,8 @@ CREATE TABLE enum_definition_inherits ( FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name), FOREIGN KEY(inherits_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_inherits_enum_definition_name ON enum_definition_inherits (enum_definition_name); CREATE INDEX ix_enum_definition_inherits_inherits_name ON enum_definition_inherits (inherits_name); +CREATE INDEX ix_enum_definition_inherits_enum_definition_name ON enum_definition_inherits (enum_definition_name); CREATE TABLE enum_definition_concepts ( enum_definition_name TEXT, @@ -6122,8 +6122,8 @@ CREATE TABLE enum_definition_concepts ( PRIMARY KEY (enum_definition_name, concepts), FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_concepts_enum_definition_name ON enum_definition_concepts (enum_definition_name); CREATE INDEX ix_enum_definition_concepts_concepts ON enum_definition_concepts (concepts); +CREATE INDEX ix_enum_definition_concepts_enum_definition_name ON enum_definition_concepts (enum_definition_name); CREATE TABLE enum_definition_mixins ( enum_definition_name TEXT, @@ -6142,8 +6142,8 @@ CREATE TABLE enum_definition_apply_to ( FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name), FOREIGN KEY(apply_to_name) REFERENCES definition (name) ); -CREATE INDEX ix_enum_definition_apply_to_apply_to_name ON enum_definition_apply_to (apply_to_name); CREATE INDEX ix_enum_definition_apply_to_enum_definition_name ON enum_definition_apply_to (enum_definition_name); +CREATE INDEX ix_enum_definition_apply_to_apply_to_name ON enum_definition_apply_to (apply_to_name); CREATE TABLE enum_definition_values_from ( enum_definition_name TEXT, @@ -6151,8 +6151,8 @@ CREATE TABLE enum_definition_values_from ( PRIMARY KEY (enum_definition_name, values_from), FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_values_from_enum_definition_name ON enum_definition_values_from (enum_definition_name); CREATE INDEX ix_enum_definition_values_from_values_from ON enum_definition_values_from (values_from); +CREATE INDEX ix_enum_definition_values_from_enum_definition_name ON enum_definition_values_from (enum_definition_name); CREATE TABLE enum_definition_id_prefixes ( enum_definition_name TEXT, @@ -6187,8 +6187,8 @@ CREATE TABLE enum_definition_todos ( PRIMARY KEY (enum_definition_name, todos), FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_todos_enum_definition_name ON enum_definition_todos (enum_definition_name); CREATE INDEX ix_enum_definition_todos_todos ON enum_definition_todos (todos); +CREATE INDEX ix_enum_definition_todos_enum_definition_name ON enum_definition_todos (enum_definition_name); CREATE TABLE enum_definition_notes ( enum_definition_name TEXT, @@ -6196,8 +6196,8 @@ CREATE TABLE enum_definition_notes ( PRIMARY KEY (enum_definition_name, notes), FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_notes_notes ON enum_definition_notes (notes); CREATE INDEX ix_enum_definition_notes_enum_definition_name ON enum_definition_notes (enum_definition_name); +CREATE INDEX ix_enum_definition_notes_notes ON enum_definition_notes (notes); CREATE TABLE enum_definition_comments ( enum_definition_name TEXT, @@ -6205,8 +6205,8 @@ CREATE TABLE enum_definition_comments ( PRIMARY KEY (enum_definition_name, comments), FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_comments_enum_definition_name ON enum_definition_comments (enum_definition_name); CREATE INDEX ix_enum_definition_comments_comments ON enum_definition_comments (comments); +CREATE INDEX ix_enum_definition_comments_enum_definition_name ON enum_definition_comments (enum_definition_name); CREATE TABLE enum_definition_in_subset ( enum_definition_name TEXT, @@ -6233,8 +6233,8 @@ CREATE TABLE enum_definition_aliases ( PRIMARY KEY (enum_definition_name, aliases), FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_aliases_aliases ON enum_definition_aliases (aliases); CREATE INDEX ix_enum_definition_aliases_enum_definition_name ON enum_definition_aliases (enum_definition_name); +CREATE INDEX ix_enum_definition_aliases_aliases ON enum_definition_aliases (aliases); CREATE TABLE enum_definition_mappings ( enum_definition_name TEXT, @@ -6242,8 +6242,8 @@ CREATE TABLE enum_definition_mappings ( PRIMARY KEY (enum_definition_name, mappings), FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_mappings_mappings ON enum_definition_mappings (mappings); CREATE INDEX ix_enum_definition_mappings_enum_definition_name ON enum_definition_mappings (enum_definition_name); +CREATE INDEX ix_enum_definition_mappings_mappings ON enum_definition_mappings (mappings); CREATE TABLE enum_definition_exact_mappings ( enum_definition_name TEXT, @@ -6260,8 +6260,8 @@ CREATE TABLE enum_definition_close_mappings ( PRIMARY KEY (enum_definition_name, close_mappings), FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_close_mappings_enum_definition_name ON enum_definition_close_mappings (enum_definition_name); CREATE INDEX ix_enum_definition_close_mappings_close_mappings ON enum_definition_close_mappings (close_mappings); +CREATE INDEX ix_enum_definition_close_mappings_enum_definition_name ON enum_definition_close_mappings (enum_definition_name); CREATE TABLE enum_definition_related_mappings ( enum_definition_name TEXT, @@ -6287,8 +6287,8 @@ CREATE TABLE enum_definition_broad_mappings ( PRIMARY KEY (enum_definition_name, broad_mappings), FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_broad_mappings_enum_definition_name ON enum_definition_broad_mappings (enum_definition_name); CREATE INDEX ix_enum_definition_broad_mappings_broad_mappings ON enum_definition_broad_mappings (broad_mappings); +CREATE INDEX ix_enum_definition_broad_mappings_enum_definition_name ON enum_definition_broad_mappings (enum_definition_name); CREATE TABLE enum_definition_contributors ( enum_definition_name TEXT, @@ -6305,8 +6305,8 @@ CREATE TABLE enum_definition_category ( PRIMARY KEY (enum_definition_name, category), FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_category_enum_definition_name ON enum_definition_category (enum_definition_name); CREATE INDEX ix_enum_definition_category_category ON enum_definition_category (category); +CREATE INDEX ix_enum_definition_category_enum_definition_name ON enum_definition_category (enum_definition_name); CREATE TABLE enum_definition_keyword ( enum_definition_name TEXT, @@ -6314,8 +6314,8 @@ CREATE TABLE enum_definition_keyword ( PRIMARY KEY (enum_definition_name, keyword), FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_keyword_enum_definition_name ON enum_definition_keyword (enum_definition_name); CREATE INDEX ix_enum_definition_keyword_keyword ON enum_definition_keyword (keyword); +CREATE INDEX ix_enum_definition_keyword_enum_definition_name ON enum_definition_keyword (enum_definition_name); CREATE TABLE anonymous_expression_in_subset ( anonymous_expression_id INTEGER, @@ -6324,8 +6324,8 @@ CREATE TABLE anonymous_expression_in_subset ( FOREIGN KEY(anonymous_expression_id) REFERENCES anonymous_expression (id), FOREIGN KEY(in_subset_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_anonymous_expression_in_subset_anonymous_expression_id ON anonymous_expression_in_subset (anonymous_expression_id); CREATE INDEX ix_anonymous_expression_in_subset_in_subset_name ON anonymous_expression_in_subset (in_subset_name); +CREATE INDEX ix_anonymous_expression_in_subset_anonymous_expression_id ON anonymous_expression_in_subset (anonymous_expression_id); CREATE TABLE path_expression_in_subset ( path_expression_id INTEGER, @@ -6354,8 +6354,8 @@ CREATE TABLE slot_definition_type_mappings ( FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name), FOREIGN KEY(type_mappings_framework) REFERENCES type_mapping (framework) ); -CREATE INDEX ix_slot_definition_type_mappings_type_mappings_framework ON slot_definition_type_mappings (type_mappings_framework); CREATE INDEX ix_slot_definition_type_mappings_slot_definition_name ON slot_definition_type_mappings (slot_definition_name); +CREATE INDEX ix_slot_definition_type_mappings_type_mappings_framework ON slot_definition_type_mappings (type_mappings_framework); CREATE TABLE slot_definition_in_subset ( slot_definition_name TEXT, @@ -6364,8 +6364,8 @@ CREATE TABLE slot_definition_in_subset ( FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name), FOREIGN KEY(in_subset_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_slot_definition_in_subset_in_subset_name ON slot_definition_in_subset (in_subset_name); CREATE INDEX ix_slot_definition_in_subset_slot_definition_name ON slot_definition_in_subset (slot_definition_name); +CREATE INDEX ix_slot_definition_in_subset_in_subset_name ON slot_definition_in_subset (in_subset_name); CREATE TABLE anonymous_class_expression_in_subset ( anonymous_class_expression_id INTEGER, @@ -6384,8 +6384,8 @@ CREATE TABLE class_definition_in_subset ( FOREIGN KEY(class_definition_name) REFERENCES class_definition (name), FOREIGN KEY(in_subset_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_class_definition_in_subset_in_subset_name ON class_definition_in_subset (in_subset_name); CREATE INDEX ix_class_definition_in_subset_class_definition_name ON class_definition_in_subset (class_definition_name); +CREATE INDEX ix_class_definition_in_subset_in_subset_name ON class_definition_in_subset (in_subset_name); CREATE TABLE class_rule_todos ( class_rule_id INTEGER, @@ -6393,8 +6393,8 @@ CREATE TABLE class_rule_todos ( PRIMARY KEY (class_rule_id, todos), FOREIGN KEY(class_rule_id) REFERENCES class_rule (id) ); -CREATE INDEX ix_class_rule_todos_class_rule_id ON class_rule_todos (class_rule_id); CREATE INDEX ix_class_rule_todos_todos ON class_rule_todos (todos); +CREATE INDEX ix_class_rule_todos_class_rule_id ON class_rule_todos (class_rule_id); CREATE TABLE class_rule_notes ( class_rule_id INTEGER, @@ -6411,8 +6411,8 @@ CREATE TABLE class_rule_comments ( PRIMARY KEY (class_rule_id, comments), FOREIGN KEY(class_rule_id) REFERENCES class_rule (id) ); -CREATE INDEX ix_class_rule_comments_comments ON class_rule_comments (comments); CREATE INDEX ix_class_rule_comments_class_rule_id ON class_rule_comments (class_rule_id); +CREATE INDEX ix_class_rule_comments_comments ON class_rule_comments (comments); CREATE TABLE class_rule_in_subset ( class_rule_id INTEGER, @@ -6421,8 +6421,8 @@ CREATE TABLE class_rule_in_subset ( FOREIGN KEY(class_rule_id) REFERENCES class_rule (id), FOREIGN KEY(in_subset_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_class_rule_in_subset_class_rule_id ON class_rule_in_subset (class_rule_id); CREATE INDEX ix_class_rule_in_subset_in_subset_name ON class_rule_in_subset (in_subset_name); +CREATE INDEX ix_class_rule_in_subset_class_rule_id ON class_rule_in_subset (class_rule_id); CREATE TABLE class_rule_see_also ( class_rule_id INTEGER, @@ -6430,8 +6430,8 @@ CREATE TABLE class_rule_see_also ( PRIMARY KEY (class_rule_id, see_also), FOREIGN KEY(class_rule_id) REFERENCES class_rule (id) ); -CREATE INDEX ix_class_rule_see_also_see_also ON class_rule_see_also (see_also); CREATE INDEX ix_class_rule_see_also_class_rule_id ON class_rule_see_also (class_rule_id); +CREATE INDEX ix_class_rule_see_also_see_also ON class_rule_see_also (see_also); CREATE TABLE class_rule_aliases ( class_rule_id INTEGER, @@ -6439,8 +6439,8 @@ CREATE TABLE class_rule_aliases ( PRIMARY KEY (class_rule_id, aliases), FOREIGN KEY(class_rule_id) REFERENCES class_rule (id) ); -CREATE INDEX ix_class_rule_aliases_aliases ON class_rule_aliases (aliases); CREATE INDEX ix_class_rule_aliases_class_rule_id ON class_rule_aliases (class_rule_id); +CREATE INDEX ix_class_rule_aliases_aliases ON class_rule_aliases (aliases); CREATE TABLE class_rule_mappings ( class_rule_id INTEGER, @@ -6448,8 +6448,8 @@ CREATE TABLE class_rule_mappings ( PRIMARY KEY (class_rule_id, mappings), FOREIGN KEY(class_rule_id) REFERENCES class_rule (id) ); -CREATE INDEX ix_class_rule_mappings_mappings ON class_rule_mappings (mappings); CREATE INDEX ix_class_rule_mappings_class_rule_id ON class_rule_mappings (class_rule_id); +CREATE INDEX ix_class_rule_mappings_mappings ON class_rule_mappings (mappings); CREATE TABLE class_rule_exact_mappings ( class_rule_id INTEGER, @@ -6457,8 +6457,8 @@ CREATE TABLE class_rule_exact_mappings ( PRIMARY KEY (class_rule_id, exact_mappings), FOREIGN KEY(class_rule_id) REFERENCES class_rule (id) ); -CREATE INDEX ix_class_rule_exact_mappings_class_rule_id ON class_rule_exact_mappings (class_rule_id); CREATE INDEX ix_class_rule_exact_mappings_exact_mappings ON class_rule_exact_mappings (exact_mappings); +CREATE INDEX ix_class_rule_exact_mappings_class_rule_id ON class_rule_exact_mappings (class_rule_id); CREATE TABLE class_rule_close_mappings ( class_rule_id INTEGER, @@ -6466,8 +6466,8 @@ CREATE TABLE class_rule_close_mappings ( PRIMARY KEY (class_rule_id, close_mappings), FOREIGN KEY(class_rule_id) REFERENCES class_rule (id) ); -CREATE INDEX ix_class_rule_close_mappings_class_rule_id ON class_rule_close_mappings (class_rule_id); CREATE INDEX ix_class_rule_close_mappings_close_mappings ON class_rule_close_mappings (close_mappings); +CREATE INDEX ix_class_rule_close_mappings_class_rule_id ON class_rule_close_mappings (class_rule_id); CREATE TABLE class_rule_related_mappings ( class_rule_id INTEGER, @@ -6475,8 +6475,8 @@ CREATE TABLE class_rule_related_mappings ( PRIMARY KEY (class_rule_id, related_mappings), FOREIGN KEY(class_rule_id) REFERENCES class_rule (id) ); -CREATE INDEX ix_class_rule_related_mappings_class_rule_id ON class_rule_related_mappings (class_rule_id); CREATE INDEX ix_class_rule_related_mappings_related_mappings ON class_rule_related_mappings (related_mappings); +CREATE INDEX ix_class_rule_related_mappings_class_rule_id ON class_rule_related_mappings (class_rule_id); CREATE TABLE class_rule_narrow_mappings ( class_rule_id INTEGER, @@ -6484,8 +6484,8 @@ CREATE TABLE class_rule_narrow_mappings ( PRIMARY KEY (class_rule_id, narrow_mappings), FOREIGN KEY(class_rule_id) REFERENCES class_rule (id) ); -CREATE INDEX ix_class_rule_narrow_mappings_narrow_mappings ON class_rule_narrow_mappings (narrow_mappings); CREATE INDEX ix_class_rule_narrow_mappings_class_rule_id ON class_rule_narrow_mappings (class_rule_id); +CREATE INDEX ix_class_rule_narrow_mappings_narrow_mappings ON class_rule_narrow_mappings (narrow_mappings); CREATE TABLE class_rule_broad_mappings ( class_rule_id INTEGER, @@ -6493,8 +6493,8 @@ CREATE TABLE class_rule_broad_mappings ( PRIMARY KEY (class_rule_id, broad_mappings), FOREIGN KEY(class_rule_id) REFERENCES class_rule (id) ); -CREATE INDEX ix_class_rule_broad_mappings_broad_mappings ON class_rule_broad_mappings (broad_mappings); CREATE INDEX ix_class_rule_broad_mappings_class_rule_id ON class_rule_broad_mappings (class_rule_id); +CREATE INDEX ix_class_rule_broad_mappings_broad_mappings ON class_rule_broad_mappings (broad_mappings); CREATE TABLE class_rule_contributors ( class_rule_id INTEGER, @@ -6502,8 +6502,8 @@ CREATE TABLE class_rule_contributors ( PRIMARY KEY (class_rule_id, contributors), FOREIGN KEY(class_rule_id) REFERENCES class_rule (id) ); -CREATE INDEX ix_class_rule_contributors_contributors ON class_rule_contributors (contributors); CREATE INDEX ix_class_rule_contributors_class_rule_id ON class_rule_contributors (class_rule_id); +CREATE INDEX ix_class_rule_contributors_contributors ON class_rule_contributors (contributors); CREATE TABLE class_rule_category ( class_rule_id INTEGER, @@ -6511,8 +6511,8 @@ CREATE TABLE class_rule_category ( PRIMARY KEY (class_rule_id, category), FOREIGN KEY(class_rule_id) REFERENCES class_rule (id) ); -CREATE INDEX ix_class_rule_category_class_rule_id ON class_rule_category (class_rule_id); CREATE INDEX ix_class_rule_category_category ON class_rule_category (category); +CREATE INDEX ix_class_rule_category_class_rule_id ON class_rule_category (class_rule_id); CREATE TABLE class_rule_keyword ( class_rule_id INTEGER, @@ -6520,8 +6520,8 @@ CREATE TABLE class_rule_keyword ( PRIMARY KEY (class_rule_id, keyword), FOREIGN KEY(class_rule_id) REFERENCES class_rule (id) ); -CREATE INDEX ix_class_rule_keyword_class_rule_id ON class_rule_keyword (class_rule_id); CREATE INDEX ix_class_rule_keyword_keyword ON class_rule_keyword (keyword); +CREATE INDEX ix_class_rule_keyword_class_rule_id ON class_rule_keyword (class_rule_id); CREATE TABLE array_expression_dimensions ( array_expression_id INTEGER, @@ -6530,8 +6530,8 @@ CREATE TABLE array_expression_dimensions ( FOREIGN KEY(array_expression_id) REFERENCES array_expression (id), FOREIGN KEY(dimensions_id) REFERENCES dimension_expression (id) ); -CREATE INDEX ix_array_expression_dimensions_array_expression_id ON array_expression_dimensions (array_expression_id); CREATE INDEX ix_array_expression_dimensions_dimensions_id ON array_expression_dimensions (dimensions_id); +CREATE INDEX ix_array_expression_dimensions_array_expression_id ON array_expression_dimensions (array_expression_id); CREATE TABLE array_expression_todos ( array_expression_id INTEGER, @@ -6548,8 +6548,8 @@ CREATE TABLE array_expression_notes ( PRIMARY KEY (array_expression_id, notes), FOREIGN KEY(array_expression_id) REFERENCES array_expression (id) ); -CREATE INDEX ix_array_expression_notes_array_expression_id ON array_expression_notes (array_expression_id); CREATE INDEX ix_array_expression_notes_notes ON array_expression_notes (notes); +CREATE INDEX ix_array_expression_notes_array_expression_id ON array_expression_notes (array_expression_id); CREATE TABLE array_expression_comments ( array_expression_id INTEGER, @@ -6557,8 +6557,8 @@ CREATE TABLE array_expression_comments ( PRIMARY KEY (array_expression_id, comments), FOREIGN KEY(array_expression_id) REFERENCES array_expression (id) ); -CREATE INDEX ix_array_expression_comments_array_expression_id ON array_expression_comments (array_expression_id); CREATE INDEX ix_array_expression_comments_comments ON array_expression_comments (comments); +CREATE INDEX ix_array_expression_comments_array_expression_id ON array_expression_comments (array_expression_id); CREATE TABLE array_expression_in_subset ( array_expression_id INTEGER, @@ -6567,8 +6567,8 @@ CREATE TABLE array_expression_in_subset ( FOREIGN KEY(array_expression_id) REFERENCES array_expression (id), FOREIGN KEY(in_subset_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_array_expression_in_subset_in_subset_name ON array_expression_in_subset (in_subset_name); CREATE INDEX ix_array_expression_in_subset_array_expression_id ON array_expression_in_subset (array_expression_id); +CREATE INDEX ix_array_expression_in_subset_in_subset_name ON array_expression_in_subset (in_subset_name); CREATE TABLE array_expression_see_also ( array_expression_id INTEGER, @@ -6576,8 +6576,8 @@ CREATE TABLE array_expression_see_also ( PRIMARY KEY (array_expression_id, see_also), FOREIGN KEY(array_expression_id) REFERENCES array_expression (id) ); -CREATE INDEX ix_array_expression_see_also_see_also ON array_expression_see_also (see_also); CREATE INDEX ix_array_expression_see_also_array_expression_id ON array_expression_see_also (array_expression_id); +CREATE INDEX ix_array_expression_see_also_see_also ON array_expression_see_also (see_also); CREATE TABLE array_expression_aliases ( array_expression_id INTEGER, @@ -6594,8 +6594,8 @@ CREATE TABLE array_expression_mappings ( PRIMARY KEY (array_expression_id, mappings), FOREIGN KEY(array_expression_id) REFERENCES array_expression (id) ); -CREATE INDEX ix_array_expression_mappings_mappings ON array_expression_mappings (mappings); CREATE INDEX ix_array_expression_mappings_array_expression_id ON array_expression_mappings (array_expression_id); +CREATE INDEX ix_array_expression_mappings_mappings ON array_expression_mappings (mappings); CREATE TABLE array_expression_exact_mappings ( array_expression_id INTEGER, @@ -6603,8 +6603,8 @@ CREATE TABLE array_expression_exact_mappings ( PRIMARY KEY (array_expression_id, exact_mappings), FOREIGN KEY(array_expression_id) REFERENCES array_expression (id) ); -CREATE INDEX ix_array_expression_exact_mappings_array_expression_id ON array_expression_exact_mappings (array_expression_id); CREATE INDEX ix_array_expression_exact_mappings_exact_mappings ON array_expression_exact_mappings (exact_mappings); +CREATE INDEX ix_array_expression_exact_mappings_array_expression_id ON array_expression_exact_mappings (array_expression_id); CREATE TABLE array_expression_close_mappings ( array_expression_id INTEGER, @@ -6612,8 +6612,8 @@ CREATE TABLE array_expression_close_mappings ( PRIMARY KEY (array_expression_id, close_mappings), FOREIGN KEY(array_expression_id) REFERENCES array_expression (id) ); -CREATE INDEX ix_array_expression_close_mappings_array_expression_id ON array_expression_close_mappings (array_expression_id); CREATE INDEX ix_array_expression_close_mappings_close_mappings ON array_expression_close_mappings (close_mappings); +CREATE INDEX ix_array_expression_close_mappings_array_expression_id ON array_expression_close_mappings (array_expression_id); CREATE TABLE array_expression_related_mappings ( array_expression_id INTEGER, @@ -6621,8 +6621,8 @@ CREATE TABLE array_expression_related_mappings ( PRIMARY KEY (array_expression_id, related_mappings), FOREIGN KEY(array_expression_id) REFERENCES array_expression (id) ); -CREATE INDEX ix_array_expression_related_mappings_related_mappings ON array_expression_related_mappings (related_mappings); CREATE INDEX ix_array_expression_related_mappings_array_expression_id ON array_expression_related_mappings (array_expression_id); +CREATE INDEX ix_array_expression_related_mappings_related_mappings ON array_expression_related_mappings (related_mappings); CREATE TABLE array_expression_narrow_mappings ( array_expression_id INTEGER, @@ -6630,8 +6630,8 @@ CREATE TABLE array_expression_narrow_mappings ( PRIMARY KEY (array_expression_id, narrow_mappings), FOREIGN KEY(array_expression_id) REFERENCES array_expression (id) ); -CREATE INDEX ix_array_expression_narrow_mappings_narrow_mappings ON array_expression_narrow_mappings (narrow_mappings); CREATE INDEX ix_array_expression_narrow_mappings_array_expression_id ON array_expression_narrow_mappings (array_expression_id); +CREATE INDEX ix_array_expression_narrow_mappings_narrow_mappings ON array_expression_narrow_mappings (narrow_mappings); CREATE TABLE array_expression_broad_mappings ( array_expression_id INTEGER, @@ -6639,8 +6639,8 @@ CREATE TABLE array_expression_broad_mappings ( PRIMARY KEY (array_expression_id, broad_mappings), FOREIGN KEY(array_expression_id) REFERENCES array_expression (id) ); -CREATE INDEX ix_array_expression_broad_mappings_broad_mappings ON array_expression_broad_mappings (broad_mappings); CREATE INDEX ix_array_expression_broad_mappings_array_expression_id ON array_expression_broad_mappings (array_expression_id); +CREATE INDEX ix_array_expression_broad_mappings_broad_mappings ON array_expression_broad_mappings (broad_mappings); CREATE TABLE array_expression_contributors ( array_expression_id INTEGER, @@ -6648,8 +6648,8 @@ CREATE TABLE array_expression_contributors ( PRIMARY KEY (array_expression_id, contributors), FOREIGN KEY(array_expression_id) REFERENCES array_expression (id) ); -CREATE INDEX ix_array_expression_contributors_array_expression_id ON array_expression_contributors (array_expression_id); CREATE INDEX ix_array_expression_contributors_contributors ON array_expression_contributors (contributors); +CREATE INDEX ix_array_expression_contributors_array_expression_id ON array_expression_contributors (array_expression_id); CREATE TABLE array_expression_category ( array_expression_id INTEGER, @@ -6657,8 +6657,8 @@ CREATE TABLE array_expression_category ( PRIMARY KEY (array_expression_id, category), FOREIGN KEY(array_expression_id) REFERENCES array_expression (id) ); -CREATE INDEX ix_array_expression_category_category ON array_expression_category (category); CREATE INDEX ix_array_expression_category_array_expression_id ON array_expression_category (array_expression_id); +CREATE INDEX ix_array_expression_category_category ON array_expression_category (category); CREATE TABLE array_expression_keyword ( array_expression_id INTEGER, @@ -6666,8 +6666,8 @@ CREATE TABLE array_expression_keyword ( PRIMARY KEY (array_expression_id, keyword), FOREIGN KEY(array_expression_id) REFERENCES array_expression (id) ); -CREATE INDEX ix_array_expression_keyword_array_expression_id ON array_expression_keyword (array_expression_id); CREATE INDEX ix_array_expression_keyword_keyword ON array_expression_keyword (keyword); +CREATE INDEX ix_array_expression_keyword_array_expression_id ON array_expression_keyword (array_expression_id); CREATE TABLE dimension_expression_in_subset ( dimension_expression_id INTEGER, @@ -6696,8 +6696,8 @@ CREATE TABLE import_expression_in_subset ( FOREIGN KEY(import_expression_id) REFERENCES import_expression (id), FOREIGN KEY(in_subset_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_import_expression_in_subset_in_subset_name ON import_expression_in_subset (in_subset_name); CREATE INDEX ix_import_expression_in_subset_import_expression_id ON import_expression_in_subset (import_expression_id); +CREATE INDEX ix_import_expression_in_subset_in_subset_name ON import_expression_in_subset (in_subset_name); CREATE TABLE unique_key_unique_key_slots ( unique_key_unique_key_name TEXT, @@ -6706,8 +6706,8 @@ CREATE TABLE unique_key_unique_key_slots ( FOREIGN KEY(unique_key_unique_key_name) REFERENCES unique_key (unique_key_name), FOREIGN KEY(unique_key_slots_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_unique_key_unique_key_slots_unique_key_slots_name ON unique_key_unique_key_slots (unique_key_slots_name); CREATE INDEX ix_unique_key_unique_key_slots_unique_key_unique_key_name ON unique_key_unique_key_slots (unique_key_unique_key_name); +CREATE INDEX ix_unique_key_unique_key_slots_unique_key_slots_name ON unique_key_unique_key_slots (unique_key_slots_name); CREATE TABLE unique_key_todos ( unique_key_unique_key_name TEXT, @@ -6752,8 +6752,8 @@ CREATE TABLE unique_key_see_also ( PRIMARY KEY (unique_key_unique_key_name, see_also), FOREIGN KEY(unique_key_unique_key_name) REFERENCES unique_key (unique_key_name) ); -CREATE INDEX ix_unique_key_see_also_see_also ON unique_key_see_also (see_also); CREATE INDEX ix_unique_key_see_also_unique_key_unique_key_name ON unique_key_see_also (unique_key_unique_key_name); +CREATE INDEX ix_unique_key_see_also_see_also ON unique_key_see_also (see_also); CREATE TABLE unique_key_aliases ( unique_key_unique_key_name TEXT, @@ -6779,8 +6779,8 @@ CREATE TABLE unique_key_exact_mappings ( PRIMARY KEY (unique_key_unique_key_name, exact_mappings), FOREIGN KEY(unique_key_unique_key_name) REFERENCES unique_key (unique_key_name) ); -CREATE INDEX ix_unique_key_exact_mappings_exact_mappings ON unique_key_exact_mappings (exact_mappings); CREATE INDEX ix_unique_key_exact_mappings_unique_key_unique_key_name ON unique_key_exact_mappings (unique_key_unique_key_name); +CREATE INDEX ix_unique_key_exact_mappings_exact_mappings ON unique_key_exact_mappings (exact_mappings); CREATE TABLE unique_key_close_mappings ( unique_key_unique_key_name TEXT, @@ -6806,8 +6806,8 @@ CREATE TABLE unique_key_narrow_mappings ( PRIMARY KEY (unique_key_unique_key_name, narrow_mappings), FOREIGN KEY(unique_key_unique_key_name) REFERENCES unique_key (unique_key_name) ); -CREATE INDEX ix_unique_key_narrow_mappings_narrow_mappings ON unique_key_narrow_mappings (narrow_mappings); CREATE INDEX ix_unique_key_narrow_mappings_unique_key_unique_key_name ON unique_key_narrow_mappings (unique_key_unique_key_name); +CREATE INDEX ix_unique_key_narrow_mappings_narrow_mappings ON unique_key_narrow_mappings (narrow_mappings); CREATE TABLE unique_key_broad_mappings ( unique_key_unique_key_name TEXT, @@ -6833,8 +6833,8 @@ CREATE TABLE unique_key_category ( PRIMARY KEY (unique_key_unique_key_name, category), FOREIGN KEY(unique_key_unique_key_name) REFERENCES unique_key (unique_key_name) ); -CREATE INDEX ix_unique_key_category_category ON unique_key_category (category); CREATE INDEX ix_unique_key_category_unique_key_unique_key_name ON unique_key_category (unique_key_unique_key_name); +CREATE INDEX ix_unique_key_category_category ON unique_key_category (category); CREATE TABLE unique_key_keyword ( unique_key_unique_key_name TEXT, @@ -6869,8 +6869,8 @@ CREATE TABLE type_mapping_comments ( PRIMARY KEY (type_mapping_framework, comments), FOREIGN KEY(type_mapping_framework) REFERENCES type_mapping (framework) ); -CREATE INDEX ix_type_mapping_comments_type_mapping_framework ON type_mapping_comments (type_mapping_framework); CREATE INDEX ix_type_mapping_comments_comments ON type_mapping_comments (comments); +CREATE INDEX ix_type_mapping_comments_type_mapping_framework ON type_mapping_comments (type_mapping_framework); CREATE TABLE type_mapping_in_subset ( type_mapping_framework TEXT, @@ -6888,8 +6888,8 @@ CREATE TABLE type_mapping_see_also ( PRIMARY KEY (type_mapping_framework, see_also), FOREIGN KEY(type_mapping_framework) REFERENCES type_mapping (framework) ); -CREATE INDEX ix_type_mapping_see_also_type_mapping_framework ON type_mapping_see_also (type_mapping_framework); CREATE INDEX ix_type_mapping_see_also_see_also ON type_mapping_see_also (see_also); +CREATE INDEX ix_type_mapping_see_also_type_mapping_framework ON type_mapping_see_also (type_mapping_framework); CREATE TABLE type_mapping_aliases ( type_mapping_framework TEXT, @@ -6924,8 +6924,8 @@ CREATE TABLE type_mapping_close_mappings ( PRIMARY KEY (type_mapping_framework, close_mappings), FOREIGN KEY(type_mapping_framework) REFERENCES type_mapping (framework) ); -CREATE INDEX ix_type_mapping_close_mappings_type_mapping_framework ON type_mapping_close_mappings (type_mapping_framework); CREATE INDEX ix_type_mapping_close_mappings_close_mappings ON type_mapping_close_mappings (close_mappings); +CREATE INDEX ix_type_mapping_close_mappings_type_mapping_framework ON type_mapping_close_mappings (type_mapping_framework); CREATE TABLE type_mapping_related_mappings ( type_mapping_framework TEXT, @@ -6933,8 +6933,8 @@ CREATE TABLE type_mapping_related_mappings ( PRIMARY KEY (type_mapping_framework, related_mappings), FOREIGN KEY(type_mapping_framework) REFERENCES type_mapping (framework) ); -CREATE INDEX ix_type_mapping_related_mappings_related_mappings ON type_mapping_related_mappings (related_mappings); CREATE INDEX ix_type_mapping_related_mappings_type_mapping_framework ON type_mapping_related_mappings (type_mapping_framework); +CREATE INDEX ix_type_mapping_related_mappings_related_mappings ON type_mapping_related_mappings (related_mappings); CREATE TABLE type_mapping_narrow_mappings ( type_mapping_framework TEXT, @@ -6942,8 +6942,8 @@ CREATE TABLE type_mapping_narrow_mappings ( PRIMARY KEY (type_mapping_framework, narrow_mappings), FOREIGN KEY(type_mapping_framework) REFERENCES type_mapping (framework) ); -CREATE INDEX ix_type_mapping_narrow_mappings_type_mapping_framework ON type_mapping_narrow_mappings (type_mapping_framework); CREATE INDEX ix_type_mapping_narrow_mappings_narrow_mappings ON type_mapping_narrow_mappings (narrow_mappings); +CREATE INDEX ix_type_mapping_narrow_mappings_type_mapping_framework ON type_mapping_narrow_mappings (type_mapping_framework); CREATE TABLE type_mapping_broad_mappings ( type_mapping_framework TEXT, @@ -6960,8 +6960,8 @@ CREATE TABLE type_mapping_contributors ( PRIMARY KEY (type_mapping_framework, contributors), FOREIGN KEY(type_mapping_framework) REFERENCES type_mapping (framework) ); -CREATE INDEX ix_type_mapping_contributors_contributors ON type_mapping_contributors (contributors); CREATE INDEX ix_type_mapping_contributors_type_mapping_framework ON type_mapping_contributors (type_mapping_framework); +CREATE INDEX ix_type_mapping_contributors_contributors ON type_mapping_contributors (contributors); CREATE TABLE type_mapping_category ( type_mapping_framework TEXT, @@ -6969,8 +6969,8 @@ CREATE TABLE type_mapping_category ( PRIMARY KEY (type_mapping_framework, category), FOREIGN KEY(type_mapping_framework) REFERENCES type_mapping (framework) ); -CREATE INDEX ix_type_mapping_category_type_mapping_framework ON type_mapping_category (type_mapping_framework); CREATE INDEX ix_type_mapping_category_category ON type_mapping_category (category); +CREATE INDEX ix_type_mapping_category_type_mapping_framework ON type_mapping_category (type_mapping_framework); CREATE TABLE type_mapping_keyword ( type_mapping_framework TEXT, @@ -7031,8 +7031,8 @@ CREATE TABLE slot_expression_none_of ( FOREIGN KEY(slot_expression_id) REFERENCES slot_expression (id), FOREIGN KEY(none_of_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_slot_expression_none_of_slot_expression_id ON slot_expression_none_of (slot_expression_id); CREATE INDEX ix_slot_expression_none_of_none_of_id ON slot_expression_none_of (none_of_id); +CREATE INDEX ix_slot_expression_none_of_slot_expression_id ON slot_expression_none_of (slot_expression_id); CREATE TABLE slot_expression_exactly_one_of ( slot_expression_id INTEGER, @@ -7041,8 +7041,8 @@ CREATE TABLE slot_expression_exactly_one_of ( FOREIGN KEY(slot_expression_id) REFERENCES slot_expression (id), FOREIGN KEY(exactly_one_of_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_slot_expression_exactly_one_of_slot_expression_id ON slot_expression_exactly_one_of (slot_expression_id); CREATE INDEX ix_slot_expression_exactly_one_of_exactly_one_of_id ON slot_expression_exactly_one_of (exactly_one_of_id); +CREATE INDEX ix_slot_expression_exactly_one_of_slot_expression_id ON slot_expression_exactly_one_of (slot_expression_id); CREATE TABLE slot_expression_any_of ( slot_expression_id INTEGER, @@ -7312,8 +7312,8 @@ CREATE TABLE enum_binding_notes ( PRIMARY KEY (enum_binding_id, notes), FOREIGN KEY(enum_binding_id) REFERENCES enum_binding (id) ); -CREATE INDEX ix_enum_binding_notes_notes ON enum_binding_notes (notes); CREATE INDEX ix_enum_binding_notes_enum_binding_id ON enum_binding_notes (enum_binding_id); +CREATE INDEX ix_enum_binding_notes_notes ON enum_binding_notes (notes); CREATE TABLE enum_binding_comments ( enum_binding_id INTEGER, @@ -7321,8 +7321,8 @@ CREATE TABLE enum_binding_comments ( PRIMARY KEY (enum_binding_id, comments), FOREIGN KEY(enum_binding_id) REFERENCES enum_binding (id) ); -CREATE INDEX ix_enum_binding_comments_comments ON enum_binding_comments (comments); CREATE INDEX ix_enum_binding_comments_enum_binding_id ON enum_binding_comments (enum_binding_id); +CREATE INDEX ix_enum_binding_comments_comments ON enum_binding_comments (comments); CREATE TABLE enum_binding_in_subset ( enum_binding_id INTEGER, @@ -7331,8 +7331,8 @@ CREATE TABLE enum_binding_in_subset ( FOREIGN KEY(enum_binding_id) REFERENCES enum_binding (id), FOREIGN KEY(in_subset_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_enum_binding_in_subset_in_subset_name ON enum_binding_in_subset (in_subset_name); CREATE INDEX ix_enum_binding_in_subset_enum_binding_id ON enum_binding_in_subset (enum_binding_id); +CREATE INDEX ix_enum_binding_in_subset_in_subset_name ON enum_binding_in_subset (in_subset_name); CREATE TABLE enum_binding_see_also ( enum_binding_id INTEGER, @@ -7340,8 +7340,8 @@ CREATE TABLE enum_binding_see_also ( PRIMARY KEY (enum_binding_id, see_also), FOREIGN KEY(enum_binding_id) REFERENCES enum_binding (id) ); -CREATE INDEX ix_enum_binding_see_also_see_also ON enum_binding_see_also (see_also); CREATE INDEX ix_enum_binding_see_also_enum_binding_id ON enum_binding_see_also (enum_binding_id); +CREATE INDEX ix_enum_binding_see_also_see_also ON enum_binding_see_also (see_also); CREATE TABLE enum_binding_aliases ( enum_binding_id INTEGER, @@ -7349,8 +7349,8 @@ CREATE TABLE enum_binding_aliases ( PRIMARY KEY (enum_binding_id, aliases), FOREIGN KEY(enum_binding_id) REFERENCES enum_binding (id) ); -CREATE INDEX ix_enum_binding_aliases_aliases ON enum_binding_aliases (aliases); CREATE INDEX ix_enum_binding_aliases_enum_binding_id ON enum_binding_aliases (enum_binding_id); +CREATE INDEX ix_enum_binding_aliases_aliases ON enum_binding_aliases (aliases); CREATE TABLE enum_binding_mappings ( enum_binding_id INTEGER, @@ -7358,8 +7358,8 @@ CREATE TABLE enum_binding_mappings ( PRIMARY KEY (enum_binding_id, mappings), FOREIGN KEY(enum_binding_id) REFERENCES enum_binding (id) ); -CREATE INDEX ix_enum_binding_mappings_enum_binding_id ON enum_binding_mappings (enum_binding_id); CREATE INDEX ix_enum_binding_mappings_mappings ON enum_binding_mappings (mappings); +CREATE INDEX ix_enum_binding_mappings_enum_binding_id ON enum_binding_mappings (enum_binding_id); CREATE TABLE enum_binding_exact_mappings ( enum_binding_id INTEGER, @@ -7367,8 +7367,8 @@ CREATE TABLE enum_binding_exact_mappings ( PRIMARY KEY (enum_binding_id, exact_mappings), FOREIGN KEY(enum_binding_id) REFERENCES enum_binding (id) ); -CREATE INDEX ix_enum_binding_exact_mappings_enum_binding_id ON enum_binding_exact_mappings (enum_binding_id); CREATE INDEX ix_enum_binding_exact_mappings_exact_mappings ON enum_binding_exact_mappings (exact_mappings); +CREATE INDEX ix_enum_binding_exact_mappings_enum_binding_id ON enum_binding_exact_mappings (enum_binding_id); CREATE TABLE enum_binding_close_mappings ( enum_binding_id INTEGER, @@ -7376,8 +7376,8 @@ CREATE TABLE enum_binding_close_mappings ( PRIMARY KEY (enum_binding_id, close_mappings), FOREIGN KEY(enum_binding_id) REFERENCES enum_binding (id) ); -CREATE INDEX ix_enum_binding_close_mappings_enum_binding_id ON enum_binding_close_mappings (enum_binding_id); CREATE INDEX ix_enum_binding_close_mappings_close_mappings ON enum_binding_close_mappings (close_mappings); +CREATE INDEX ix_enum_binding_close_mappings_enum_binding_id ON enum_binding_close_mappings (enum_binding_id); CREATE TABLE enum_binding_related_mappings ( enum_binding_id INTEGER, @@ -7385,8 +7385,8 @@ CREATE TABLE enum_binding_related_mappings ( PRIMARY KEY (enum_binding_id, related_mappings), FOREIGN KEY(enum_binding_id) REFERENCES enum_binding (id) ); -CREATE INDEX ix_enum_binding_related_mappings_related_mappings ON enum_binding_related_mappings (related_mappings); CREATE INDEX ix_enum_binding_related_mappings_enum_binding_id ON enum_binding_related_mappings (enum_binding_id); +CREATE INDEX ix_enum_binding_related_mappings_related_mappings ON enum_binding_related_mappings (related_mappings); CREATE TABLE enum_binding_narrow_mappings ( enum_binding_id INTEGER, @@ -7394,8 +7394,8 @@ CREATE TABLE enum_binding_narrow_mappings ( PRIMARY KEY (enum_binding_id, narrow_mappings), FOREIGN KEY(enum_binding_id) REFERENCES enum_binding (id) ); -CREATE INDEX ix_enum_binding_narrow_mappings_narrow_mappings ON enum_binding_narrow_mappings (narrow_mappings); CREATE INDEX ix_enum_binding_narrow_mappings_enum_binding_id ON enum_binding_narrow_mappings (enum_binding_id); +CREATE INDEX ix_enum_binding_narrow_mappings_narrow_mappings ON enum_binding_narrow_mappings (narrow_mappings); CREATE TABLE enum_binding_broad_mappings ( enum_binding_id INTEGER, @@ -7403,8 +7403,8 @@ CREATE TABLE enum_binding_broad_mappings ( PRIMARY KEY (enum_binding_id, broad_mappings), FOREIGN KEY(enum_binding_id) REFERENCES enum_binding (id) ); -CREATE INDEX ix_enum_binding_broad_mappings_broad_mappings ON enum_binding_broad_mappings (broad_mappings); CREATE INDEX ix_enum_binding_broad_mappings_enum_binding_id ON enum_binding_broad_mappings (enum_binding_id); +CREATE INDEX ix_enum_binding_broad_mappings_broad_mappings ON enum_binding_broad_mappings (broad_mappings); CREATE TABLE enum_binding_contributors ( enum_binding_id INTEGER, @@ -7563,54 +7563,54 @@ CREATE TABLE alt_description ( FOREIGN KEY(unique_key_unique_key_name) REFERENCES unique_key (unique_key_name), FOREIGN KEY(type_mapping_framework) REFERENCES type_mapping (framework) ); -CREATE INDEX ix_alt_description_anonymous_expression_id ON alt_description (anonymous_expression_id); -CREATE INDEX ix_alt_description_element_name ON alt_description (element_name); -CREATE INDEX ix_alt_description_array_expression_id ON alt_description (array_expression_id); -CREATE INDEX alt_description_array_expression_id_source_idx ON alt_description (array_expression_id, source); -CREATE INDEX alt_description_enum_definition_name_source_idx ON alt_description (enum_definition_name, source); -CREATE INDEX ix_alt_description_source ON alt_description (source); -CREATE INDEX ix_alt_description_type_mapping_framework ON alt_description (type_mapping_framework); -CREATE INDEX alt_description_common_metadata_id_source_idx ON alt_description (common_metadata_id, source); -CREATE INDEX alt_description_anonymous_class_expression_id_source_idx ON alt_description (anonymous_class_expression_id, source); -CREATE INDEX ix_alt_description_structured_alias_id ON alt_description (structured_alias_id); -CREATE INDEX ix_alt_description_class_rule_id ON alt_description (class_rule_id); -CREATE INDEX ix_alt_description_common_metadata_id ON alt_description (common_metadata_id); -CREATE INDEX ix_alt_description_unique_key_unique_key_name ON alt_description (unique_key_unique_key_name); -CREATE INDEX alt_description_path_expression_id_source_idx ON alt_description (path_expression_id, source); -CREATE INDEX alt_description_permissible_value_text_source_idx ON alt_description (permissible_value_text, source); CREATE INDEX ix_alt_description_enum_binding_id ON alt_description (enum_binding_id); CREATE INDEX alt_description_dimension_expression_id_source_idx ON alt_description (dimension_expression_id, source); CREATE INDEX ix_alt_description_class_definition_name ON alt_description (class_definition_name); CREATE INDEX alt_description_enum_binding_id_source_idx ON alt_description (enum_binding_id, source); CREATE INDEX ix_alt_description_permissible_value_text ON alt_description (permissible_value_text); -CREATE INDEX alt_description_anonymous_expression_id_source_idx ON alt_description (anonymous_expression_id, source); CREATE INDEX alt_description_element_name_source_idx ON alt_description (element_name, source); CREATE INDEX alt_description_class_definition_name_source_idx ON alt_description (class_definition_name, source); CREATE INDEX ix_alt_description_anonymous_class_expression_id ON alt_description (anonymous_class_expression_id); CREATE INDEX alt_description_schema_definition_name_source_idx ON alt_description (schema_definition_name, source); -CREATE INDEX alt_description_anonymous_slot_expression_id_source_idx ON alt_description (anonymous_slot_expression_id, source); CREATE INDEX ix_alt_description_definition_name ON alt_description (definition_name); +CREATE INDEX alt_description_anonymous_slot_expression_id_source_idx ON alt_description (anonymous_slot_expression_id, source); CREATE INDEX ix_alt_description_import_expression_id ON alt_description (import_expression_id); CREATE INDEX alt_description_unique_key_unique_key_name_source_idx ON alt_description (unique_key_unique_key_name, source); CREATE INDEX ix_alt_description_slot_definition_name ON alt_description (slot_definition_name); CREATE INDEX alt_description_type_definition_name_source_idx ON alt_description (type_definition_name, source); +CREATE INDEX alt_description_pattern_expression_id_source_idx ON alt_description (pattern_expression_id, source); CREATE INDEX alt_description_subset_definition_name_source_idx ON alt_description (subset_definition_name, source); CREATE INDEX alt_description_structured_alias_id_source_idx ON alt_description (structured_alias_id, source); -CREATE INDEX alt_description_pattern_expression_id_source_idx ON alt_description (pattern_expression_id, source); -CREATE INDEX alt_description_import_expression_id_source_idx ON alt_description (import_expression_id, source); CREATE INDEX ix_alt_description_subset_definition_name ON alt_description (subset_definition_name); -CREATE INDEX ix_alt_description_description ON alt_description (description); CREATE INDEX ix_alt_description_anonymous_slot_expression_id ON alt_description (anonymous_slot_expression_id); +CREATE INDEX ix_alt_description_description ON alt_description (description); CREATE INDEX ix_alt_description_pattern_expression_id ON alt_description (pattern_expression_id); CREATE INDEX alt_description_class_rule_id_source_idx ON alt_description (class_rule_id, source); CREATE INDEX ix_alt_description_type_definition_name ON alt_description (type_definition_name); CREATE INDEX alt_description_definition_name_source_idx ON alt_description (definition_name, source); +CREATE INDEX alt_description_path_expression_id_source_idx ON alt_description (path_expression_id, source); CREATE INDEX ix_alt_description_path_expression_id ON alt_description (path_expression_id); CREATE INDEX alt_description_slot_definition_name_source_idx ON alt_description (slot_definition_name, source); CREATE INDEX alt_description_type_mapping_framework_source_idx ON alt_description (type_mapping_framework, source); CREATE INDEX ix_alt_description_dimension_expression_id ON alt_description (dimension_expression_id); CREATE INDEX ix_alt_description_enum_definition_name ON alt_description (enum_definition_name); +CREATE INDEX alt_description_anonymous_expression_id_source_idx ON alt_description (anonymous_expression_id, source); +CREATE INDEX alt_description_import_expression_id_source_idx ON alt_description (import_expression_id, source); CREATE INDEX ix_alt_description_schema_definition_name ON alt_description (schema_definition_name); +CREATE INDEX ix_alt_description_anonymous_expression_id ON alt_description (anonymous_expression_id); +CREATE INDEX ix_alt_description_element_name ON alt_description (element_name); +CREATE INDEX alt_description_array_expression_id_source_idx ON alt_description (array_expression_id, source); +CREATE INDEX ix_alt_description_array_expression_id ON alt_description (array_expression_id); +CREATE INDEX ix_alt_description_unique_key_unique_key_name ON alt_description (unique_key_unique_key_name); +CREATE INDEX alt_description_enum_definition_name_source_idx ON alt_description (enum_definition_name, source); +CREATE INDEX ix_alt_description_source ON alt_description (source); +CREATE INDEX ix_alt_description_type_mapping_framework ON alt_description (type_mapping_framework); +CREATE INDEX alt_description_common_metadata_id_source_idx ON alt_description (common_metadata_id, source); +CREATE INDEX alt_description_anonymous_class_expression_id_source_idx ON alt_description (anonymous_class_expression_id, source); +CREATE INDEX ix_alt_description_structured_alias_id ON alt_description (structured_alias_id); +CREATE INDEX ix_alt_description_class_rule_id ON alt_description (class_rule_id); +CREATE INDEX alt_description_permissible_value_text_source_idx ON alt_description (permissible_value_text, source); +CREATE INDEX ix_alt_description_common_metadata_id ON alt_description (common_metadata_id); CREATE TABLE annotation ( tag TEXT NOT NULL, @@ -7690,56 +7690,56 @@ CREATE TABLE annotation ( FOREIGN KEY(annotation_tag) REFERENCES annotation (tag), FOREIGN KEY(value_id) REFERENCES "AnyValue" (id) ); -CREATE INDEX ix_annotation_schema_definition_name ON annotation (schema_definition_name); -CREATE INDEX annotation_schema_definition_name_tag_idx ON annotation (schema_definition_name, tag); -CREATE INDEX annotation_import_expression_id_tag_idx ON annotation (import_expression_id, tag); -CREATE INDEX ix_annotation_dimension_expression_id ON annotation (dimension_expression_id); -CREATE INDEX annotation_type_definition_name_tag_idx ON annotation (type_definition_name, tag); -CREATE INDEX ix_annotation_anonymous_expression_id ON annotation (anonymous_expression_id); -CREATE INDEX ix_annotation_value_id ON annotation (value_id); -CREATE INDEX annotation_subset_definition_name_tag_idx ON annotation (subset_definition_name, tag); -CREATE INDEX annotation_anonymous_expression_id_tag_idx ON annotation (anonymous_expression_id, tag); -CREATE INDEX annotation_annotatable_id_tag_idx ON annotation (annotatable_id, tag); -CREATE INDEX annotation_array_expression_id_tag_idx ON annotation (array_expression_id, tag); -CREATE INDEX ix_annotation_array_expression_id ON annotation (array_expression_id); -CREATE INDEX annotation_definition_name_tag_idx ON annotation (definition_name, tag); -CREATE INDEX ix_annotation_annotation_tag ON annotation (annotation_tag); -CREATE INDEX ix_annotation_annotatable_id ON annotation (annotatable_id); -CREATE INDEX annotation_enum_definition_name_tag_idx ON annotation (enum_definition_name, tag); -CREATE INDEX annotation_anonymous_class_expression_id_tag_idx ON annotation (anonymous_class_expression_id, tag); -CREATE INDEX ix_annotation_class_rule_id ON annotation (class_rule_id); -CREATE INDEX annotation_permissible_value_text_tag_idx ON annotation (permissible_value_text, tag); CREATE INDEX ix_annotation_element_name ON annotation (element_name); CREATE INDEX ix_annotation_type_mapping_framework ON annotation (type_mapping_framework); -CREATE INDEX annotation_slot_definition_name_tag_idx ON annotation (slot_definition_name, tag); CREATE INDEX ix_annotation_enum_binding_id ON annotation (enum_binding_id); CREATE INDEX ix_annotation_class_definition_name ON annotation (class_definition_name); -CREATE INDEX annotation_path_expression_id_tag_idx ON annotation (path_expression_id, tag); -CREATE INDEX annotation_annotation_tag_tag_idx ON annotation (annotation_tag, tag); CREATE INDEX ix_annotation_unique_key_unique_key_name ON annotation (unique_key_unique_key_name); +CREATE INDEX annotation_enum_definition_name_tag_idx ON annotation (enum_definition_name, tag); +CREATE INDEX annotation_path_expression_id_tag_idx ON annotation (path_expression_id, tag); CREATE INDEX annotation_dimension_expression_id_tag_idx ON annotation (dimension_expression_id, tag); +CREATE INDEX annotation_annotation_tag_tag_idx ON annotation (annotation_tag, tag); CREATE INDEX ix_annotation_enum_definition_name ON annotation (enum_definition_name); +CREATE INDEX annotation_anonymous_class_expression_id_tag_idx ON annotation (anonymous_class_expression_id, tag); +CREATE INDEX annotation_permissible_value_text_tag_idx ON annotation (permissible_value_text, tag); CREATE INDEX ix_annotation_anonymous_class_expression_id ON annotation (anonymous_class_expression_id); +CREATE INDEX ix_annotation_permissible_value_text ON annotation (permissible_value_text); CREATE INDEX annotation_enum_binding_id_tag_idx ON annotation (enum_binding_id, tag); CREATE INDEX annotation_class_definition_name_tag_idx ON annotation (class_definition_name, tag); -CREATE INDEX annotation_unique_key_unique_key_name_tag_idx ON annotation (unique_key_unique_key_name, tag); CREATE INDEX ix_annotation_definition_name ON annotation (definition_name); -CREATE INDEX ix_annotation_permissible_value_text ON annotation (permissible_value_text); +CREATE INDEX annotation_unique_key_unique_key_name_tag_idx ON annotation (unique_key_unique_key_name, tag); CREATE INDEX ix_annotation_tag ON annotation (tag); CREATE INDEX ix_annotation_slot_definition_name ON annotation (slot_definition_name); CREATE INDEX annotation_element_name_tag_idx ON annotation (element_name, tag); CREATE INDEX annotation_anonymous_slot_expression_id_tag_idx ON annotation (anonymous_slot_expression_id, tag); -CREATE INDEX ix_annotation_structured_alias_id ON annotation (structured_alias_id); CREATE INDEX annotation_pattern_expression_id_tag_idx ON annotation (pattern_expression_id, tag); -CREATE INDEX ix_annotation_subset_definition_name ON annotation (subset_definition_name); +CREATE INDEX ix_annotation_structured_alias_id ON annotation (structured_alias_id); CREATE INDEX ix_annotation_import_expression_id ON annotation (import_expression_id); +CREATE INDEX ix_annotation_subset_definition_name ON annotation (subset_definition_name); CREATE INDEX ix_annotation_type_definition_name ON annotation (type_definition_name); CREATE INDEX ix_annotation_anonymous_slot_expression_id ON annotation (anonymous_slot_expression_id); CREATE INDEX annotation_structured_alias_id_tag_idx ON annotation (structured_alias_id, tag); CREATE INDEX annotation_class_rule_id_tag_idx ON annotation (class_rule_id, tag); -CREATE INDEX annotation_type_mapping_framework_tag_idx ON annotation (type_mapping_framework, tag); CREATE INDEX ix_annotation_pattern_expression_id ON annotation (pattern_expression_id); +CREATE INDEX annotation_type_mapping_framework_tag_idx ON annotation (type_mapping_framework, tag); CREATE INDEX ix_annotation_path_expression_id ON annotation (path_expression_id); +CREATE INDEX annotation_slot_definition_name_tag_idx ON annotation (slot_definition_name, tag); +CREATE INDEX annotation_import_expression_id_tag_idx ON annotation (import_expression_id, tag); +CREATE INDEX ix_annotation_dimension_expression_id ON annotation (dimension_expression_id); +CREATE INDEX ix_annotation_schema_definition_name ON annotation (schema_definition_name); +CREATE INDEX annotation_schema_definition_name_tag_idx ON annotation (schema_definition_name, tag); +CREATE INDEX ix_annotation_value_id ON annotation (value_id); +CREATE INDEX annotation_type_definition_name_tag_idx ON annotation (type_definition_name, tag); +CREATE INDEX ix_annotation_anonymous_expression_id ON annotation (anonymous_expression_id); +CREATE INDEX ix_annotation_array_expression_id ON annotation (array_expression_id); +CREATE INDEX annotation_subset_definition_name_tag_idx ON annotation (subset_definition_name, tag); +CREATE INDEX annotation_anonymous_expression_id_tag_idx ON annotation (anonymous_expression_id, tag); +CREATE INDEX annotation_array_expression_id_tag_idx ON annotation (array_expression_id, tag); +CREATE INDEX ix_annotation_annotation_tag ON annotation (annotation_tag); +CREATE INDEX annotation_annotatable_id_tag_idx ON annotation (annotatable_id, tag); +CREATE INDEX annotation_definition_name_tag_idx ON annotation (definition_name, tag); +CREATE INDEX ix_annotation_annotatable_id ON annotation (annotatable_id); +CREATE INDEX ix_annotation_class_rule_id ON annotation (class_rule_id); CREATE TABLE structured_alias_category ( structured_alias_id INTEGER, @@ -7756,8 +7756,8 @@ CREATE TABLE structured_alias_contexts ( PRIMARY KEY (structured_alias_id, contexts), FOREIGN KEY(structured_alias_id) REFERENCES structured_alias (id) ); -CREATE INDEX ix_structured_alias_contexts_contexts ON structured_alias_contexts (contexts); CREATE INDEX ix_structured_alias_contexts_structured_alias_id ON structured_alias_contexts (structured_alias_id); +CREATE INDEX ix_structured_alias_contexts_contexts ON structured_alias_contexts (contexts); CREATE TABLE structured_alias_todos ( structured_alias_id INTEGER, @@ -7783,8 +7783,8 @@ CREATE TABLE structured_alias_comments ( PRIMARY KEY (structured_alias_id, comments), FOREIGN KEY(structured_alias_id) REFERENCES structured_alias (id) ); -CREATE INDEX ix_structured_alias_comments_structured_alias_id ON structured_alias_comments (structured_alias_id); CREATE INDEX ix_structured_alias_comments_comments ON structured_alias_comments (comments); +CREATE INDEX ix_structured_alias_comments_structured_alias_id ON structured_alias_comments (structured_alias_id); CREATE TABLE structured_alias_in_subset ( structured_alias_id INTEGER, @@ -7838,8 +7838,8 @@ CREATE TABLE structured_alias_close_mappings ( PRIMARY KEY (structured_alias_id, close_mappings), FOREIGN KEY(structured_alias_id) REFERENCES structured_alias (id) ); -CREATE INDEX ix_structured_alias_close_mappings_structured_alias_id ON structured_alias_close_mappings (structured_alias_id); CREATE INDEX ix_structured_alias_close_mappings_close_mappings ON structured_alias_close_mappings (close_mappings); +CREATE INDEX ix_structured_alias_close_mappings_structured_alias_id ON structured_alias_close_mappings (structured_alias_id); CREATE TABLE structured_alias_related_mappings ( structured_alias_id INTEGER, @@ -7865,8 +7865,8 @@ CREATE TABLE structured_alias_broad_mappings ( PRIMARY KEY (structured_alias_id, broad_mappings), FOREIGN KEY(structured_alias_id) REFERENCES structured_alias (id) ); -CREATE INDEX ix_structured_alias_broad_mappings_broad_mappings ON structured_alias_broad_mappings (broad_mappings); CREATE INDEX ix_structured_alias_broad_mappings_structured_alias_id ON structured_alias_broad_mappings (structured_alias_id); +CREATE INDEX ix_structured_alias_broad_mappings_broad_mappings ON structured_alias_broad_mappings (broad_mappings); CREATE TABLE structured_alias_contributors ( structured_alias_id INTEGER, @@ -7967,38 +7967,19 @@ CREATE TABLE extension ( FOREIGN KEY(annotation_tag) REFERENCES annotation (tag), FOREIGN KEY(value_id) REFERENCES "AnyValue" (id) ); -CREATE INDEX extension_slot_definition_name_tag_idx ON extension (slot_definition_name, tag); -CREATE INDEX ix_extension_pattern_expression_id ON extension (pattern_expression_id); -CREATE INDEX ix_extension_structured_alias_id ON extension (structured_alias_id); -CREATE INDEX extension_definition_name_tag_idx ON extension (definition_name, tag); -CREATE INDEX ix_extension_subset_definition_name ON extension (subset_definition_name); -CREATE INDEX ix_extension_anonymous_slot_expression_id ON extension (anonymous_slot_expression_id); -CREATE INDEX extension_extension_tag_tag_idx ON extension (extension_tag, tag); -CREATE INDEX extension_array_expression_id_tag_idx ON extension (array_expression_id, tag); -CREATE INDEX ix_extension_type_definition_name ON extension (type_definition_name); -CREATE INDEX extension_element_name_tag_idx ON extension (element_name, tag); -CREATE INDEX extension_anonymous_expression_id_tag_idx ON extension (anonymous_expression_id, tag); -CREATE INDEX ix_extension_dimension_expression_id ON extension (dimension_expression_id); -CREATE INDEX ix_extension_path_expression_id ON extension (path_expression_id); -CREATE INDEX ix_extension_value_id ON extension (value_id); -CREATE INDEX extension_permissible_value_text_tag_idx ON extension (permissible_value_text, tag); -CREATE INDEX extension_anonymous_class_expression_id_tag_idx ON extension (anonymous_class_expression_id, tag); -CREATE INDEX extension_import_expression_id_tag_idx ON extension (import_expression_id, tag); -CREATE INDEX ix_extension_schema_definition_name ON extension (schema_definition_name); CREATE INDEX ix_extension_annotation_tag ON extension (annotation_tag); -CREATE INDEX extension_enum_definition_name_tag_idx ON extension (enum_definition_name, tag); CREATE INDEX ix_extension_anonymous_expression_id ON extension (anonymous_expression_id); CREATE INDEX ix_extension_array_expression_id ON extension (array_expression_id); CREATE INDEX ix_extension_extensible_id ON extension (extensible_id); CREATE INDEX extension_extensible_id_tag_idx ON extension (extensible_id, tag); CREATE INDEX extension_dimension_expression_id_tag_idx ON extension (dimension_expression_id, tag); +CREATE INDEX ix_extension_element_name ON extension (element_name); CREATE INDEX ix_extension_extension_tag ON extension (extension_tag); CREATE INDEX extension_path_expression_id_tag_idx ON extension (path_expression_id, tag); -CREATE INDEX ix_extension_element_name ON extension (element_name); CREATE INDEX ix_extension_class_rule_id ON extension (class_rule_id); +CREATE INDEX extension_schema_definition_name_tag_idx ON extension (schema_definition_name, tag); CREATE INDEX extension_unique_key_unique_key_name_tag_idx ON extension (unique_key_unique_key_name, tag); CREATE INDEX ix_extension_type_mapping_framework ON extension (type_mapping_framework); -CREATE INDEX extension_schema_definition_name_tag_idx ON extension (schema_definition_name, tag); CREATE INDEX extension_class_definition_name_tag_idx ON extension (class_definition_name, tag); CREATE INDEX extension_enum_binding_id_tag_idx ON extension (enum_binding_id, tag); CREATE INDEX ix_extension_class_definition_name ON extension (class_definition_name); @@ -8007,15 +7988,34 @@ CREATE INDEX ix_extension_enum_binding_id ON extension (enum_binding_id); CREATE INDEX ix_extension_unique_key_unique_key_name ON extension (unique_key_unique_key_name); CREATE INDEX extension_pattern_expression_id_tag_idx ON extension (pattern_expression_id, tag); CREATE INDEX extension_anonymous_slot_expression_id_tag_idx ON extension (anonymous_slot_expression_id, tag); -CREATE INDEX ix_extension_enum_definition_name ON extension (enum_definition_name); -CREATE INDEX ix_extension_anonymous_class_expression_id ON extension (anonymous_class_expression_id); +CREATE INDEX extension_anonymous_class_expression_id_tag_idx ON extension (anonymous_class_expression_id, tag); CREATE INDEX ix_extension_permissible_value_text ON extension (permissible_value_text); CREATE INDEX extension_type_definition_name_tag_idx ON extension (type_definition_name, tag); -CREATE INDEX extension_class_rule_id_tag_idx ON extension (class_rule_id, tag); +CREATE INDEX ix_extension_enum_definition_name ON extension (enum_definition_name); +CREATE INDEX ix_extension_anonymous_class_expression_id ON extension (anonymous_class_expression_id); CREATE INDEX extension_type_mapping_framework_tag_idx ON extension (type_mapping_framework, tag); -CREATE INDEX ix_extension_tag ON extension (tag); CREATE INDEX extension_subset_definition_name_tag_idx ON extension (subset_definition_name, tag); +CREATE INDEX extension_class_rule_id_tag_idx ON extension (class_rule_id, tag); +CREATE INDEX ix_extension_tag ON extension (tag); CREATE INDEX extension_structured_alias_id_tag_idx ON extension (structured_alias_id, tag); CREATE INDEX ix_extension_import_expression_id ON extension (import_expression_id); CREATE INDEX ix_extension_slot_definition_name ON extension (slot_definition_name); +CREATE INDEX extension_enum_definition_name_tag_idx ON extension (enum_definition_name, tag); CREATE INDEX ix_extension_definition_name ON extension (definition_name); +CREATE INDEX extension_import_expression_id_tag_idx ON extension (import_expression_id, tag); +CREATE INDEX extension_slot_definition_name_tag_idx ON extension (slot_definition_name, tag); +CREATE INDEX extension_definition_name_tag_idx ON extension (definition_name, tag); +CREATE INDEX ix_extension_structured_alias_id ON extension (structured_alias_id); +CREATE INDEX ix_extension_anonymous_slot_expression_id ON extension (anonymous_slot_expression_id); +CREATE INDEX ix_extension_pattern_expression_id ON extension (pattern_expression_id); +CREATE INDEX ix_extension_subset_definition_name ON extension (subset_definition_name); +CREATE INDEX extension_extension_tag_tag_idx ON extension (extension_tag, tag); +CREATE INDEX extension_element_name_tag_idx ON extension (element_name, tag); +CREATE INDEX extension_array_expression_id_tag_idx ON extension (array_expression_id, tag); +CREATE INDEX ix_extension_type_definition_name ON extension (type_definition_name); +CREATE INDEX extension_anonymous_expression_id_tag_idx ON extension (anonymous_expression_id, tag); +CREATE INDEX extension_permissible_value_text_tag_idx ON extension (permissible_value_text, tag); +CREATE INDEX ix_extension_path_expression_id ON extension (path_expression_id); +CREATE INDEX ix_extension_dimension_expression_id ON extension (dimension_expression_id); +CREATE INDEX ix_extension_value_id ON extension (value_id); +CREATE INDEX ix_extension_schema_definition_name ON extension (schema_definition_name); diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/sqlschema/meta.sql b/packages/linkml_runtime/src/linkml_runtime/linkml_model/sqlschema/meta.sql index a4c4350b34..369ebaa392 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/sqlschema/meta.sql +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/sqlschema/meta.sql @@ -408,8 +408,8 @@ -- * 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 --- * Slot: key Description: True means that the key slot(s) uniquely identify the elements within a single container --- * Slot: identifier Description: True means that the key slot(s) uniquely identifies the elements. There can be at most one identifier or key per container +-- * Slot: key Description: True means that the slot is the "singular unique key" (also known more simply as the "key slot") of its class. Such a slot uniquely identifies instances of the class within a single container, meaning there cannot be two (or more) instances of the class (or instances of any of its descendants) with the same value for the key slot within the container. +-- * Slot: identifier Description: True means that the slot is the identifier slot of its class. Such a slot uniquely identifies instances of the class throughout an entire document, meaning there cannot be two (or more) instances of the class (or instances of any of its descendants) with the same value for the identifier slot anywhere in the document. -- * Slot: designates_type Description: True means that the key slot(s) is used to determine the instantiation (types) relation between objects and a ClassDefinition -- * Slot: alias 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. -- * Slot: owner Description: the "owner" of the slot. It is the class if it appears in the slots list, otherwise the declaring slot @@ -843,10 +843,10 @@ -- * Slot: annotatable_id Description: Autocreated FK slot -- * Slot: annotation_tag Description: Autocreated FK slot -- * Slot: value_id Description: the actual annotation --- # Class: UnitOfMeasure 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). +-- # Class: UnitOfMeasure 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). -- * Slot: id -- * Slot: symbol Description: name of the unit encoded as a symbol --- * Slot: abbreviation 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) +-- * Slot: abbreviation 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) -- * Slot: descriptive_name Description: the spelled out name of the unit, for example, meter -- * Slot: ucum_code Description: associates a QUDT unit with its UCUM code (case-sensitive). -- * Slot: derivation Description: Expression for deriving this unit from other units @@ -3019,12 +3019,12 @@ CREATE TABLE setting ( FOREIGN KEY(schema_definition_name) REFERENCES schema_definition (name), FOREIGN KEY(import_expression_id) REFERENCES import_expression (id) ); +CREATE INDEX ix_setting_schema_definition_name ON setting (schema_definition_name); CREATE INDEX setting_schema_definition_name_setting_key_idx ON setting (schema_definition_name, setting_key); -CREATE INDEX ix_setting_setting_value ON setting (setting_value); CREATE INDEX ix_setting_setting_key ON setting (setting_key); +CREATE INDEX ix_setting_setting_value ON setting (setting_value); CREATE INDEX setting_import_expression_id_setting_key_idx ON setting (import_expression_id, setting_key); CREATE INDEX ix_setting_import_expression_id ON setting (import_expression_id); -CREATE INDEX ix_setting_schema_definition_name ON setting (schema_definition_name); CREATE TABLE prefix ( prefix_prefix TEXT NOT NULL, @@ -3034,10 +3034,10 @@ CREATE TABLE prefix ( UNIQUE (schema_definition_name, prefix_prefix), FOREIGN KEY(schema_definition_name) REFERENCES schema_definition (name) ); -CREATE INDEX ix_prefix_prefix_prefix ON prefix (prefix_prefix); CREATE INDEX ix_prefix_prefix_reference ON prefix (prefix_reference); -CREATE INDEX ix_prefix_schema_definition_name ON prefix (schema_definition_name); CREATE INDEX prefix_schema_definition_name_prefix_prefix_idx ON prefix (schema_definition_name, prefix_prefix); +CREATE INDEX ix_prefix_schema_definition_name ON prefix (schema_definition_name); +CREATE INDEX ix_prefix_prefix_prefix ON prefix (prefix_prefix); CREATE TABLE unique_key ( unique_key_name TEXT NOT NULL, @@ -3062,25 +3062,25 @@ CREATE TABLE unique_key ( UNIQUE (class_definition_name, unique_key_name), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); +CREATE INDEX ix_unique_key_in_language ON unique_key (in_language); +CREATE INDEX ix_unique_key_deprecated_element_has_possible_replacement ON unique_key (deprecated_element_has_possible_replacement); +CREATE INDEX ix_unique_key_deprecated ON unique_key (deprecated); +CREATE INDEX ix_unique_key_imported_from ON unique_key (imported_from); +CREATE INDEX ix_unique_key_created_on ON unique_key (created_on); +CREATE INDEX ix_unique_key_modified_by ON unique_key (modified_by); +CREATE INDEX ix_unique_key_rank ON unique_key (rank); +CREATE INDEX ix_unique_key_description ON unique_key (description); CREATE INDEX ix_unique_key_unique_key_name ON unique_key (unique_key_name); CREATE INDEX unique_key_class_definition_name_unique_key_name_idx ON unique_key (class_definition_name, unique_key_name); -CREATE INDEX ix_unique_key_class_definition_name ON unique_key (class_definition_name); -CREATE INDEX ix_unique_key_status ON unique_key (status); CREATE INDEX ix_unique_key_deprecated_element_has_exact_replacement ON unique_key (deprecated_element_has_exact_replacement); -CREATE INDEX ix_unique_key_created_by ON unique_key (created_by); -CREATE INDEX ix_unique_key_last_updated_on ON unique_key (last_updated_on); +CREATE INDEX ix_unique_key_class_definition_name ON unique_key (class_definition_name); +CREATE INDEX ix_unique_key_title ON unique_key (title); CREATE INDEX ix_unique_key_from_schema ON unique_key (from_schema); CREATE INDEX ix_unique_key_source ON unique_key (source); -CREATE INDEX ix_unique_key_title ON unique_key (title); -CREATE INDEX ix_unique_key_deprecated ON unique_key (deprecated); +CREATE INDEX ix_unique_key_created_by ON unique_key (created_by); +CREATE INDEX ix_unique_key_last_updated_on ON unique_key (last_updated_on); +CREATE INDEX ix_unique_key_status ON unique_key (status); CREATE INDEX ix_unique_key_consider_nulls_inequal ON unique_key (consider_nulls_inequal); -CREATE INDEX ix_unique_key_in_language ON unique_key (in_language); -CREATE INDEX ix_unique_key_modified_by ON unique_key (modified_by); -CREATE INDEX ix_unique_key_rank ON unique_key (rank); -CREATE INDEX ix_unique_key_deprecated_element_has_possible_replacement ON unique_key (deprecated_element_has_possible_replacement); -CREATE INDEX ix_unique_key_created_on ON unique_key (created_on); -CREATE INDEX ix_unique_key_imported_from ON unique_key (imported_from); -CREATE INDEX ix_unique_key_description ON unique_key (description); CREATE TABLE type_mapping ( framework TEXT NOT NULL, @@ -3104,22 +3104,22 @@ CREATE TABLE type_mapping ( PRIMARY KEY (framework, type, string_serialization, description, title, deprecated, from_schema, imported_from, source, in_language, deprecated_element_has_exact_replacement, deprecated_element_has_possible_replacement, created_by, created_on, last_updated_on, modified_by, status, rank), FOREIGN KEY(type) REFERENCES type_definition (name) ); -CREATE INDEX ix_type_mapping_description ON type_mapping (description); CREATE INDEX ix_type_mapping_title ON type_mapping (title); +CREATE INDEX ix_type_mapping_description ON type_mapping (description); CREATE INDEX ix_type_mapping_string_serialization ON type_mapping (string_serialization); -CREATE INDEX ix_type_mapping_source ON type_mapping (source); -CREATE INDEX ix_type_mapping_in_language ON type_mapping (in_language); -CREATE INDEX ix_type_mapping_deprecated_element_has_exact_replacement ON type_mapping (deprecated_element_has_exact_replacement); -CREATE INDEX ix_type_mapping_deprecated_element_has_possible_replacement ON type_mapping (deprecated_element_has_possible_replacement); -CREATE INDEX ix_type_mapping_framework ON type_mapping (framework); CREATE INDEX ix_type_mapping_created_by ON type_mapping (created_by); CREATE INDEX ix_type_mapping_created_on ON type_mapping (created_on); CREATE INDEX ix_type_mapping_last_updated_on ON type_mapping (last_updated_on); CREATE INDEX ix_type_mapping_modified_by ON type_mapping (modified_by); CREATE INDEX ix_type_mapping_from_schema ON type_mapping (from_schema); -CREATE INDEX ix_type_mapping_imported_from ON type_mapping (imported_from); CREATE INDEX ix_type_mapping_status ON type_mapping (status); +CREATE INDEX ix_type_mapping_framework ON type_mapping (framework); +CREATE INDEX ix_type_mapping_imported_from ON type_mapping (imported_from); +CREATE INDEX ix_type_mapping_source ON type_mapping (source); CREATE INDEX ix_type_mapping_rank ON type_mapping (rank); +CREATE INDEX ix_type_mapping_in_language ON type_mapping (in_language); +CREATE INDEX ix_type_mapping_deprecated_element_has_exact_replacement ON type_mapping (deprecated_element_has_exact_replacement); +CREATE INDEX ix_type_mapping_deprecated_element_has_possible_replacement ON type_mapping (deprecated_element_has_possible_replacement); CREATE INDEX ix_type_mapping_type ON type_mapping (type); CREATE INDEX ix_type_mapping_deprecated ON type_mapping (deprecated); @@ -3129,8 +3129,8 @@ CREATE TABLE common_metadata_todos ( PRIMARY KEY (common_metadata_id, todos), FOREIGN KEY(common_metadata_id) REFERENCES common_metadata (id) ); -CREATE INDEX ix_common_metadata_todos_common_metadata_id ON common_metadata_todos (common_metadata_id); CREATE INDEX ix_common_metadata_todos_todos ON common_metadata_todos (todos); +CREATE INDEX ix_common_metadata_todos_common_metadata_id ON common_metadata_todos (common_metadata_id); CREATE TABLE common_metadata_notes ( common_metadata_id INTEGER, @@ -3147,8 +3147,8 @@ CREATE TABLE common_metadata_comments ( PRIMARY KEY (common_metadata_id, comments), FOREIGN KEY(common_metadata_id) REFERENCES common_metadata (id) ); -CREATE INDEX ix_common_metadata_comments_comments ON common_metadata_comments (comments); CREATE INDEX ix_common_metadata_comments_common_metadata_id ON common_metadata_comments (common_metadata_id); +CREATE INDEX ix_common_metadata_comments_comments ON common_metadata_comments (comments); CREATE TABLE common_metadata_see_also ( common_metadata_id INTEGER, @@ -3156,8 +3156,8 @@ CREATE TABLE common_metadata_see_also ( PRIMARY KEY (common_metadata_id, see_also), FOREIGN KEY(common_metadata_id) REFERENCES common_metadata (id) ); -CREATE INDEX ix_common_metadata_see_also_common_metadata_id ON common_metadata_see_also (common_metadata_id); CREATE INDEX ix_common_metadata_see_also_see_also ON common_metadata_see_also (see_also); +CREATE INDEX ix_common_metadata_see_also_common_metadata_id ON common_metadata_see_also (common_metadata_id); CREATE TABLE common_metadata_aliases ( common_metadata_id INTEGER, @@ -3174,8 +3174,8 @@ CREATE TABLE common_metadata_mappings ( PRIMARY KEY (common_metadata_id, mappings), FOREIGN KEY(common_metadata_id) REFERENCES common_metadata (id) ); -CREATE INDEX ix_common_metadata_mappings_mappings ON common_metadata_mappings (mappings); CREATE INDEX ix_common_metadata_mappings_common_metadata_id ON common_metadata_mappings (common_metadata_id); +CREATE INDEX ix_common_metadata_mappings_mappings ON common_metadata_mappings (mappings); CREATE TABLE common_metadata_exact_mappings ( common_metadata_id INTEGER, @@ -3255,8 +3255,8 @@ CREATE TABLE element_id_prefixes ( PRIMARY KEY (element_name, id_prefixes), FOREIGN KEY(element_name) REFERENCES element (name) ); -CREATE INDEX ix_element_id_prefixes_id_prefixes ON element_id_prefixes (id_prefixes); CREATE INDEX ix_element_id_prefixes_element_name ON element_id_prefixes (element_name); +CREATE INDEX ix_element_id_prefixes_id_prefixes ON element_id_prefixes (id_prefixes); CREATE TABLE element_implements ( element_name TEXT, @@ -3264,8 +3264,8 @@ CREATE TABLE element_implements ( PRIMARY KEY (element_name, implements), FOREIGN KEY(element_name) REFERENCES element (name) ); -CREATE INDEX ix_element_implements_implements ON element_implements (implements); CREATE INDEX ix_element_implements_element_name ON element_implements (element_name); +CREATE INDEX ix_element_implements_implements ON element_implements (implements); CREATE TABLE element_instantiates ( element_name TEXT, @@ -3273,8 +3273,8 @@ CREATE TABLE element_instantiates ( PRIMARY KEY (element_name, instantiates), FOREIGN KEY(element_name) REFERENCES element (name) ); -CREATE INDEX ix_element_instantiates_instantiates ON element_instantiates (instantiates); CREATE INDEX ix_element_instantiates_element_name ON element_instantiates (element_name); +CREATE INDEX ix_element_instantiates_instantiates ON element_instantiates (instantiates); CREATE TABLE element_todos ( element_name TEXT, @@ -3282,8 +3282,8 @@ CREATE TABLE element_todos ( PRIMARY KEY (element_name, todos), FOREIGN KEY(element_name) REFERENCES element (name) ); -CREATE INDEX ix_element_todos_todos ON element_todos (todos); CREATE INDEX ix_element_todos_element_name ON element_todos (element_name); +CREATE INDEX ix_element_todos_todos ON element_todos (todos); CREATE TABLE element_notes ( element_name TEXT, @@ -3291,8 +3291,8 @@ CREATE TABLE element_notes ( PRIMARY KEY (element_name, notes), FOREIGN KEY(element_name) REFERENCES element (name) ); -CREATE INDEX ix_element_notes_element_name ON element_notes (element_name); CREATE INDEX ix_element_notes_notes ON element_notes (notes); +CREATE INDEX ix_element_notes_element_name ON element_notes (element_name); CREATE TABLE element_comments ( element_name TEXT, @@ -3318,8 +3318,8 @@ CREATE TABLE element_aliases ( PRIMARY KEY (element_name, aliases), FOREIGN KEY(element_name) REFERENCES element (name) ); -CREATE INDEX ix_element_aliases_aliases ON element_aliases (aliases); CREATE INDEX ix_element_aliases_element_name ON element_aliases (element_name); +CREATE INDEX ix_element_aliases_aliases ON element_aliases (aliases); CREATE TABLE element_mappings ( element_name TEXT, @@ -3327,8 +3327,8 @@ CREATE TABLE element_mappings ( PRIMARY KEY (element_name, mappings), FOREIGN KEY(element_name) REFERENCES element (name) ); -CREATE INDEX ix_element_mappings_mappings ON element_mappings (mappings); CREATE INDEX ix_element_mappings_element_name ON element_mappings (element_name); +CREATE INDEX ix_element_mappings_mappings ON element_mappings (mappings); CREATE TABLE element_exact_mappings ( element_name TEXT, @@ -3345,8 +3345,8 @@ CREATE TABLE element_close_mappings ( PRIMARY KEY (element_name, close_mappings), FOREIGN KEY(element_name) REFERENCES element (name) ); -CREATE INDEX ix_element_close_mappings_element_name ON element_close_mappings (element_name); CREATE INDEX ix_element_close_mappings_close_mappings ON element_close_mappings (close_mappings); +CREATE INDEX ix_element_close_mappings_element_name ON element_close_mappings (element_name); CREATE TABLE element_related_mappings ( element_name TEXT, @@ -3354,8 +3354,8 @@ CREATE TABLE element_related_mappings ( PRIMARY KEY (element_name, related_mappings), FOREIGN KEY(element_name) REFERENCES element (name) ); -CREATE INDEX ix_element_related_mappings_element_name ON element_related_mappings (element_name); CREATE INDEX ix_element_related_mappings_related_mappings ON element_related_mappings (related_mappings); +CREATE INDEX ix_element_related_mappings_element_name ON element_related_mappings (element_name); CREATE TABLE element_narrow_mappings ( element_name TEXT, @@ -3372,8 +3372,8 @@ CREATE TABLE element_broad_mappings ( PRIMARY KEY (element_name, broad_mappings), FOREIGN KEY(element_name) REFERENCES element (name) ); -CREATE INDEX ix_element_broad_mappings_broad_mappings ON element_broad_mappings (broad_mappings); CREATE INDEX ix_element_broad_mappings_element_name ON element_broad_mappings (element_name); +CREATE INDEX ix_element_broad_mappings_broad_mappings ON element_broad_mappings (broad_mappings); CREATE TABLE element_contributors ( element_name TEXT, @@ -3381,8 +3381,8 @@ CREATE TABLE element_contributors ( PRIMARY KEY (element_name, contributors), FOREIGN KEY(element_name) REFERENCES element (name) ); -CREATE INDEX ix_element_contributors_contributors ON element_contributors (contributors); CREATE INDEX ix_element_contributors_element_name ON element_contributors (element_name); +CREATE INDEX ix_element_contributors_contributors ON element_contributors (contributors); CREATE TABLE element_category ( element_name TEXT, @@ -3390,8 +3390,8 @@ CREATE TABLE element_category ( PRIMARY KEY (element_name, category), FOREIGN KEY(element_name) REFERENCES element (name) ); -CREATE INDEX ix_element_category_category ON element_category (category); CREATE INDEX ix_element_category_element_name ON element_category (element_name); +CREATE INDEX ix_element_category_category ON element_category (category); CREATE TABLE element_keyword ( element_name TEXT, @@ -3399,8 +3399,8 @@ CREATE TABLE element_keyword ( PRIMARY KEY (element_name, keyword), FOREIGN KEY(element_name) REFERENCES element (name) ); -CREATE INDEX ix_element_keyword_element_name ON element_keyword (element_name); CREATE INDEX ix_element_keyword_keyword ON element_keyword (keyword); +CREATE INDEX ix_element_keyword_element_name ON element_keyword (element_name); CREATE TABLE schema_definition_imports ( schema_definition_name TEXT, @@ -3408,8 +3408,8 @@ CREATE TABLE schema_definition_imports ( PRIMARY KEY (schema_definition_name, imports), FOREIGN KEY(schema_definition_name) REFERENCES schema_definition (name) ); -CREATE INDEX ix_schema_definition_imports_imports ON schema_definition_imports (imports); CREATE INDEX ix_schema_definition_imports_schema_definition_name ON schema_definition_imports (schema_definition_name); +CREATE INDEX ix_schema_definition_imports_imports ON schema_definition_imports (imports); CREATE TABLE schema_definition_emit_prefixes ( schema_definition_name TEXT, @@ -3426,8 +3426,8 @@ CREATE TABLE schema_definition_default_curi_maps ( PRIMARY KEY (schema_definition_name, default_curi_maps), FOREIGN KEY(schema_definition_name) REFERENCES schema_definition (name) ); -CREATE INDEX ix_schema_definition_default_curi_maps_default_curi_maps ON schema_definition_default_curi_maps (default_curi_maps); CREATE INDEX ix_schema_definition_default_curi_maps_schema_definition_name ON schema_definition_default_curi_maps (schema_definition_name); +CREATE INDEX ix_schema_definition_default_curi_maps_default_curi_maps ON schema_definition_default_curi_maps (default_curi_maps); CREATE TABLE schema_definition_id_prefixes ( schema_definition_name TEXT, @@ -3453,8 +3453,8 @@ CREATE TABLE schema_definition_instantiates ( PRIMARY KEY (schema_definition_name, instantiates), FOREIGN KEY(schema_definition_name) REFERENCES schema_definition (name) ); -CREATE INDEX ix_schema_definition_instantiates_instantiates ON schema_definition_instantiates (instantiates); CREATE INDEX ix_schema_definition_instantiates_schema_definition_name ON schema_definition_instantiates (schema_definition_name); +CREATE INDEX ix_schema_definition_instantiates_instantiates ON schema_definition_instantiates (instantiates); CREATE TABLE schema_definition_todos ( schema_definition_name TEXT, @@ -3462,8 +3462,8 @@ CREATE TABLE schema_definition_todos ( PRIMARY KEY (schema_definition_name, todos), FOREIGN KEY(schema_definition_name) REFERENCES schema_definition (name) ); -CREATE INDEX ix_schema_definition_todos_schema_definition_name ON schema_definition_todos (schema_definition_name); CREATE INDEX ix_schema_definition_todos_todos ON schema_definition_todos (todos); +CREATE INDEX ix_schema_definition_todos_schema_definition_name ON schema_definition_todos (schema_definition_name); CREATE TABLE schema_definition_notes ( schema_definition_name TEXT, @@ -3471,8 +3471,8 @@ CREATE TABLE schema_definition_notes ( PRIMARY KEY (schema_definition_name, notes), FOREIGN KEY(schema_definition_name) REFERENCES schema_definition (name) ); -CREATE INDEX ix_schema_definition_notes_notes ON schema_definition_notes (notes); CREATE INDEX ix_schema_definition_notes_schema_definition_name ON schema_definition_notes (schema_definition_name); +CREATE INDEX ix_schema_definition_notes_notes ON schema_definition_notes (notes); CREATE TABLE schema_definition_comments ( schema_definition_name TEXT, @@ -3489,8 +3489,8 @@ CREATE TABLE schema_definition_see_also ( PRIMARY KEY (schema_definition_name, see_also), FOREIGN KEY(schema_definition_name) REFERENCES schema_definition (name) ); -CREATE INDEX ix_schema_definition_see_also_schema_definition_name ON schema_definition_see_also (schema_definition_name); CREATE INDEX ix_schema_definition_see_also_see_also ON schema_definition_see_also (see_also); +CREATE INDEX ix_schema_definition_see_also_schema_definition_name ON schema_definition_see_also (schema_definition_name); CREATE TABLE schema_definition_aliases ( schema_definition_name TEXT, @@ -3525,8 +3525,8 @@ CREATE TABLE schema_definition_close_mappings ( PRIMARY KEY (schema_definition_name, close_mappings), FOREIGN KEY(schema_definition_name) REFERENCES schema_definition (name) ); -CREATE INDEX ix_schema_definition_close_mappings_close_mappings ON schema_definition_close_mappings (close_mappings); CREATE INDEX ix_schema_definition_close_mappings_schema_definition_name ON schema_definition_close_mappings (schema_definition_name); +CREATE INDEX ix_schema_definition_close_mappings_close_mappings ON schema_definition_close_mappings (close_mappings); CREATE TABLE schema_definition_related_mappings ( schema_definition_name TEXT, @@ -3534,8 +3534,8 @@ CREATE TABLE schema_definition_related_mappings ( PRIMARY KEY (schema_definition_name, related_mappings), FOREIGN KEY(schema_definition_name) REFERENCES schema_definition (name) ); -CREATE INDEX ix_schema_definition_related_mappings_schema_definition_name ON schema_definition_related_mappings (schema_definition_name); CREATE INDEX ix_schema_definition_related_mappings_related_mappings ON schema_definition_related_mappings (related_mappings); +CREATE INDEX ix_schema_definition_related_mappings_schema_definition_name ON schema_definition_related_mappings (schema_definition_name); CREATE TABLE schema_definition_narrow_mappings ( schema_definition_name TEXT, @@ -3552,8 +3552,8 @@ CREATE TABLE schema_definition_broad_mappings ( PRIMARY KEY (schema_definition_name, broad_mappings), FOREIGN KEY(schema_definition_name) REFERENCES schema_definition (name) ); -CREATE INDEX ix_schema_definition_broad_mappings_broad_mappings ON schema_definition_broad_mappings (broad_mappings); CREATE INDEX ix_schema_definition_broad_mappings_schema_definition_name ON schema_definition_broad_mappings (schema_definition_name); +CREATE INDEX ix_schema_definition_broad_mappings_broad_mappings ON schema_definition_broad_mappings (broad_mappings); CREATE TABLE schema_definition_contributors ( schema_definition_name TEXT, @@ -3579,8 +3579,8 @@ CREATE TABLE schema_definition_keyword ( PRIMARY KEY (schema_definition_name, keyword), FOREIGN KEY(schema_definition_name) REFERENCES schema_definition (name) ); -CREATE INDEX ix_schema_definition_keyword_schema_definition_name ON schema_definition_keyword (schema_definition_name); CREATE INDEX ix_schema_definition_keyword_keyword ON schema_definition_keyword (keyword); +CREATE INDEX ix_schema_definition_keyword_schema_definition_name ON schema_definition_keyword (schema_definition_name); CREATE TABLE type_definition_union_of ( type_definition_name TEXT, @@ -3598,8 +3598,8 @@ CREATE TABLE type_definition_equals_string_in ( PRIMARY KEY (type_definition_name, equals_string_in), FOREIGN KEY(type_definition_name) REFERENCES type_definition (name) ); -CREATE INDEX ix_type_definition_equals_string_in_type_definition_name ON type_definition_equals_string_in (type_definition_name); CREATE INDEX ix_type_definition_equals_string_in_equals_string_in ON type_definition_equals_string_in (equals_string_in); +CREATE INDEX ix_type_definition_equals_string_in_type_definition_name ON type_definition_equals_string_in (type_definition_name); CREATE TABLE type_definition_id_prefixes ( type_definition_name TEXT, @@ -3616,8 +3616,8 @@ CREATE TABLE type_definition_implements ( PRIMARY KEY (type_definition_name, implements), FOREIGN KEY(type_definition_name) REFERENCES type_definition (name) ); -CREATE INDEX ix_type_definition_implements_type_definition_name ON type_definition_implements (type_definition_name); CREATE INDEX ix_type_definition_implements_implements ON type_definition_implements (implements); +CREATE INDEX ix_type_definition_implements_type_definition_name ON type_definition_implements (type_definition_name); CREATE TABLE type_definition_instantiates ( type_definition_name TEXT, @@ -3679,8 +3679,8 @@ CREATE TABLE type_definition_mappings ( PRIMARY KEY (type_definition_name, mappings), FOREIGN KEY(type_definition_name) REFERENCES type_definition (name) ); -CREATE INDEX ix_type_definition_mappings_type_definition_name ON type_definition_mappings (type_definition_name); CREATE INDEX ix_type_definition_mappings_mappings ON type_definition_mappings (mappings); +CREATE INDEX ix_type_definition_mappings_type_definition_name ON type_definition_mappings (type_definition_name); CREATE TABLE type_definition_exact_mappings ( type_definition_name TEXT, @@ -3697,8 +3697,8 @@ CREATE TABLE type_definition_close_mappings ( PRIMARY KEY (type_definition_name, close_mappings), FOREIGN KEY(type_definition_name) REFERENCES type_definition (name) ); -CREATE INDEX ix_type_definition_close_mappings_close_mappings ON type_definition_close_mappings (close_mappings); CREATE INDEX ix_type_definition_close_mappings_type_definition_name ON type_definition_close_mappings (type_definition_name); +CREATE INDEX ix_type_definition_close_mappings_close_mappings ON type_definition_close_mappings (close_mappings); CREATE TABLE type_definition_related_mappings ( type_definition_name TEXT, @@ -3706,8 +3706,8 @@ CREATE TABLE type_definition_related_mappings ( PRIMARY KEY (type_definition_name, related_mappings), FOREIGN KEY(type_definition_name) REFERENCES type_definition (name) ); -CREATE INDEX ix_type_definition_related_mappings_type_definition_name ON type_definition_related_mappings (type_definition_name); CREATE INDEX ix_type_definition_related_mappings_related_mappings ON type_definition_related_mappings (related_mappings); +CREATE INDEX ix_type_definition_related_mappings_type_definition_name ON type_definition_related_mappings (type_definition_name); CREATE TABLE type_definition_narrow_mappings ( type_definition_name TEXT, @@ -3724,8 +3724,8 @@ CREATE TABLE type_definition_broad_mappings ( PRIMARY KEY (type_definition_name, broad_mappings), FOREIGN KEY(type_definition_name) REFERENCES type_definition (name) ); -CREATE INDEX ix_type_definition_broad_mappings_broad_mappings ON type_definition_broad_mappings (broad_mappings); CREATE INDEX ix_type_definition_broad_mappings_type_definition_name ON type_definition_broad_mappings (type_definition_name); +CREATE INDEX ix_type_definition_broad_mappings_broad_mappings ON type_definition_broad_mappings (broad_mappings); CREATE TABLE type_definition_contributors ( type_definition_name TEXT, @@ -3733,8 +3733,8 @@ CREATE TABLE type_definition_contributors ( PRIMARY KEY (type_definition_name, contributors), FOREIGN KEY(type_definition_name) REFERENCES type_definition (name) ); -CREATE INDEX ix_type_definition_contributors_type_definition_name ON type_definition_contributors (type_definition_name); CREATE INDEX ix_type_definition_contributors_contributors ON type_definition_contributors (contributors); +CREATE INDEX ix_type_definition_contributors_type_definition_name ON type_definition_contributors (type_definition_name); CREATE TABLE type_definition_category ( type_definition_name TEXT, @@ -3751,8 +3751,8 @@ CREATE TABLE type_definition_keyword ( PRIMARY KEY (type_definition_name, keyword), FOREIGN KEY(type_definition_name) REFERENCES type_definition (name) ); -CREATE INDEX ix_type_definition_keyword_keyword ON type_definition_keyword (keyword); CREATE INDEX ix_type_definition_keyword_type_definition_name ON type_definition_keyword (type_definition_name); +CREATE INDEX ix_type_definition_keyword_keyword ON type_definition_keyword (keyword); CREATE TABLE definition_mixins ( definition_name TEXT, @@ -3771,8 +3771,8 @@ CREATE TABLE definition_apply_to ( FOREIGN KEY(definition_name) REFERENCES definition (name), FOREIGN KEY(apply_to_name) REFERENCES definition (name) ); -CREATE INDEX ix_definition_apply_to_apply_to_name ON definition_apply_to (apply_to_name); CREATE INDEX ix_definition_apply_to_definition_name ON definition_apply_to (definition_name); +CREATE INDEX ix_definition_apply_to_apply_to_name ON definition_apply_to (apply_to_name); CREATE TABLE definition_values_from ( definition_name TEXT, @@ -3789,8 +3789,8 @@ CREATE TABLE definition_id_prefixes ( PRIMARY KEY (definition_name, id_prefixes), FOREIGN KEY(definition_name) REFERENCES definition (name) ); -CREATE INDEX ix_definition_id_prefixes_definition_name ON definition_id_prefixes (definition_name); CREATE INDEX ix_definition_id_prefixes_id_prefixes ON definition_id_prefixes (id_prefixes); +CREATE INDEX ix_definition_id_prefixes_definition_name ON definition_id_prefixes (definition_name); CREATE TABLE definition_implements ( definition_name TEXT, @@ -3807,8 +3807,8 @@ CREATE TABLE definition_instantiates ( PRIMARY KEY (definition_name, instantiates), FOREIGN KEY(definition_name) REFERENCES definition (name) ); -CREATE INDEX ix_definition_instantiates_definition_name ON definition_instantiates (definition_name); CREATE INDEX ix_definition_instantiates_instantiates ON definition_instantiates (instantiates); +CREATE INDEX ix_definition_instantiates_definition_name ON definition_instantiates (definition_name); CREATE TABLE definition_todos ( definition_name TEXT, @@ -3825,8 +3825,8 @@ CREATE TABLE definition_notes ( PRIMARY KEY (definition_name, notes), FOREIGN KEY(definition_name) REFERENCES definition (name) ); -CREATE INDEX ix_definition_notes_notes ON definition_notes (notes); CREATE INDEX ix_definition_notes_definition_name ON definition_notes (definition_name); +CREATE INDEX ix_definition_notes_notes ON definition_notes (notes); CREATE TABLE definition_comments ( definition_name TEXT, @@ -3852,8 +3852,8 @@ CREATE TABLE definition_aliases ( PRIMARY KEY (definition_name, aliases), FOREIGN KEY(definition_name) REFERENCES definition (name) ); -CREATE INDEX ix_definition_aliases_definition_name ON definition_aliases (definition_name); CREATE INDEX ix_definition_aliases_aliases ON definition_aliases (aliases); +CREATE INDEX ix_definition_aliases_definition_name ON definition_aliases (definition_name); CREATE TABLE definition_mappings ( definition_name TEXT, @@ -3879,8 +3879,8 @@ CREATE TABLE definition_close_mappings ( PRIMARY KEY (definition_name, close_mappings), FOREIGN KEY(definition_name) REFERENCES definition (name) ); -CREATE INDEX ix_definition_close_mappings_close_mappings ON definition_close_mappings (close_mappings); CREATE INDEX ix_definition_close_mappings_definition_name ON definition_close_mappings (definition_name); +CREATE INDEX ix_definition_close_mappings_close_mappings ON definition_close_mappings (close_mappings); CREATE TABLE definition_related_mappings ( definition_name TEXT, @@ -3888,8 +3888,8 @@ CREATE TABLE definition_related_mappings ( PRIMARY KEY (definition_name, related_mappings), FOREIGN KEY(definition_name) REFERENCES definition (name) ); -CREATE INDEX ix_definition_related_mappings_related_mappings ON definition_related_mappings (related_mappings); CREATE INDEX ix_definition_related_mappings_definition_name ON definition_related_mappings (definition_name); +CREATE INDEX ix_definition_related_mappings_related_mappings ON definition_related_mappings (related_mappings); CREATE TABLE definition_narrow_mappings ( definition_name TEXT, @@ -3906,8 +3906,8 @@ CREATE TABLE definition_broad_mappings ( PRIMARY KEY (definition_name, broad_mappings), FOREIGN KEY(definition_name) REFERENCES definition (name) ); -CREATE INDEX ix_definition_broad_mappings_definition_name ON definition_broad_mappings (definition_name); CREATE INDEX ix_definition_broad_mappings_broad_mappings ON definition_broad_mappings (broad_mappings); +CREATE INDEX ix_definition_broad_mappings_definition_name ON definition_broad_mappings (definition_name); CREATE TABLE definition_contributors ( definition_name TEXT, @@ -3915,8 +3915,8 @@ CREATE TABLE definition_contributors ( PRIMARY KEY (definition_name, contributors), FOREIGN KEY(definition_name) REFERENCES definition (name) ); -CREATE INDEX ix_definition_contributors_definition_name ON definition_contributors (definition_name); CREATE INDEX ix_definition_contributors_contributors ON definition_contributors (contributors); +CREATE INDEX ix_definition_contributors_definition_name ON definition_contributors (definition_name); CREATE TABLE definition_category ( definition_name TEXT, @@ -3924,8 +3924,8 @@ CREATE TABLE definition_category ( PRIMARY KEY (definition_name, category), FOREIGN KEY(definition_name) REFERENCES definition (name) ); -CREATE INDEX ix_definition_category_category ON definition_category (category); CREATE INDEX ix_definition_category_definition_name ON definition_category (definition_name); +CREATE INDEX ix_definition_category_category ON definition_category (category); CREATE TABLE definition_keyword ( definition_name TEXT, @@ -3933,8 +3933,8 @@ CREATE TABLE definition_keyword ( PRIMARY KEY (definition_name, keyword), FOREIGN KEY(definition_name) REFERENCES definition (name) ); -CREATE INDEX ix_definition_keyword_keyword ON definition_keyword (keyword); CREATE INDEX ix_definition_keyword_definition_name ON definition_keyword (definition_name); +CREATE INDEX ix_definition_keyword_keyword ON definition_keyword (keyword); CREATE TABLE reachability_query_source_nodes ( reachability_query_id INTEGER, @@ -3951,8 +3951,8 @@ CREATE TABLE reachability_query_relationship_types ( PRIMARY KEY (reachability_query_id, relationship_types), FOREIGN KEY(reachability_query_id) REFERENCES reachability_query (id) ); -CREATE INDEX ix_reachability_query_relationship_types_relationship_types ON reachability_query_relationship_types (relationship_types); CREATE INDEX ix_reachability_query_relationship_types_reachability_query_id ON reachability_query_relationship_types (reachability_query_id); +CREATE INDEX ix_reachability_query_relationship_types_relationship_types ON reachability_query_relationship_types (relationship_types); CREATE TABLE anonymous_expression_todos ( anonymous_expression_id INTEGER, @@ -3969,8 +3969,8 @@ CREATE TABLE anonymous_expression_notes ( PRIMARY KEY (anonymous_expression_id, notes), FOREIGN KEY(anonymous_expression_id) REFERENCES anonymous_expression (id) ); -CREATE INDEX ix_anonymous_expression_notes_notes ON anonymous_expression_notes (notes); CREATE INDEX ix_anonymous_expression_notes_anonymous_expression_id ON anonymous_expression_notes (anonymous_expression_id); +CREATE INDEX ix_anonymous_expression_notes_notes ON anonymous_expression_notes (notes); CREATE TABLE anonymous_expression_comments ( anonymous_expression_id INTEGER, @@ -3987,8 +3987,8 @@ CREATE TABLE anonymous_expression_see_also ( PRIMARY KEY (anonymous_expression_id, see_also), FOREIGN KEY(anonymous_expression_id) REFERENCES anonymous_expression (id) ); -CREATE INDEX ix_anonymous_expression_see_also_see_also ON anonymous_expression_see_also (see_also); CREATE INDEX ix_anonymous_expression_see_also_anonymous_expression_id ON anonymous_expression_see_also (anonymous_expression_id); +CREATE INDEX ix_anonymous_expression_see_also_see_also ON anonymous_expression_see_also (see_also); CREATE TABLE anonymous_expression_aliases ( anonymous_expression_id INTEGER, @@ -4014,8 +4014,8 @@ CREATE TABLE anonymous_expression_exact_mappings ( PRIMARY KEY (anonymous_expression_id, exact_mappings), FOREIGN KEY(anonymous_expression_id) REFERENCES anonymous_expression (id) ); -CREATE INDEX ix_anonymous_expression_exact_mappings_exact_mappings ON anonymous_expression_exact_mappings (exact_mappings); CREATE INDEX ix_anonymous_expression_exact_mappings_anonymous_expression_id ON anonymous_expression_exact_mappings (anonymous_expression_id); +CREATE INDEX ix_anonymous_expression_exact_mappings_exact_mappings ON anonymous_expression_exact_mappings (exact_mappings); CREATE TABLE anonymous_expression_close_mappings ( anonymous_expression_id INTEGER, @@ -4032,8 +4032,8 @@ CREATE TABLE anonymous_expression_related_mappings ( PRIMARY KEY (anonymous_expression_id, related_mappings), FOREIGN KEY(anonymous_expression_id) REFERENCES anonymous_expression (id) ); -CREATE INDEX ix_anonymous_expression_related_mappings_anonymous_expression_id ON anonymous_expression_related_mappings (anonymous_expression_id); CREATE INDEX ix_anonymous_expression_related_mappings_related_mappings ON anonymous_expression_related_mappings (related_mappings); +CREATE INDEX ix_anonymous_expression_related_mappings_anonymous_expression_id ON anonymous_expression_related_mappings (anonymous_expression_id); CREATE TABLE anonymous_expression_narrow_mappings ( anonymous_expression_id INTEGER, @@ -4041,8 +4041,8 @@ CREATE TABLE anonymous_expression_narrow_mappings ( PRIMARY KEY (anonymous_expression_id, narrow_mappings), FOREIGN KEY(anonymous_expression_id) REFERENCES anonymous_expression (id) ); -CREATE INDEX ix_anonymous_expression_narrow_mappings_narrow_mappings ON anonymous_expression_narrow_mappings (narrow_mappings); CREATE INDEX ix_anonymous_expression_narrow_mappings_anonymous_expression_id ON anonymous_expression_narrow_mappings (anonymous_expression_id); +CREATE INDEX ix_anonymous_expression_narrow_mappings_narrow_mappings ON anonymous_expression_narrow_mappings (narrow_mappings); CREATE TABLE anonymous_expression_broad_mappings ( anonymous_expression_id INTEGER, @@ -4050,8 +4050,8 @@ CREATE TABLE anonymous_expression_broad_mappings ( PRIMARY KEY (anonymous_expression_id, broad_mappings), FOREIGN KEY(anonymous_expression_id) REFERENCES anonymous_expression (id) ); -CREATE INDEX ix_anonymous_expression_broad_mappings_broad_mappings ON anonymous_expression_broad_mappings (broad_mappings); CREATE INDEX ix_anonymous_expression_broad_mappings_anonymous_expression_id ON anonymous_expression_broad_mappings (anonymous_expression_id); +CREATE INDEX ix_anonymous_expression_broad_mappings_broad_mappings ON anonymous_expression_broad_mappings (broad_mappings); CREATE TABLE anonymous_expression_contributors ( anonymous_expression_id INTEGER, @@ -4068,8 +4068,8 @@ CREATE TABLE anonymous_expression_category ( PRIMARY KEY (anonymous_expression_id, category), FOREIGN KEY(anonymous_expression_id) REFERENCES anonymous_expression (id) ); -CREATE INDEX ix_anonymous_expression_category_anonymous_expression_id ON anonymous_expression_category (anonymous_expression_id); CREATE INDEX ix_anonymous_expression_category_category ON anonymous_expression_category (category); +CREATE INDEX ix_anonymous_expression_category_anonymous_expression_id ON anonymous_expression_category (anonymous_expression_id); CREATE TABLE anonymous_expression_keyword ( anonymous_expression_id INTEGER, @@ -4077,8 +4077,8 @@ CREATE TABLE anonymous_expression_keyword ( PRIMARY KEY (anonymous_expression_id, keyword), FOREIGN KEY(anonymous_expression_id) REFERENCES anonymous_expression (id) ); -CREATE INDEX ix_anonymous_expression_keyword_keyword ON anonymous_expression_keyword (keyword); CREATE INDEX ix_anonymous_expression_keyword_anonymous_expression_id ON anonymous_expression_keyword (anonymous_expression_id); +CREATE INDEX ix_anonymous_expression_keyword_keyword ON anonymous_expression_keyword (keyword); CREATE TABLE path_expression_none_of ( path_expression_id INTEGER, @@ -4097,8 +4097,8 @@ CREATE TABLE path_expression_any_of ( FOREIGN KEY(path_expression_id) REFERENCES path_expression (id), FOREIGN KEY(any_of_id) REFERENCES path_expression (id) ); -CREATE INDEX ix_path_expression_any_of_any_of_id ON path_expression_any_of (any_of_id); CREATE INDEX ix_path_expression_any_of_path_expression_id ON path_expression_any_of (path_expression_id); +CREATE INDEX ix_path_expression_any_of_any_of_id ON path_expression_any_of (any_of_id); CREATE TABLE path_expression_all_of ( path_expression_id INTEGER, @@ -4126,8 +4126,8 @@ CREATE TABLE path_expression_todos ( PRIMARY KEY (path_expression_id, todos), FOREIGN KEY(path_expression_id) REFERENCES path_expression (id) ); -CREATE INDEX ix_path_expression_todos_todos ON path_expression_todos (todos); CREATE INDEX ix_path_expression_todos_path_expression_id ON path_expression_todos (path_expression_id); +CREATE INDEX ix_path_expression_todos_todos ON path_expression_todos (todos); CREATE TABLE path_expression_notes ( path_expression_id INTEGER, @@ -4135,8 +4135,8 @@ CREATE TABLE path_expression_notes ( PRIMARY KEY (path_expression_id, notes), FOREIGN KEY(path_expression_id) REFERENCES path_expression (id) ); -CREATE INDEX ix_path_expression_notes_path_expression_id ON path_expression_notes (path_expression_id); CREATE INDEX ix_path_expression_notes_notes ON path_expression_notes (notes); +CREATE INDEX ix_path_expression_notes_path_expression_id ON path_expression_notes (path_expression_id); CREATE TABLE path_expression_comments ( path_expression_id INTEGER, @@ -4153,8 +4153,8 @@ CREATE TABLE path_expression_see_also ( PRIMARY KEY (path_expression_id, see_also), FOREIGN KEY(path_expression_id) REFERENCES path_expression (id) ); -CREATE INDEX ix_path_expression_see_also_path_expression_id ON path_expression_see_also (path_expression_id); CREATE INDEX ix_path_expression_see_also_see_also ON path_expression_see_also (see_also); +CREATE INDEX ix_path_expression_see_also_path_expression_id ON path_expression_see_also (path_expression_id); CREATE TABLE path_expression_aliases ( path_expression_id INTEGER, @@ -4171,8 +4171,8 @@ CREATE TABLE path_expression_mappings ( PRIMARY KEY (path_expression_id, mappings), FOREIGN KEY(path_expression_id) REFERENCES path_expression (id) ); -CREATE INDEX ix_path_expression_mappings_mappings ON path_expression_mappings (mappings); CREATE INDEX ix_path_expression_mappings_path_expression_id ON path_expression_mappings (path_expression_id); +CREATE INDEX ix_path_expression_mappings_mappings ON path_expression_mappings (mappings); CREATE TABLE path_expression_exact_mappings ( path_expression_id INTEGER, @@ -4180,8 +4180,8 @@ CREATE TABLE path_expression_exact_mappings ( PRIMARY KEY (path_expression_id, exact_mappings), FOREIGN KEY(path_expression_id) REFERENCES path_expression (id) ); -CREATE INDEX ix_path_expression_exact_mappings_path_expression_id ON path_expression_exact_mappings (path_expression_id); CREATE INDEX ix_path_expression_exact_mappings_exact_mappings ON path_expression_exact_mappings (exact_mappings); +CREATE INDEX ix_path_expression_exact_mappings_path_expression_id ON path_expression_exact_mappings (path_expression_id); CREATE TABLE path_expression_close_mappings ( path_expression_id INTEGER, @@ -4189,8 +4189,8 @@ CREATE TABLE path_expression_close_mappings ( PRIMARY KEY (path_expression_id, close_mappings), FOREIGN KEY(path_expression_id) REFERENCES path_expression (id) ); -CREATE INDEX ix_path_expression_close_mappings_close_mappings ON path_expression_close_mappings (close_mappings); CREATE INDEX ix_path_expression_close_mappings_path_expression_id ON path_expression_close_mappings (path_expression_id); +CREATE INDEX ix_path_expression_close_mappings_close_mappings ON path_expression_close_mappings (close_mappings); CREATE TABLE path_expression_related_mappings ( path_expression_id INTEGER, @@ -4207,8 +4207,8 @@ CREATE TABLE path_expression_narrow_mappings ( PRIMARY KEY (path_expression_id, narrow_mappings), FOREIGN KEY(path_expression_id) REFERENCES path_expression (id) ); -CREATE INDEX ix_path_expression_narrow_mappings_path_expression_id ON path_expression_narrow_mappings (path_expression_id); CREATE INDEX ix_path_expression_narrow_mappings_narrow_mappings ON path_expression_narrow_mappings (narrow_mappings); +CREATE INDEX ix_path_expression_narrow_mappings_path_expression_id ON path_expression_narrow_mappings (path_expression_id); CREATE TABLE path_expression_broad_mappings ( path_expression_id INTEGER, @@ -4216,8 +4216,8 @@ CREATE TABLE path_expression_broad_mappings ( PRIMARY KEY (path_expression_id, broad_mappings), FOREIGN KEY(path_expression_id) REFERENCES path_expression (id) ); -CREATE INDEX ix_path_expression_broad_mappings_broad_mappings ON path_expression_broad_mappings (broad_mappings); CREATE INDEX ix_path_expression_broad_mappings_path_expression_id ON path_expression_broad_mappings (path_expression_id); +CREATE INDEX ix_path_expression_broad_mappings_broad_mappings ON path_expression_broad_mappings (broad_mappings); CREATE TABLE path_expression_contributors ( path_expression_id INTEGER, @@ -4225,8 +4225,8 @@ CREATE TABLE path_expression_contributors ( PRIMARY KEY (path_expression_id, contributors), FOREIGN KEY(path_expression_id) REFERENCES path_expression (id) ); -CREATE INDEX ix_path_expression_contributors_contributors ON path_expression_contributors (contributors); CREATE INDEX ix_path_expression_contributors_path_expression_id ON path_expression_contributors (path_expression_id); +CREATE INDEX ix_path_expression_contributors_contributors ON path_expression_contributors (contributors); CREATE TABLE path_expression_category ( path_expression_id INTEGER, @@ -4262,8 +4262,8 @@ CREATE TABLE anonymous_slot_expression_none_of ( FOREIGN KEY(anonymous_slot_expression_id) REFERENCES anonymous_slot_expression (id), FOREIGN KEY(none_of_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_anonymous_slot_expression_none_of_anonymous_slot_expression_id ON anonymous_slot_expression_none_of (anonymous_slot_expression_id); CREATE INDEX ix_anonymous_slot_expression_none_of_none_of_id ON anonymous_slot_expression_none_of (none_of_id); +CREATE INDEX ix_anonymous_slot_expression_none_of_anonymous_slot_expression_id ON anonymous_slot_expression_none_of (anonymous_slot_expression_id); CREATE TABLE anonymous_slot_expression_exactly_one_of ( anonymous_slot_expression_id INTEGER, @@ -4272,8 +4272,8 @@ CREATE TABLE anonymous_slot_expression_exactly_one_of ( FOREIGN KEY(anonymous_slot_expression_id) REFERENCES anonymous_slot_expression (id), FOREIGN KEY(exactly_one_of_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_anonymous_slot_expression_exactly_one_of_exactly_one_of_id ON anonymous_slot_expression_exactly_one_of (exactly_one_of_id); CREATE INDEX ix_anonymous_slot_expression_exactly_one_of_anonymous_slot_expression_id ON anonymous_slot_expression_exactly_one_of (anonymous_slot_expression_id); +CREATE INDEX ix_anonymous_slot_expression_exactly_one_of_exactly_one_of_id ON anonymous_slot_expression_exactly_one_of (exactly_one_of_id); CREATE TABLE anonymous_slot_expression_any_of ( anonymous_slot_expression_id INTEGER, @@ -4282,8 +4282,8 @@ CREATE TABLE anonymous_slot_expression_any_of ( FOREIGN KEY(anonymous_slot_expression_id) REFERENCES anonymous_slot_expression (id), FOREIGN KEY(any_of_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_anonymous_slot_expression_any_of_anonymous_slot_expression_id ON anonymous_slot_expression_any_of (anonymous_slot_expression_id); CREATE INDEX ix_anonymous_slot_expression_any_of_any_of_id ON anonymous_slot_expression_any_of (any_of_id); +CREATE INDEX ix_anonymous_slot_expression_any_of_anonymous_slot_expression_id ON anonymous_slot_expression_any_of (anonymous_slot_expression_id); CREATE TABLE anonymous_slot_expression_all_of ( anonymous_slot_expression_id INTEGER, @@ -4301,8 +4301,8 @@ CREATE TABLE anonymous_slot_expression_todos ( PRIMARY KEY (anonymous_slot_expression_id, todos), FOREIGN KEY(anonymous_slot_expression_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_anonymous_slot_expression_todos_anonymous_slot_expression_id ON anonymous_slot_expression_todos (anonymous_slot_expression_id); CREATE INDEX ix_anonymous_slot_expression_todos_todos ON anonymous_slot_expression_todos (todos); +CREATE INDEX ix_anonymous_slot_expression_todos_anonymous_slot_expression_id ON anonymous_slot_expression_todos (anonymous_slot_expression_id); CREATE TABLE anonymous_slot_expression_notes ( anonymous_slot_expression_id INTEGER, @@ -4337,8 +4337,8 @@ CREATE TABLE anonymous_slot_expression_aliases ( PRIMARY KEY (anonymous_slot_expression_id, aliases), FOREIGN KEY(anonymous_slot_expression_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_anonymous_slot_expression_aliases_anonymous_slot_expression_id ON anonymous_slot_expression_aliases (anonymous_slot_expression_id); CREATE INDEX ix_anonymous_slot_expression_aliases_aliases ON anonymous_slot_expression_aliases (aliases); +CREATE INDEX ix_anonymous_slot_expression_aliases_anonymous_slot_expression_id ON anonymous_slot_expression_aliases (anonymous_slot_expression_id); CREATE TABLE anonymous_slot_expression_mappings ( anonymous_slot_expression_id INTEGER, @@ -4346,8 +4346,8 @@ CREATE TABLE anonymous_slot_expression_mappings ( PRIMARY KEY (anonymous_slot_expression_id, mappings), FOREIGN KEY(anonymous_slot_expression_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_anonymous_slot_expression_mappings_anonymous_slot_expression_id ON anonymous_slot_expression_mappings (anonymous_slot_expression_id); CREATE INDEX ix_anonymous_slot_expression_mappings_mappings ON anonymous_slot_expression_mappings (mappings); +CREATE INDEX ix_anonymous_slot_expression_mappings_anonymous_slot_expression_id ON anonymous_slot_expression_mappings (anonymous_slot_expression_id); CREATE TABLE anonymous_slot_expression_exact_mappings ( anonymous_slot_expression_id INTEGER, @@ -4355,8 +4355,8 @@ CREATE TABLE anonymous_slot_expression_exact_mappings ( PRIMARY KEY (anonymous_slot_expression_id, exact_mappings), FOREIGN KEY(anonymous_slot_expression_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_anonymous_slot_expression_exact_mappings_exact_mappings ON anonymous_slot_expression_exact_mappings (exact_mappings); CREATE INDEX ix_anonymous_slot_expression_exact_mappings_anonymous_slot_expression_id ON anonymous_slot_expression_exact_mappings (anonymous_slot_expression_id); +CREATE INDEX ix_anonymous_slot_expression_exact_mappings_exact_mappings ON anonymous_slot_expression_exact_mappings (exact_mappings); CREATE TABLE anonymous_slot_expression_close_mappings ( anonymous_slot_expression_id INTEGER, @@ -4364,8 +4364,8 @@ CREATE TABLE anonymous_slot_expression_close_mappings ( PRIMARY KEY (anonymous_slot_expression_id, close_mappings), FOREIGN KEY(anonymous_slot_expression_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_anonymous_slot_expression_close_mappings_anonymous_slot_expression_id ON anonymous_slot_expression_close_mappings (anonymous_slot_expression_id); CREATE INDEX ix_anonymous_slot_expression_close_mappings_close_mappings ON anonymous_slot_expression_close_mappings (close_mappings); +CREATE INDEX ix_anonymous_slot_expression_close_mappings_anonymous_slot_expression_id ON anonymous_slot_expression_close_mappings (anonymous_slot_expression_id); CREATE TABLE anonymous_slot_expression_related_mappings ( anonymous_slot_expression_id INTEGER, @@ -4373,8 +4373,8 @@ CREATE TABLE anonymous_slot_expression_related_mappings ( PRIMARY KEY (anonymous_slot_expression_id, related_mappings), FOREIGN KEY(anonymous_slot_expression_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_anonymous_slot_expression_related_mappings_anonymous_slot_expression_id ON anonymous_slot_expression_related_mappings (anonymous_slot_expression_id); CREATE INDEX ix_anonymous_slot_expression_related_mappings_related_mappings ON anonymous_slot_expression_related_mappings (related_mappings); +CREATE INDEX ix_anonymous_slot_expression_related_mappings_anonymous_slot_expression_id ON anonymous_slot_expression_related_mappings (anonymous_slot_expression_id); CREATE TABLE anonymous_slot_expression_narrow_mappings ( anonymous_slot_expression_id INTEGER, @@ -4382,8 +4382,8 @@ CREATE TABLE anonymous_slot_expression_narrow_mappings ( PRIMARY KEY (anonymous_slot_expression_id, narrow_mappings), FOREIGN KEY(anonymous_slot_expression_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_anonymous_slot_expression_narrow_mappings_narrow_mappings ON anonymous_slot_expression_narrow_mappings (narrow_mappings); CREATE INDEX ix_anonymous_slot_expression_narrow_mappings_anonymous_slot_expression_id ON anonymous_slot_expression_narrow_mappings (anonymous_slot_expression_id); +CREATE INDEX ix_anonymous_slot_expression_narrow_mappings_narrow_mappings ON anonymous_slot_expression_narrow_mappings (narrow_mappings); CREATE TABLE anonymous_slot_expression_broad_mappings ( anonymous_slot_expression_id INTEGER, @@ -4400,8 +4400,8 @@ CREATE TABLE anonymous_slot_expression_contributors ( PRIMARY KEY (anonymous_slot_expression_id, contributors), FOREIGN KEY(anonymous_slot_expression_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_anonymous_slot_expression_contributors_anonymous_slot_expression_id ON anonymous_slot_expression_contributors (anonymous_slot_expression_id); CREATE INDEX ix_anonymous_slot_expression_contributors_contributors ON anonymous_slot_expression_contributors (contributors); +CREATE INDEX ix_anonymous_slot_expression_contributors_anonymous_slot_expression_id ON anonymous_slot_expression_contributors (anonymous_slot_expression_id); CREATE TABLE anonymous_slot_expression_category ( anonymous_slot_expression_id INTEGER, @@ -4409,8 +4409,8 @@ CREATE TABLE anonymous_slot_expression_category ( PRIMARY KEY (anonymous_slot_expression_id, category), FOREIGN KEY(anonymous_slot_expression_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_anonymous_slot_expression_category_category ON anonymous_slot_expression_category (category); CREATE INDEX ix_anonymous_slot_expression_category_anonymous_slot_expression_id ON anonymous_slot_expression_category (anonymous_slot_expression_id); +CREATE INDEX ix_anonymous_slot_expression_category_category ON anonymous_slot_expression_category (category); CREATE TABLE anonymous_slot_expression_keyword ( anonymous_slot_expression_id INTEGER, @@ -4418,8 +4418,8 @@ CREATE TABLE anonymous_slot_expression_keyword ( PRIMARY KEY (anonymous_slot_expression_id, keyword), FOREIGN KEY(anonymous_slot_expression_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_anonymous_slot_expression_keyword_keyword ON anonymous_slot_expression_keyword (keyword); CREATE INDEX ix_anonymous_slot_expression_keyword_anonymous_slot_expression_id ON anonymous_slot_expression_keyword (anonymous_slot_expression_id); +CREATE INDEX ix_anonymous_slot_expression_keyword_keyword ON anonymous_slot_expression_keyword (keyword); CREATE TABLE slot_definition_domain_of ( slot_definition_name TEXT, @@ -4457,8 +4457,8 @@ CREATE TABLE slot_definition_equals_string_in ( PRIMARY KEY (slot_definition_name, equals_string_in), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_equals_string_in_equals_string_in ON slot_definition_equals_string_in (equals_string_in); CREATE INDEX ix_slot_definition_equals_string_in_slot_definition_name ON slot_definition_equals_string_in (slot_definition_name); +CREATE INDEX ix_slot_definition_equals_string_in_equals_string_in ON slot_definition_equals_string_in (equals_string_in); CREATE TABLE slot_definition_none_of ( slot_definition_name TEXT, @@ -4467,8 +4467,8 @@ CREATE TABLE slot_definition_none_of ( FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name), FOREIGN KEY(none_of_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_slot_definition_none_of_none_of_id ON slot_definition_none_of (none_of_id); CREATE INDEX ix_slot_definition_none_of_slot_definition_name ON slot_definition_none_of (slot_definition_name); +CREATE INDEX ix_slot_definition_none_of_none_of_id ON slot_definition_none_of (none_of_id); CREATE TABLE slot_definition_exactly_one_of ( slot_definition_name TEXT, @@ -4477,8 +4477,8 @@ CREATE TABLE slot_definition_exactly_one_of ( FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name), FOREIGN KEY(exactly_one_of_id) REFERENCES anonymous_slot_expression (id) ); -CREATE INDEX ix_slot_definition_exactly_one_of_exactly_one_of_id ON slot_definition_exactly_one_of (exactly_one_of_id); CREATE INDEX ix_slot_definition_exactly_one_of_slot_definition_name ON slot_definition_exactly_one_of (slot_definition_name); +CREATE INDEX ix_slot_definition_exactly_one_of_exactly_one_of_id ON slot_definition_exactly_one_of (exactly_one_of_id); CREATE TABLE slot_definition_any_of ( slot_definition_name TEXT, @@ -4507,8 +4507,8 @@ CREATE TABLE slot_definition_mixins ( FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name), FOREIGN KEY(mixins_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_mixins_slot_definition_name ON slot_definition_mixins (slot_definition_name); CREATE INDEX ix_slot_definition_mixins_mixins_name ON slot_definition_mixins (mixins_name); +CREATE INDEX ix_slot_definition_mixins_slot_definition_name ON slot_definition_mixins (slot_definition_name); CREATE TABLE slot_definition_apply_to ( slot_definition_name TEXT, @@ -4517,8 +4517,8 @@ CREATE TABLE slot_definition_apply_to ( FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name), FOREIGN KEY(apply_to_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_apply_to_slot_definition_name ON slot_definition_apply_to (slot_definition_name); CREATE INDEX ix_slot_definition_apply_to_apply_to_name ON slot_definition_apply_to (apply_to_name); +CREATE INDEX ix_slot_definition_apply_to_slot_definition_name ON slot_definition_apply_to (slot_definition_name); CREATE TABLE slot_definition_values_from ( slot_definition_name TEXT, @@ -4526,8 +4526,8 @@ CREATE TABLE slot_definition_values_from ( PRIMARY KEY (slot_definition_name, values_from), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_values_from_values_from ON slot_definition_values_from (values_from); CREATE INDEX ix_slot_definition_values_from_slot_definition_name ON slot_definition_values_from (slot_definition_name); +CREATE INDEX ix_slot_definition_values_from_values_from ON slot_definition_values_from (values_from); CREATE TABLE slot_definition_id_prefixes ( slot_definition_name TEXT, @@ -4562,8 +4562,8 @@ CREATE TABLE slot_definition_todos ( PRIMARY KEY (slot_definition_name, todos), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_todos_slot_definition_name ON slot_definition_todos (slot_definition_name); CREATE INDEX ix_slot_definition_todos_todos ON slot_definition_todos (todos); +CREATE INDEX ix_slot_definition_todos_slot_definition_name ON slot_definition_todos (slot_definition_name); CREATE TABLE slot_definition_notes ( slot_definition_name TEXT, @@ -4580,8 +4580,8 @@ CREATE TABLE slot_definition_comments ( PRIMARY KEY (slot_definition_name, comments), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_comments_comments ON slot_definition_comments (comments); CREATE INDEX ix_slot_definition_comments_slot_definition_name ON slot_definition_comments (slot_definition_name); +CREATE INDEX ix_slot_definition_comments_comments ON slot_definition_comments (comments); CREATE TABLE slot_definition_see_also ( slot_definition_name TEXT, @@ -4589,8 +4589,8 @@ CREATE TABLE slot_definition_see_also ( PRIMARY KEY (slot_definition_name, see_also), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_see_also_see_also ON slot_definition_see_also (see_also); CREATE INDEX ix_slot_definition_see_also_slot_definition_name ON slot_definition_see_also (slot_definition_name); +CREATE INDEX ix_slot_definition_see_also_see_also ON slot_definition_see_also (see_also); CREATE TABLE slot_definition_aliases ( slot_definition_name TEXT, @@ -4598,8 +4598,8 @@ CREATE TABLE slot_definition_aliases ( PRIMARY KEY (slot_definition_name, aliases), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_aliases_slot_definition_name ON slot_definition_aliases (slot_definition_name); CREATE INDEX ix_slot_definition_aliases_aliases ON slot_definition_aliases (aliases); +CREATE INDEX ix_slot_definition_aliases_slot_definition_name ON slot_definition_aliases (slot_definition_name); CREATE TABLE slot_definition_mappings ( slot_definition_name TEXT, @@ -4616,8 +4616,8 @@ CREATE TABLE slot_definition_exact_mappings ( PRIMARY KEY (slot_definition_name, exact_mappings), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_exact_mappings_exact_mappings ON slot_definition_exact_mappings (exact_mappings); CREATE INDEX ix_slot_definition_exact_mappings_slot_definition_name ON slot_definition_exact_mappings (slot_definition_name); +CREATE INDEX ix_slot_definition_exact_mappings_exact_mappings ON slot_definition_exact_mappings (exact_mappings); CREATE TABLE slot_definition_close_mappings ( slot_definition_name TEXT, @@ -4625,8 +4625,8 @@ CREATE TABLE slot_definition_close_mappings ( PRIMARY KEY (slot_definition_name, close_mappings), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_close_mappings_close_mappings ON slot_definition_close_mappings (close_mappings); CREATE INDEX ix_slot_definition_close_mappings_slot_definition_name ON slot_definition_close_mappings (slot_definition_name); +CREATE INDEX ix_slot_definition_close_mappings_close_mappings ON slot_definition_close_mappings (close_mappings); CREATE TABLE slot_definition_related_mappings ( slot_definition_name TEXT, @@ -4634,8 +4634,8 @@ CREATE TABLE slot_definition_related_mappings ( PRIMARY KEY (slot_definition_name, related_mappings), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_related_mappings_slot_definition_name ON slot_definition_related_mappings (slot_definition_name); CREATE INDEX ix_slot_definition_related_mappings_related_mappings ON slot_definition_related_mappings (related_mappings); +CREATE INDEX ix_slot_definition_related_mappings_slot_definition_name ON slot_definition_related_mappings (slot_definition_name); CREATE TABLE slot_definition_narrow_mappings ( slot_definition_name TEXT, @@ -4643,8 +4643,8 @@ CREATE TABLE slot_definition_narrow_mappings ( PRIMARY KEY (slot_definition_name, narrow_mappings), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_narrow_mappings_narrow_mappings ON slot_definition_narrow_mappings (narrow_mappings); CREATE INDEX ix_slot_definition_narrow_mappings_slot_definition_name ON slot_definition_narrow_mappings (slot_definition_name); +CREATE INDEX ix_slot_definition_narrow_mappings_narrow_mappings ON slot_definition_narrow_mappings (narrow_mappings); CREATE TABLE slot_definition_broad_mappings ( slot_definition_name TEXT, @@ -4652,8 +4652,8 @@ CREATE TABLE slot_definition_broad_mappings ( PRIMARY KEY (slot_definition_name, broad_mappings), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_broad_mappings_broad_mappings ON slot_definition_broad_mappings (broad_mappings); CREATE INDEX ix_slot_definition_broad_mappings_slot_definition_name ON slot_definition_broad_mappings (slot_definition_name); +CREATE INDEX ix_slot_definition_broad_mappings_broad_mappings ON slot_definition_broad_mappings (broad_mappings); CREATE TABLE slot_definition_contributors ( slot_definition_name TEXT, @@ -4661,8 +4661,8 @@ CREATE TABLE slot_definition_contributors ( PRIMARY KEY (slot_definition_name, contributors), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_contributors_slot_definition_name ON slot_definition_contributors (slot_definition_name); CREATE INDEX ix_slot_definition_contributors_contributors ON slot_definition_contributors (contributors); +CREATE INDEX ix_slot_definition_contributors_slot_definition_name ON slot_definition_contributors (slot_definition_name); CREATE TABLE slot_definition_category ( slot_definition_name TEXT, @@ -4679,8 +4679,8 @@ CREATE TABLE slot_definition_keyword ( PRIMARY KEY (slot_definition_name, keyword), FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_slot_definition_keyword_keyword ON slot_definition_keyword (keyword); CREATE INDEX ix_slot_definition_keyword_slot_definition_name ON slot_definition_keyword (slot_definition_name); +CREATE INDEX ix_slot_definition_keyword_keyword ON slot_definition_keyword (keyword); CREATE TABLE class_expression_any_of ( class_expression_id INTEGER, @@ -4739,8 +4739,8 @@ CREATE TABLE anonymous_class_expression_exactly_one_of ( FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id), FOREIGN KEY(exactly_one_of_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_exactly_one_of_anonymous_class_expression_id ON anonymous_class_expression_exactly_one_of (anonymous_class_expression_id); CREATE INDEX ix_anonymous_class_expression_exactly_one_of_exactly_one_of_id ON anonymous_class_expression_exactly_one_of (exactly_one_of_id); +CREATE INDEX ix_anonymous_class_expression_exactly_one_of_anonymous_class_expression_id ON anonymous_class_expression_exactly_one_of (anonymous_class_expression_id); CREATE TABLE anonymous_class_expression_none_of ( anonymous_class_expression_id INTEGER, @@ -4759,8 +4759,8 @@ CREATE TABLE anonymous_class_expression_all_of ( FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id), FOREIGN KEY(all_of_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_all_of_all_of_id ON anonymous_class_expression_all_of (all_of_id); CREATE INDEX ix_anonymous_class_expression_all_of_anonymous_class_expression_id ON anonymous_class_expression_all_of (anonymous_class_expression_id); +CREATE INDEX ix_anonymous_class_expression_all_of_all_of_id ON anonymous_class_expression_all_of (all_of_id); CREATE TABLE anonymous_class_expression_todos ( anonymous_class_expression_id INTEGER, @@ -4777,8 +4777,8 @@ CREATE TABLE anonymous_class_expression_notes ( PRIMARY KEY (anonymous_class_expression_id, notes), FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_notes_anonymous_class_expression_id ON anonymous_class_expression_notes (anonymous_class_expression_id); CREATE INDEX ix_anonymous_class_expression_notes_notes ON anonymous_class_expression_notes (notes); +CREATE INDEX ix_anonymous_class_expression_notes_anonymous_class_expression_id ON anonymous_class_expression_notes (anonymous_class_expression_id); CREATE TABLE anonymous_class_expression_comments ( anonymous_class_expression_id INTEGER, @@ -4804,8 +4804,8 @@ CREATE TABLE anonymous_class_expression_aliases ( PRIMARY KEY (anonymous_class_expression_id, aliases), FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_aliases_aliases ON anonymous_class_expression_aliases (aliases); CREATE INDEX ix_anonymous_class_expression_aliases_anonymous_class_expression_id ON anonymous_class_expression_aliases (anonymous_class_expression_id); +CREATE INDEX ix_anonymous_class_expression_aliases_aliases ON anonymous_class_expression_aliases (aliases); CREATE TABLE anonymous_class_expression_mappings ( anonymous_class_expression_id INTEGER, @@ -4822,8 +4822,8 @@ CREATE TABLE anonymous_class_expression_exact_mappings ( PRIMARY KEY (anonymous_class_expression_id, exact_mappings), FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_exact_mappings_anonymous_class_expression_id ON anonymous_class_expression_exact_mappings (anonymous_class_expression_id); CREATE INDEX ix_anonymous_class_expression_exact_mappings_exact_mappings ON anonymous_class_expression_exact_mappings (exact_mappings); +CREATE INDEX ix_anonymous_class_expression_exact_mappings_anonymous_class_expression_id ON anonymous_class_expression_exact_mappings (anonymous_class_expression_id); CREATE TABLE anonymous_class_expression_close_mappings ( anonymous_class_expression_id INTEGER, @@ -4831,8 +4831,8 @@ CREATE TABLE anonymous_class_expression_close_mappings ( PRIMARY KEY (anonymous_class_expression_id, close_mappings), FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_close_mappings_close_mappings ON anonymous_class_expression_close_mappings (close_mappings); CREATE INDEX ix_anonymous_class_expression_close_mappings_anonymous_class_expression_id ON anonymous_class_expression_close_mappings (anonymous_class_expression_id); +CREATE INDEX ix_anonymous_class_expression_close_mappings_close_mappings ON anonymous_class_expression_close_mappings (close_mappings); CREATE TABLE anonymous_class_expression_related_mappings ( anonymous_class_expression_id INTEGER, @@ -4849,8 +4849,8 @@ CREATE TABLE anonymous_class_expression_narrow_mappings ( PRIMARY KEY (anonymous_class_expression_id, narrow_mappings), FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_narrow_mappings_anonymous_class_expression_id ON anonymous_class_expression_narrow_mappings (anonymous_class_expression_id); CREATE INDEX ix_anonymous_class_expression_narrow_mappings_narrow_mappings ON anonymous_class_expression_narrow_mappings (narrow_mappings); +CREATE INDEX ix_anonymous_class_expression_narrow_mappings_anonymous_class_expression_id ON anonymous_class_expression_narrow_mappings (anonymous_class_expression_id); CREATE TABLE anonymous_class_expression_broad_mappings ( anonymous_class_expression_id INTEGER, @@ -4858,8 +4858,8 @@ CREATE TABLE anonymous_class_expression_broad_mappings ( PRIMARY KEY (anonymous_class_expression_id, broad_mappings), FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_broad_mappings_broad_mappings ON anonymous_class_expression_broad_mappings (broad_mappings); CREATE INDEX ix_anonymous_class_expression_broad_mappings_anonymous_class_expression_id ON anonymous_class_expression_broad_mappings (anonymous_class_expression_id); +CREATE INDEX ix_anonymous_class_expression_broad_mappings_broad_mappings ON anonymous_class_expression_broad_mappings (broad_mappings); CREATE TABLE anonymous_class_expression_contributors ( anonymous_class_expression_id INTEGER, @@ -4867,8 +4867,8 @@ CREATE TABLE anonymous_class_expression_contributors ( PRIMARY KEY (anonymous_class_expression_id, contributors), FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_contributors_contributors ON anonymous_class_expression_contributors (contributors); CREATE INDEX ix_anonymous_class_expression_contributors_anonymous_class_expression_id ON anonymous_class_expression_contributors (anonymous_class_expression_id); +CREATE INDEX ix_anonymous_class_expression_contributors_contributors ON anonymous_class_expression_contributors (contributors); CREATE TABLE anonymous_class_expression_category ( anonymous_class_expression_id INTEGER, @@ -4876,8 +4876,8 @@ CREATE TABLE anonymous_class_expression_category ( PRIMARY KEY (anonymous_class_expression_id, category), FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_anonymous_class_expression_category_anonymous_class_expression_id ON anonymous_class_expression_category (anonymous_class_expression_id); CREATE INDEX ix_anonymous_class_expression_category_category ON anonymous_class_expression_category (category); +CREATE INDEX ix_anonymous_class_expression_category_anonymous_class_expression_id ON anonymous_class_expression_category (anonymous_class_expression_id); CREATE TABLE anonymous_class_expression_keyword ( anonymous_class_expression_id INTEGER, @@ -4905,8 +4905,8 @@ CREATE TABLE class_definition_union_of ( FOREIGN KEY(class_definition_name) REFERENCES class_definition (name), FOREIGN KEY(union_of_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_union_of_union_of_name ON class_definition_union_of (union_of_name); CREATE INDEX ix_class_definition_union_of_class_definition_name ON class_definition_union_of (class_definition_name); +CREATE INDEX ix_class_definition_union_of_union_of_name ON class_definition_union_of (union_of_name); CREATE TABLE class_definition_defining_slots ( class_definition_name TEXT, @@ -4915,8 +4915,8 @@ CREATE TABLE class_definition_defining_slots ( FOREIGN KEY(class_definition_name) REFERENCES class_definition (name), FOREIGN KEY(defining_slots_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_class_definition_defining_slots_class_definition_name ON class_definition_defining_slots (class_definition_name); CREATE INDEX ix_class_definition_defining_slots_defining_slots_name ON class_definition_defining_slots (defining_slots_name); +CREATE INDEX ix_class_definition_defining_slots_class_definition_name ON class_definition_defining_slots (class_definition_name); CREATE TABLE class_definition_disjoint_with ( class_definition_name TEXT, @@ -4935,8 +4935,8 @@ CREATE TABLE class_definition_any_of ( FOREIGN KEY(class_definition_name) REFERENCES class_definition (name), FOREIGN KEY(any_of_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_class_definition_any_of_class_definition_name ON class_definition_any_of (class_definition_name); CREATE INDEX ix_class_definition_any_of_any_of_id ON class_definition_any_of (any_of_id); +CREATE INDEX ix_class_definition_any_of_class_definition_name ON class_definition_any_of (class_definition_name); CREATE TABLE class_definition_exactly_one_of ( class_definition_name TEXT, @@ -4955,8 +4955,8 @@ CREATE TABLE class_definition_none_of ( FOREIGN KEY(class_definition_name) REFERENCES class_definition (name), FOREIGN KEY(none_of_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_class_definition_none_of_class_definition_name ON class_definition_none_of (class_definition_name); CREATE INDEX ix_class_definition_none_of_none_of_id ON class_definition_none_of (none_of_id); +CREATE INDEX ix_class_definition_none_of_class_definition_name ON class_definition_none_of (class_definition_name); CREATE TABLE class_definition_all_of ( class_definition_name TEXT, @@ -4965,8 +4965,8 @@ CREATE TABLE class_definition_all_of ( FOREIGN KEY(class_definition_name) REFERENCES class_definition (name), FOREIGN KEY(all_of_id) REFERENCES anonymous_class_expression (id) ); -CREATE INDEX ix_class_definition_all_of_all_of_id ON class_definition_all_of (all_of_id); CREATE INDEX ix_class_definition_all_of_class_definition_name ON class_definition_all_of (class_definition_name); +CREATE INDEX ix_class_definition_all_of_all_of_id ON class_definition_all_of (all_of_id); CREATE TABLE class_definition_mixins ( class_definition_name TEXT, @@ -4975,8 +4975,8 @@ CREATE TABLE class_definition_mixins ( FOREIGN KEY(class_definition_name) REFERENCES class_definition (name), FOREIGN KEY(mixins_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_mixins_mixins_name ON class_definition_mixins (mixins_name); CREATE INDEX ix_class_definition_mixins_class_definition_name ON class_definition_mixins (class_definition_name); +CREATE INDEX ix_class_definition_mixins_mixins_name ON class_definition_mixins (mixins_name); CREATE TABLE class_definition_apply_to ( class_definition_name TEXT, @@ -4985,8 +4985,8 @@ CREATE TABLE class_definition_apply_to ( FOREIGN KEY(class_definition_name) REFERENCES class_definition (name), FOREIGN KEY(apply_to_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_apply_to_class_definition_name ON class_definition_apply_to (class_definition_name); CREATE INDEX ix_class_definition_apply_to_apply_to_name ON class_definition_apply_to (apply_to_name); +CREATE INDEX ix_class_definition_apply_to_class_definition_name ON class_definition_apply_to (class_definition_name); CREATE TABLE class_definition_values_from ( class_definition_name TEXT, @@ -5003,8 +5003,8 @@ CREATE TABLE class_definition_id_prefixes ( PRIMARY KEY (class_definition_name, id_prefixes), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_id_prefixes_class_definition_name ON class_definition_id_prefixes (class_definition_name); CREATE INDEX ix_class_definition_id_prefixes_id_prefixes ON class_definition_id_prefixes (id_prefixes); +CREATE INDEX ix_class_definition_id_prefixes_class_definition_name ON class_definition_id_prefixes (class_definition_name); CREATE TABLE class_definition_implements ( class_definition_name TEXT, @@ -5012,8 +5012,8 @@ CREATE TABLE class_definition_implements ( PRIMARY KEY (class_definition_name, implements), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_implements_implements ON class_definition_implements (implements); CREATE INDEX ix_class_definition_implements_class_definition_name ON class_definition_implements (class_definition_name); +CREATE INDEX ix_class_definition_implements_implements ON class_definition_implements (implements); CREATE TABLE class_definition_instantiates ( class_definition_name TEXT, @@ -5030,8 +5030,8 @@ CREATE TABLE class_definition_todos ( PRIMARY KEY (class_definition_name, todos), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_todos_class_definition_name ON class_definition_todos (class_definition_name); CREATE INDEX ix_class_definition_todos_todos ON class_definition_todos (todos); +CREATE INDEX ix_class_definition_todos_class_definition_name ON class_definition_todos (class_definition_name); CREATE TABLE class_definition_notes ( class_definition_name TEXT, @@ -5039,8 +5039,8 @@ CREATE TABLE class_definition_notes ( PRIMARY KEY (class_definition_name, notes), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_notes_class_definition_name ON class_definition_notes (class_definition_name); CREATE INDEX ix_class_definition_notes_notes ON class_definition_notes (notes); +CREATE INDEX ix_class_definition_notes_class_definition_name ON class_definition_notes (class_definition_name); CREATE TABLE class_definition_comments ( class_definition_name TEXT, @@ -5057,8 +5057,8 @@ CREATE TABLE class_definition_see_also ( PRIMARY KEY (class_definition_name, see_also), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_see_also_see_also ON class_definition_see_also (see_also); CREATE INDEX ix_class_definition_see_also_class_definition_name ON class_definition_see_also (class_definition_name); +CREATE INDEX ix_class_definition_see_also_see_also ON class_definition_see_also (see_also); CREATE TABLE class_definition_aliases ( class_definition_name TEXT, @@ -5075,8 +5075,8 @@ CREATE TABLE class_definition_mappings ( PRIMARY KEY (class_definition_name, mappings), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_mappings_class_definition_name ON class_definition_mappings (class_definition_name); CREATE INDEX ix_class_definition_mappings_mappings ON class_definition_mappings (mappings); +CREATE INDEX ix_class_definition_mappings_class_definition_name ON class_definition_mappings (class_definition_name); CREATE TABLE class_definition_exact_mappings ( class_definition_name TEXT, @@ -5084,8 +5084,8 @@ CREATE TABLE class_definition_exact_mappings ( PRIMARY KEY (class_definition_name, exact_mappings), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_exact_mappings_exact_mappings ON class_definition_exact_mappings (exact_mappings); CREATE INDEX ix_class_definition_exact_mappings_class_definition_name ON class_definition_exact_mappings (class_definition_name); +CREATE INDEX ix_class_definition_exact_mappings_exact_mappings ON class_definition_exact_mappings (exact_mappings); CREATE TABLE class_definition_close_mappings ( class_definition_name TEXT, @@ -5102,8 +5102,8 @@ CREATE TABLE class_definition_related_mappings ( PRIMARY KEY (class_definition_name, related_mappings), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_related_mappings_class_definition_name ON class_definition_related_mappings (class_definition_name); CREATE INDEX ix_class_definition_related_mappings_related_mappings ON class_definition_related_mappings (related_mappings); +CREATE INDEX ix_class_definition_related_mappings_class_definition_name ON class_definition_related_mappings (class_definition_name); CREATE TABLE class_definition_narrow_mappings ( class_definition_name TEXT, @@ -5111,8 +5111,8 @@ CREATE TABLE class_definition_narrow_mappings ( PRIMARY KEY (class_definition_name, narrow_mappings), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_narrow_mappings_class_definition_name ON class_definition_narrow_mappings (class_definition_name); CREATE INDEX ix_class_definition_narrow_mappings_narrow_mappings ON class_definition_narrow_mappings (narrow_mappings); +CREATE INDEX ix_class_definition_narrow_mappings_class_definition_name ON class_definition_narrow_mappings (class_definition_name); CREATE TABLE class_definition_broad_mappings ( class_definition_name TEXT, @@ -5129,8 +5129,8 @@ CREATE TABLE class_definition_contributors ( PRIMARY KEY (class_definition_name, contributors), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_contributors_contributors ON class_definition_contributors (contributors); CREATE INDEX ix_class_definition_contributors_class_definition_name ON class_definition_contributors (class_definition_name); +CREATE INDEX ix_class_definition_contributors_contributors ON class_definition_contributors (contributors); CREATE TABLE class_definition_category ( class_definition_name TEXT, @@ -5138,8 +5138,8 @@ CREATE TABLE class_definition_category ( PRIMARY KEY (class_definition_name, category), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_class_definition_category_class_definition_name ON class_definition_category (class_definition_name); CREATE INDEX ix_class_definition_category_category ON class_definition_category (category); +CREATE INDEX ix_class_definition_category_class_definition_name ON class_definition_category (class_definition_name); CREATE TABLE class_definition_keyword ( class_definition_name TEXT, @@ -5165,8 +5165,8 @@ CREATE TABLE dimension_expression_notes ( PRIMARY KEY (dimension_expression_id, notes), FOREIGN KEY(dimension_expression_id) REFERENCES dimension_expression (id) ); -CREATE INDEX ix_dimension_expression_notes_notes ON dimension_expression_notes (notes); CREATE INDEX ix_dimension_expression_notes_dimension_expression_id ON dimension_expression_notes (dimension_expression_id); +CREATE INDEX ix_dimension_expression_notes_notes ON dimension_expression_notes (notes); CREATE TABLE dimension_expression_comments ( dimension_expression_id INTEGER, @@ -5174,8 +5174,8 @@ CREATE TABLE dimension_expression_comments ( PRIMARY KEY (dimension_expression_id, comments), FOREIGN KEY(dimension_expression_id) REFERENCES dimension_expression (id) ); -CREATE INDEX ix_dimension_expression_comments_dimension_expression_id ON dimension_expression_comments (dimension_expression_id); CREATE INDEX ix_dimension_expression_comments_comments ON dimension_expression_comments (comments); +CREATE INDEX ix_dimension_expression_comments_dimension_expression_id ON dimension_expression_comments (dimension_expression_id); CREATE TABLE dimension_expression_see_also ( dimension_expression_id INTEGER, @@ -5183,8 +5183,8 @@ CREATE TABLE dimension_expression_see_also ( PRIMARY KEY (dimension_expression_id, see_also), FOREIGN KEY(dimension_expression_id) REFERENCES dimension_expression (id) ); -CREATE INDEX ix_dimension_expression_see_also_see_also ON dimension_expression_see_also (see_also); CREATE INDEX ix_dimension_expression_see_also_dimension_expression_id ON dimension_expression_see_also (dimension_expression_id); +CREATE INDEX ix_dimension_expression_see_also_see_also ON dimension_expression_see_also (see_also); CREATE TABLE dimension_expression_aliases ( dimension_expression_id INTEGER, @@ -5210,8 +5210,8 @@ CREATE TABLE dimension_expression_exact_mappings ( PRIMARY KEY (dimension_expression_id, exact_mappings), FOREIGN KEY(dimension_expression_id) REFERENCES dimension_expression (id) ); -CREATE INDEX ix_dimension_expression_exact_mappings_exact_mappings ON dimension_expression_exact_mappings (exact_mappings); CREATE INDEX ix_dimension_expression_exact_mappings_dimension_expression_id ON dimension_expression_exact_mappings (dimension_expression_id); +CREATE INDEX ix_dimension_expression_exact_mappings_exact_mappings ON dimension_expression_exact_mappings (exact_mappings); CREATE TABLE dimension_expression_close_mappings ( dimension_expression_id INTEGER, @@ -5237,8 +5237,8 @@ CREATE TABLE dimension_expression_narrow_mappings ( PRIMARY KEY (dimension_expression_id, narrow_mappings), FOREIGN KEY(dimension_expression_id) REFERENCES dimension_expression (id) ); -CREATE INDEX ix_dimension_expression_narrow_mappings_narrow_mappings ON dimension_expression_narrow_mappings (narrow_mappings); CREATE INDEX ix_dimension_expression_narrow_mappings_dimension_expression_id ON dimension_expression_narrow_mappings (dimension_expression_id); +CREATE INDEX ix_dimension_expression_narrow_mappings_narrow_mappings ON dimension_expression_narrow_mappings (narrow_mappings); CREATE TABLE dimension_expression_broad_mappings ( dimension_expression_id INTEGER, @@ -5264,8 +5264,8 @@ CREATE TABLE dimension_expression_category ( PRIMARY KEY (dimension_expression_id, category), FOREIGN KEY(dimension_expression_id) REFERENCES dimension_expression (id) ); -CREATE INDEX ix_dimension_expression_category_dimension_expression_id ON dimension_expression_category (dimension_expression_id); CREATE INDEX ix_dimension_expression_category_category ON dimension_expression_category (category); +CREATE INDEX ix_dimension_expression_category_dimension_expression_id ON dimension_expression_category (dimension_expression_id); CREATE TABLE dimension_expression_keyword ( dimension_expression_id INTEGER, @@ -5291,8 +5291,8 @@ CREATE TABLE pattern_expression_notes ( PRIMARY KEY (pattern_expression_id, notes), FOREIGN KEY(pattern_expression_id) REFERENCES pattern_expression (id) ); -CREATE INDEX ix_pattern_expression_notes_pattern_expression_id ON pattern_expression_notes (pattern_expression_id); CREATE INDEX ix_pattern_expression_notes_notes ON pattern_expression_notes (notes); +CREATE INDEX ix_pattern_expression_notes_pattern_expression_id ON pattern_expression_notes (pattern_expression_id); CREATE TABLE pattern_expression_comments ( pattern_expression_id INTEGER, @@ -5309,8 +5309,8 @@ CREATE TABLE pattern_expression_see_also ( PRIMARY KEY (pattern_expression_id, see_also), FOREIGN KEY(pattern_expression_id) REFERENCES pattern_expression (id) ); -CREATE INDEX ix_pattern_expression_see_also_pattern_expression_id ON pattern_expression_see_also (pattern_expression_id); CREATE INDEX ix_pattern_expression_see_also_see_also ON pattern_expression_see_also (see_also); +CREATE INDEX ix_pattern_expression_see_also_pattern_expression_id ON pattern_expression_see_also (pattern_expression_id); CREATE TABLE pattern_expression_aliases ( pattern_expression_id INTEGER, @@ -5336,8 +5336,8 @@ CREATE TABLE pattern_expression_exact_mappings ( PRIMARY KEY (pattern_expression_id, exact_mappings), FOREIGN KEY(pattern_expression_id) REFERENCES pattern_expression (id) ); -CREATE INDEX ix_pattern_expression_exact_mappings_pattern_expression_id ON pattern_expression_exact_mappings (pattern_expression_id); CREATE INDEX ix_pattern_expression_exact_mappings_exact_mappings ON pattern_expression_exact_mappings (exact_mappings); +CREATE INDEX ix_pattern_expression_exact_mappings_pattern_expression_id ON pattern_expression_exact_mappings (pattern_expression_id); CREATE TABLE pattern_expression_close_mappings ( pattern_expression_id INTEGER, @@ -5363,8 +5363,8 @@ CREATE TABLE pattern_expression_narrow_mappings ( PRIMARY KEY (pattern_expression_id, narrow_mappings), FOREIGN KEY(pattern_expression_id) REFERENCES pattern_expression (id) ); -CREATE INDEX ix_pattern_expression_narrow_mappings_narrow_mappings ON pattern_expression_narrow_mappings (narrow_mappings); CREATE INDEX ix_pattern_expression_narrow_mappings_pattern_expression_id ON pattern_expression_narrow_mappings (pattern_expression_id); +CREATE INDEX ix_pattern_expression_narrow_mappings_narrow_mappings ON pattern_expression_narrow_mappings (narrow_mappings); CREATE TABLE pattern_expression_broad_mappings ( pattern_expression_id INTEGER, @@ -5390,8 +5390,8 @@ CREATE TABLE pattern_expression_category ( PRIMARY KEY (pattern_expression_id, category), FOREIGN KEY(pattern_expression_id) REFERENCES pattern_expression (id) ); -CREATE INDEX ix_pattern_expression_category_category ON pattern_expression_category (category); CREATE INDEX ix_pattern_expression_category_pattern_expression_id ON pattern_expression_category (pattern_expression_id); +CREATE INDEX ix_pattern_expression_category_category ON pattern_expression_category (category); CREATE TABLE pattern_expression_keyword ( pattern_expression_id INTEGER, @@ -5408,8 +5408,8 @@ CREATE TABLE import_expression_todos ( PRIMARY KEY (import_expression_id, todos), FOREIGN KEY(import_expression_id) REFERENCES import_expression (id) ); -CREATE INDEX ix_import_expression_todos_import_expression_id ON import_expression_todos (import_expression_id); CREATE INDEX ix_import_expression_todos_todos ON import_expression_todos (todos); +CREATE INDEX ix_import_expression_todos_import_expression_id ON import_expression_todos (import_expression_id); CREATE TABLE import_expression_notes ( import_expression_id INTEGER, @@ -5426,8 +5426,8 @@ CREATE TABLE import_expression_comments ( PRIMARY KEY (import_expression_id, comments), FOREIGN KEY(import_expression_id) REFERENCES import_expression (id) ); -CREATE INDEX ix_import_expression_comments_import_expression_id ON import_expression_comments (import_expression_id); CREATE INDEX ix_import_expression_comments_comments ON import_expression_comments (comments); +CREATE INDEX ix_import_expression_comments_import_expression_id ON import_expression_comments (import_expression_id); CREATE TABLE import_expression_see_also ( import_expression_id INTEGER, @@ -5435,8 +5435,8 @@ CREATE TABLE import_expression_see_also ( PRIMARY KEY (import_expression_id, see_also), FOREIGN KEY(import_expression_id) REFERENCES import_expression (id) ); -CREATE INDEX ix_import_expression_see_also_import_expression_id ON import_expression_see_also (import_expression_id); CREATE INDEX ix_import_expression_see_also_see_also ON import_expression_see_also (see_also); +CREATE INDEX ix_import_expression_see_also_import_expression_id ON import_expression_see_also (import_expression_id); CREATE TABLE import_expression_aliases ( import_expression_id INTEGER, @@ -5462,8 +5462,8 @@ CREATE TABLE import_expression_exact_mappings ( PRIMARY KEY (import_expression_id, exact_mappings), FOREIGN KEY(import_expression_id) REFERENCES import_expression (id) ); -CREATE INDEX ix_import_expression_exact_mappings_import_expression_id ON import_expression_exact_mappings (import_expression_id); CREATE INDEX ix_import_expression_exact_mappings_exact_mappings ON import_expression_exact_mappings (exact_mappings); +CREATE INDEX ix_import_expression_exact_mappings_import_expression_id ON import_expression_exact_mappings (import_expression_id); CREATE TABLE import_expression_close_mappings ( import_expression_id INTEGER, @@ -5489,8 +5489,8 @@ CREATE TABLE import_expression_narrow_mappings ( PRIMARY KEY (import_expression_id, narrow_mappings), FOREIGN KEY(import_expression_id) REFERENCES import_expression (id) ); -CREATE INDEX ix_import_expression_narrow_mappings_narrow_mappings ON import_expression_narrow_mappings (narrow_mappings); CREATE INDEX ix_import_expression_narrow_mappings_import_expression_id ON import_expression_narrow_mappings (import_expression_id); +CREATE INDEX ix_import_expression_narrow_mappings_narrow_mappings ON import_expression_narrow_mappings (narrow_mappings); CREATE TABLE import_expression_broad_mappings ( import_expression_id INTEGER, @@ -5516,8 +5516,8 @@ CREATE TABLE import_expression_category ( PRIMARY KEY (import_expression_id, category), FOREIGN KEY(import_expression_id) REFERENCES import_expression (id) ); -CREATE INDEX ix_import_expression_category_category ON import_expression_category (category); CREATE INDEX ix_import_expression_category_import_expression_id ON import_expression_category (import_expression_id); +CREATE INDEX ix_import_expression_category_category ON import_expression_category (category); CREATE TABLE import_expression_keyword ( import_expression_id INTEGER, @@ -5525,8 +5525,8 @@ CREATE TABLE import_expression_keyword ( PRIMARY KEY (import_expression_id, keyword), FOREIGN KEY(import_expression_id) REFERENCES import_expression (id) ); -CREATE INDEX ix_import_expression_keyword_import_expression_id ON import_expression_keyword (import_expression_id); CREATE INDEX ix_import_expression_keyword_keyword ON import_expression_keyword (keyword); +CREATE INDEX ix_import_expression_keyword_import_expression_id ON import_expression_keyword (import_expression_id); CREATE TABLE "UnitOfMeasure_exact_mappings" ( "UnitOfMeasure_id" INTEGER, @@ -5534,8 +5534,8 @@ CREATE TABLE "UnitOfMeasure_exact_mappings" ( PRIMARY KEY ("UnitOfMeasure_id", exact_mappings), FOREIGN KEY("UnitOfMeasure_id") REFERENCES "UnitOfMeasure" (id) ); -CREATE INDEX "ix_UnitOfMeasure_exact_mappings_exact_mappings" ON "UnitOfMeasure_exact_mappings" (exact_mappings); CREATE INDEX "ix_UnitOfMeasure_exact_mappings_UnitOfMeasure_id" ON "UnitOfMeasure_exact_mappings" ("UnitOfMeasure_id"); +CREATE INDEX "ix_UnitOfMeasure_exact_mappings_exact_mappings" ON "UnitOfMeasure_exact_mappings" (exact_mappings); CREATE TABLE slot_expression ( id INTEGER NOT NULL, @@ -5606,24 +5606,24 @@ CREATE TABLE local_name ( FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name), FOREIGN KEY(class_definition_name) REFERENCES class_definition (name) ); -CREATE INDEX ix_local_name_enum_definition_name ON local_name (enum_definition_name); -CREATE INDEX local_name_slot_definition_name_local_name_source_idx ON local_name (slot_definition_name, local_name_source); -CREATE INDEX local_name_element_name_local_name_source_idx ON local_name (element_name, local_name_source); -CREATE INDEX ix_local_name_schema_definition_name ON local_name (schema_definition_name); -CREATE INDEX local_name_schema_definition_name_local_name_source_idx ON local_name (schema_definition_name, local_name_source); CREATE INDEX ix_local_name_local_name_source ON local_name (local_name_source); -CREATE INDEX ix_local_name_subset_definition_name ON local_name (subset_definition_name); -CREATE INDEX local_name_class_definition_name_local_name_source_idx ON local_name (class_definition_name, local_name_source); CREATE INDEX ix_local_name_definition_name ON local_name (definition_name); -CREATE INDEX ix_local_name_local_name_value ON local_name (local_name_value); -CREATE INDEX local_name_enum_definition_name_local_name_source_idx ON local_name (enum_definition_name, local_name_source); CREATE INDEX ix_local_name_slot_definition_name ON local_name (slot_definition_name); -CREATE INDEX ix_local_name_class_definition_name ON local_name (class_definition_name); CREATE INDEX local_name_type_definition_name_local_name_source_idx ON local_name (type_definition_name, local_name_source); CREATE INDEX local_name_subset_definition_name_local_name_source_idx ON local_name (subset_definition_name, local_name_source); CREATE INDEX ix_local_name_type_definition_name ON local_name (type_definition_name); CREATE INDEX local_name_definition_name_local_name_source_idx ON local_name (definition_name, local_name_source); +CREATE INDEX local_name_enum_definition_name_local_name_source_idx ON local_name (enum_definition_name, local_name_source); +CREATE INDEX ix_local_name_local_name_value ON local_name (local_name_value); CREATE INDEX ix_local_name_element_name ON local_name (element_name); +CREATE INDEX ix_local_name_class_definition_name ON local_name (class_definition_name); +CREATE INDEX local_name_element_name_local_name_source_idx ON local_name (element_name, local_name_source); +CREATE INDEX local_name_slot_definition_name_local_name_source_idx ON local_name (slot_definition_name, local_name_source); +CREATE INDEX local_name_class_definition_name_local_name_source_idx ON local_name (class_definition_name, local_name_source); +CREATE INDEX local_name_schema_definition_name_local_name_source_idx ON local_name (schema_definition_name, local_name_source); +CREATE INDEX ix_local_name_enum_definition_name ON local_name (enum_definition_name); +CREATE INDEX ix_local_name_schema_definition_name ON local_name (schema_definition_name); +CREATE INDEX ix_local_name_subset_definition_name ON local_name (subset_definition_name); CREATE TABLE permissible_value ( text TEXT NOT NULL, @@ -5684,8 +5684,8 @@ CREATE TABLE schema_definition_in_subset ( FOREIGN KEY(schema_definition_name) REFERENCES schema_definition (name), FOREIGN KEY(in_subset_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_schema_definition_in_subset_in_subset_name ON schema_definition_in_subset (in_subset_name); CREATE INDEX ix_schema_definition_in_subset_schema_definition_name ON schema_definition_in_subset (schema_definition_name); +CREATE INDEX ix_schema_definition_in_subset_in_subset_name ON schema_definition_in_subset (in_subset_name); CREATE TABLE type_expression_equals_string_in ( type_expression_id INTEGER, @@ -5703,8 +5703,8 @@ CREATE TABLE type_expression_none_of ( FOREIGN KEY(type_expression_id) REFERENCES type_expression (id), FOREIGN KEY(none_of_id) REFERENCES anonymous_type_expression (id) ); -CREATE INDEX ix_type_expression_none_of_none_of_id ON type_expression_none_of (none_of_id); CREATE INDEX ix_type_expression_none_of_type_expression_id ON type_expression_none_of (type_expression_id); +CREATE INDEX ix_type_expression_none_of_none_of_id ON type_expression_none_of (none_of_id); CREATE TABLE type_expression_exactly_one_of ( type_expression_id INTEGER, @@ -5723,8 +5723,8 @@ CREATE TABLE type_expression_any_of ( FOREIGN KEY(type_expression_id) REFERENCES type_expression (id), FOREIGN KEY(any_of_id) REFERENCES anonymous_type_expression (id) ); -CREATE INDEX ix_type_expression_any_of_type_expression_id ON type_expression_any_of (type_expression_id); CREATE INDEX ix_type_expression_any_of_any_of_id ON type_expression_any_of (any_of_id); +CREATE INDEX ix_type_expression_any_of_type_expression_id ON type_expression_any_of (type_expression_id); CREATE TABLE type_expression_all_of ( type_expression_id INTEGER, @@ -5733,8 +5733,8 @@ CREATE TABLE type_expression_all_of ( FOREIGN KEY(type_expression_id) REFERENCES type_expression (id), FOREIGN KEY(all_of_id) REFERENCES anonymous_type_expression (id) ); -CREATE INDEX ix_type_expression_all_of_type_expression_id ON type_expression_all_of (type_expression_id); CREATE INDEX ix_type_expression_all_of_all_of_id ON type_expression_all_of (all_of_id); +CREATE INDEX ix_type_expression_all_of_type_expression_id ON type_expression_all_of (type_expression_id); CREATE TABLE anonymous_type_expression_equals_string_in ( anonymous_type_expression_id INTEGER, @@ -5742,8 +5742,8 @@ CREATE TABLE anonymous_type_expression_equals_string_in ( PRIMARY KEY (anonymous_type_expression_id, equals_string_in), FOREIGN KEY(anonymous_type_expression_id) REFERENCES anonymous_type_expression (id) ); -CREATE INDEX ix_anonymous_type_expression_equals_string_in_equals_string_in ON anonymous_type_expression_equals_string_in (equals_string_in); CREATE INDEX ix_anonymous_type_expression_equals_string_in_anonymous_type_expression_id ON anonymous_type_expression_equals_string_in (anonymous_type_expression_id); +CREATE INDEX ix_anonymous_type_expression_equals_string_in_equals_string_in ON anonymous_type_expression_equals_string_in (equals_string_in); CREATE TABLE anonymous_type_expression_none_of ( anonymous_type_expression_id INTEGER, @@ -5752,8 +5752,8 @@ CREATE TABLE anonymous_type_expression_none_of ( FOREIGN KEY(anonymous_type_expression_id) REFERENCES anonymous_type_expression (id), FOREIGN KEY(none_of_id) REFERENCES anonymous_type_expression (id) ); -CREATE INDEX ix_anonymous_type_expression_none_of_anonymous_type_expression_id ON anonymous_type_expression_none_of (anonymous_type_expression_id); CREATE INDEX ix_anonymous_type_expression_none_of_none_of_id ON anonymous_type_expression_none_of (none_of_id); +CREATE INDEX ix_anonymous_type_expression_none_of_anonymous_type_expression_id ON anonymous_type_expression_none_of (anonymous_type_expression_id); CREATE TABLE anonymous_type_expression_exactly_one_of ( anonymous_type_expression_id INTEGER, @@ -5782,8 +5782,8 @@ CREATE TABLE anonymous_type_expression_all_of ( FOREIGN KEY(anonymous_type_expression_id) REFERENCES anonymous_type_expression (id), FOREIGN KEY(all_of_id) REFERENCES anonymous_type_expression (id) ); -CREATE INDEX ix_anonymous_type_expression_all_of_anonymous_type_expression_id ON anonymous_type_expression_all_of (anonymous_type_expression_id); CREATE INDEX ix_anonymous_type_expression_all_of_all_of_id ON anonymous_type_expression_all_of (all_of_id); +CREATE INDEX ix_anonymous_type_expression_all_of_anonymous_type_expression_id ON anonymous_type_expression_all_of (anonymous_type_expression_id); CREATE TABLE type_definition_none_of ( type_definition_name TEXT, @@ -5792,8 +5792,8 @@ CREATE TABLE type_definition_none_of ( FOREIGN KEY(type_definition_name) REFERENCES type_definition (name), FOREIGN KEY(none_of_id) REFERENCES anonymous_type_expression (id) ); -CREATE INDEX ix_type_definition_none_of_none_of_id ON type_definition_none_of (none_of_id); CREATE INDEX ix_type_definition_none_of_type_definition_name ON type_definition_none_of (type_definition_name); +CREATE INDEX ix_type_definition_none_of_none_of_id ON type_definition_none_of (none_of_id); CREATE TABLE type_definition_exactly_one_of ( type_definition_name TEXT, @@ -5802,8 +5802,8 @@ CREATE TABLE type_definition_exactly_one_of ( FOREIGN KEY(type_definition_name) REFERENCES type_definition (name), FOREIGN KEY(exactly_one_of_id) REFERENCES anonymous_type_expression (id) ); -CREATE INDEX ix_type_definition_exactly_one_of_type_definition_name ON type_definition_exactly_one_of (type_definition_name); CREATE INDEX ix_type_definition_exactly_one_of_exactly_one_of_id ON type_definition_exactly_one_of (exactly_one_of_id); +CREATE INDEX ix_type_definition_exactly_one_of_type_definition_name ON type_definition_exactly_one_of (type_definition_name); CREATE TABLE type_definition_any_of ( type_definition_name TEXT, @@ -5812,8 +5812,8 @@ CREATE TABLE type_definition_any_of ( FOREIGN KEY(type_definition_name) REFERENCES type_definition (name), FOREIGN KEY(any_of_id) REFERENCES anonymous_type_expression (id) ); -CREATE INDEX ix_type_definition_any_of_type_definition_name ON type_definition_any_of (type_definition_name); CREATE INDEX ix_type_definition_any_of_any_of_id ON type_definition_any_of (any_of_id); +CREATE INDEX ix_type_definition_any_of_type_definition_name ON type_definition_any_of (type_definition_name); CREATE TABLE type_definition_all_of ( type_definition_name TEXT, @@ -5841,8 +5841,8 @@ CREATE TABLE subset_definition_id_prefixes ( PRIMARY KEY (subset_definition_name, id_prefixes), FOREIGN KEY(subset_definition_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_subset_definition_id_prefixes_subset_definition_name ON subset_definition_id_prefixes (subset_definition_name); CREATE INDEX ix_subset_definition_id_prefixes_id_prefixes ON subset_definition_id_prefixes (id_prefixes); +CREATE INDEX ix_subset_definition_id_prefixes_subset_definition_name ON subset_definition_id_prefixes (subset_definition_name); CREATE TABLE subset_definition_implements ( subset_definition_name TEXT, @@ -5850,8 +5850,8 @@ CREATE TABLE subset_definition_implements ( PRIMARY KEY (subset_definition_name, implements), FOREIGN KEY(subset_definition_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_subset_definition_implements_implements ON subset_definition_implements (implements); CREATE INDEX ix_subset_definition_implements_subset_definition_name ON subset_definition_implements (subset_definition_name); +CREATE INDEX ix_subset_definition_implements_implements ON subset_definition_implements (implements); CREATE TABLE subset_definition_instantiates ( subset_definition_name TEXT, @@ -5886,8 +5886,8 @@ CREATE TABLE subset_definition_comments ( PRIMARY KEY (subset_definition_name, comments), FOREIGN KEY(subset_definition_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_subset_definition_comments_comments ON subset_definition_comments (comments); CREATE INDEX ix_subset_definition_comments_subset_definition_name ON subset_definition_comments (subset_definition_name); +CREATE INDEX ix_subset_definition_comments_comments ON subset_definition_comments (comments); CREATE TABLE subset_definition_in_subset ( subset_definition_name TEXT, @@ -5896,8 +5896,8 @@ CREATE TABLE subset_definition_in_subset ( FOREIGN KEY(subset_definition_name) REFERENCES subset_definition (name), FOREIGN KEY(in_subset_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_subset_definition_in_subset_in_subset_name ON subset_definition_in_subset (in_subset_name); CREATE INDEX ix_subset_definition_in_subset_subset_definition_name ON subset_definition_in_subset (subset_definition_name); +CREATE INDEX ix_subset_definition_in_subset_in_subset_name ON subset_definition_in_subset (in_subset_name); CREATE TABLE subset_definition_see_also ( subset_definition_name TEXT, @@ -5914,8 +5914,8 @@ CREATE TABLE subset_definition_aliases ( PRIMARY KEY (subset_definition_name, aliases), FOREIGN KEY(subset_definition_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_subset_definition_aliases_aliases ON subset_definition_aliases (aliases); CREATE INDEX ix_subset_definition_aliases_subset_definition_name ON subset_definition_aliases (subset_definition_name); +CREATE INDEX ix_subset_definition_aliases_aliases ON subset_definition_aliases (aliases); CREATE TABLE subset_definition_mappings ( subset_definition_name TEXT, @@ -5923,8 +5923,8 @@ CREATE TABLE subset_definition_mappings ( PRIMARY KEY (subset_definition_name, mappings), FOREIGN KEY(subset_definition_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_subset_definition_mappings_subset_definition_name ON subset_definition_mappings (subset_definition_name); CREATE INDEX ix_subset_definition_mappings_mappings ON subset_definition_mappings (mappings); +CREATE INDEX ix_subset_definition_mappings_subset_definition_name ON subset_definition_mappings (subset_definition_name); CREATE TABLE subset_definition_exact_mappings ( subset_definition_name TEXT, @@ -5941,8 +5941,8 @@ CREATE TABLE subset_definition_close_mappings ( PRIMARY KEY (subset_definition_name, close_mappings), FOREIGN KEY(subset_definition_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_subset_definition_close_mappings_subset_definition_name ON subset_definition_close_mappings (subset_definition_name); CREATE INDEX ix_subset_definition_close_mappings_close_mappings ON subset_definition_close_mappings (close_mappings); +CREATE INDEX ix_subset_definition_close_mappings_subset_definition_name ON subset_definition_close_mappings (subset_definition_name); CREATE TABLE subset_definition_related_mappings ( subset_definition_name TEXT, @@ -5950,8 +5950,8 @@ CREATE TABLE subset_definition_related_mappings ( PRIMARY KEY (subset_definition_name, related_mappings), FOREIGN KEY(subset_definition_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_subset_definition_related_mappings_subset_definition_name ON subset_definition_related_mappings (subset_definition_name); CREATE INDEX ix_subset_definition_related_mappings_related_mappings ON subset_definition_related_mappings (related_mappings); +CREATE INDEX ix_subset_definition_related_mappings_subset_definition_name ON subset_definition_related_mappings (subset_definition_name); CREATE TABLE subset_definition_narrow_mappings ( subset_definition_name TEXT, @@ -5959,8 +5959,8 @@ CREATE TABLE subset_definition_narrow_mappings ( PRIMARY KEY (subset_definition_name, narrow_mappings), FOREIGN KEY(subset_definition_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_subset_definition_narrow_mappings_narrow_mappings ON subset_definition_narrow_mappings (narrow_mappings); CREATE INDEX ix_subset_definition_narrow_mappings_subset_definition_name ON subset_definition_narrow_mappings (subset_definition_name); +CREATE INDEX ix_subset_definition_narrow_mappings_narrow_mappings ON subset_definition_narrow_mappings (narrow_mappings); CREATE TABLE subset_definition_broad_mappings ( subset_definition_name TEXT, @@ -5986,8 +5986,8 @@ CREATE TABLE subset_definition_category ( PRIMARY KEY (subset_definition_name, category), FOREIGN KEY(subset_definition_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_subset_definition_category_category ON subset_definition_category (category); CREATE INDEX ix_subset_definition_category_subset_definition_name ON subset_definition_category (subset_definition_name); +CREATE INDEX ix_subset_definition_category_category ON subset_definition_category (category); CREATE TABLE subset_definition_keyword ( subset_definition_name TEXT, @@ -6005,8 +6005,8 @@ CREATE TABLE definition_in_subset ( FOREIGN KEY(definition_name) REFERENCES definition (name), FOREIGN KEY(in_subset_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_definition_in_subset_definition_name ON definition_in_subset (definition_name); CREATE INDEX ix_definition_in_subset_in_subset_name ON definition_in_subset (in_subset_name); +CREATE INDEX ix_definition_in_subset_definition_name ON definition_in_subset (definition_name); CREATE TABLE enum_expression_include ( enum_expression_id INTEGER, @@ -6015,8 +6015,8 @@ CREATE TABLE enum_expression_include ( FOREIGN KEY(enum_expression_id) REFERENCES enum_expression (id), FOREIGN KEY(include_id) REFERENCES anonymous_enum_expression (id) ); -CREATE INDEX ix_enum_expression_include_include_id ON enum_expression_include (include_id); CREATE INDEX ix_enum_expression_include_enum_expression_id ON enum_expression_include (enum_expression_id); +CREATE INDEX ix_enum_expression_include_include_id ON enum_expression_include (include_id); CREATE TABLE enum_expression_minus ( enum_expression_id INTEGER, @@ -6044,8 +6044,8 @@ CREATE TABLE enum_expression_concepts ( PRIMARY KEY (enum_expression_id, concepts), FOREIGN KEY(enum_expression_id) REFERENCES enum_expression (id) ); -CREATE INDEX ix_enum_expression_concepts_concepts ON enum_expression_concepts (concepts); CREATE INDEX ix_enum_expression_concepts_enum_expression_id ON enum_expression_concepts (enum_expression_id); +CREATE INDEX ix_enum_expression_concepts_concepts ON enum_expression_concepts (concepts); CREATE TABLE anonymous_enum_expression_include ( anonymous_enum_expression_id INTEGER, @@ -6074,8 +6074,8 @@ CREATE TABLE anonymous_enum_expression_inherits ( FOREIGN KEY(anonymous_enum_expression_id) REFERENCES anonymous_enum_expression (id), FOREIGN KEY(inherits_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_anonymous_enum_expression_inherits_anonymous_enum_expression_id ON anonymous_enum_expression_inherits (anonymous_enum_expression_id); CREATE INDEX ix_anonymous_enum_expression_inherits_inherits_name ON anonymous_enum_expression_inherits (inherits_name); +CREATE INDEX ix_anonymous_enum_expression_inherits_anonymous_enum_expression_id ON anonymous_enum_expression_inherits (anonymous_enum_expression_id); CREATE TABLE anonymous_enum_expression_concepts ( anonymous_enum_expression_id INTEGER, @@ -6093,8 +6093,8 @@ CREATE TABLE enum_definition_include ( FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name), FOREIGN KEY(include_id) REFERENCES anonymous_enum_expression (id) ); -CREATE INDEX ix_enum_definition_include_enum_definition_name ON enum_definition_include (enum_definition_name); CREATE INDEX ix_enum_definition_include_include_id ON enum_definition_include (include_id); +CREATE INDEX ix_enum_definition_include_enum_definition_name ON enum_definition_include (enum_definition_name); CREATE TABLE enum_definition_minus ( enum_definition_name TEXT, @@ -6113,8 +6113,8 @@ CREATE TABLE enum_definition_inherits ( FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name), FOREIGN KEY(inherits_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_inherits_enum_definition_name ON enum_definition_inherits (enum_definition_name); CREATE INDEX ix_enum_definition_inherits_inherits_name ON enum_definition_inherits (inherits_name); +CREATE INDEX ix_enum_definition_inherits_enum_definition_name ON enum_definition_inherits (enum_definition_name); CREATE TABLE enum_definition_concepts ( enum_definition_name TEXT, @@ -6122,8 +6122,8 @@ CREATE TABLE enum_definition_concepts ( PRIMARY KEY (enum_definition_name, concepts), FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_concepts_concepts ON enum_definition_concepts (concepts); CREATE INDEX ix_enum_definition_concepts_enum_definition_name ON enum_definition_concepts (enum_definition_name); +CREATE INDEX ix_enum_definition_concepts_concepts ON enum_definition_concepts (concepts); CREATE TABLE enum_definition_mixins ( enum_definition_name TEXT, @@ -6160,8 +6160,8 @@ CREATE TABLE enum_definition_id_prefixes ( PRIMARY KEY (enum_definition_name, id_prefixes), FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_id_prefixes_id_prefixes ON enum_definition_id_prefixes (id_prefixes); CREATE INDEX ix_enum_definition_id_prefixes_enum_definition_name ON enum_definition_id_prefixes (enum_definition_name); +CREATE INDEX ix_enum_definition_id_prefixes_id_prefixes ON enum_definition_id_prefixes (id_prefixes); CREATE TABLE enum_definition_implements ( enum_definition_name TEXT, @@ -6169,8 +6169,8 @@ CREATE TABLE enum_definition_implements ( PRIMARY KEY (enum_definition_name, implements), FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_implements_implements ON enum_definition_implements (implements); CREATE INDEX ix_enum_definition_implements_enum_definition_name ON enum_definition_implements (enum_definition_name); +CREATE INDEX ix_enum_definition_implements_implements ON enum_definition_implements (implements); CREATE TABLE enum_definition_instantiates ( enum_definition_name TEXT, @@ -6178,8 +6178,8 @@ CREATE TABLE enum_definition_instantiates ( PRIMARY KEY (enum_definition_name, instantiates), FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_instantiates_enum_definition_name ON enum_definition_instantiates (enum_definition_name); CREATE INDEX ix_enum_definition_instantiates_instantiates ON enum_definition_instantiates (instantiates); +CREATE INDEX ix_enum_definition_instantiates_enum_definition_name ON enum_definition_instantiates (enum_definition_name); CREATE TABLE enum_definition_todos ( enum_definition_name TEXT, @@ -6187,8 +6187,8 @@ CREATE TABLE enum_definition_todos ( PRIMARY KEY (enum_definition_name, todos), FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_todos_enum_definition_name ON enum_definition_todos (enum_definition_name); CREATE INDEX ix_enum_definition_todos_todos ON enum_definition_todos (todos); +CREATE INDEX ix_enum_definition_todos_enum_definition_name ON enum_definition_todos (enum_definition_name); CREATE TABLE enum_definition_notes ( enum_definition_name TEXT, @@ -6205,8 +6205,8 @@ CREATE TABLE enum_definition_comments ( PRIMARY KEY (enum_definition_name, comments), FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_comments_enum_definition_name ON enum_definition_comments (enum_definition_name); CREATE INDEX ix_enum_definition_comments_comments ON enum_definition_comments (comments); +CREATE INDEX ix_enum_definition_comments_enum_definition_name ON enum_definition_comments (enum_definition_name); CREATE TABLE enum_definition_in_subset ( enum_definition_name TEXT, @@ -6251,8 +6251,8 @@ CREATE TABLE enum_definition_exact_mappings ( PRIMARY KEY (enum_definition_name, exact_mappings), FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_exact_mappings_exact_mappings ON enum_definition_exact_mappings (exact_mappings); CREATE INDEX ix_enum_definition_exact_mappings_enum_definition_name ON enum_definition_exact_mappings (enum_definition_name); +CREATE INDEX ix_enum_definition_exact_mappings_exact_mappings ON enum_definition_exact_mappings (exact_mappings); CREATE TABLE enum_definition_close_mappings ( enum_definition_name TEXT, @@ -6305,8 +6305,8 @@ CREATE TABLE enum_definition_category ( PRIMARY KEY (enum_definition_name, category), FOREIGN KEY(enum_definition_name) REFERENCES enum_definition (name) ); -CREATE INDEX ix_enum_definition_category_enum_definition_name ON enum_definition_category (enum_definition_name); CREATE INDEX ix_enum_definition_category_category ON enum_definition_category (category); +CREATE INDEX ix_enum_definition_category_enum_definition_name ON enum_definition_category (enum_definition_name); CREATE TABLE enum_definition_keyword ( enum_definition_name TEXT, @@ -6324,8 +6324,8 @@ CREATE TABLE anonymous_expression_in_subset ( FOREIGN KEY(anonymous_expression_id) REFERENCES anonymous_expression (id), FOREIGN KEY(in_subset_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_anonymous_expression_in_subset_anonymous_expression_id ON anonymous_expression_in_subset (anonymous_expression_id); CREATE INDEX ix_anonymous_expression_in_subset_in_subset_name ON anonymous_expression_in_subset (in_subset_name); +CREATE INDEX ix_anonymous_expression_in_subset_anonymous_expression_id ON anonymous_expression_in_subset (anonymous_expression_id); CREATE TABLE path_expression_in_subset ( path_expression_id INTEGER, @@ -6344,8 +6344,8 @@ CREATE TABLE anonymous_slot_expression_in_subset ( FOREIGN KEY(anonymous_slot_expression_id) REFERENCES anonymous_slot_expression (id), FOREIGN KEY(in_subset_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_anonymous_slot_expression_in_subset_anonymous_slot_expression_id ON anonymous_slot_expression_in_subset (anonymous_slot_expression_id); CREATE INDEX ix_anonymous_slot_expression_in_subset_in_subset_name ON anonymous_slot_expression_in_subset (in_subset_name); +CREATE INDEX ix_anonymous_slot_expression_in_subset_anonymous_slot_expression_id ON anonymous_slot_expression_in_subset (anonymous_slot_expression_id); CREATE TABLE slot_definition_type_mappings ( slot_definition_name TEXT, @@ -6364,8 +6364,8 @@ CREATE TABLE slot_definition_in_subset ( FOREIGN KEY(slot_definition_name) REFERENCES slot_definition (name), FOREIGN KEY(in_subset_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_slot_definition_in_subset_slot_definition_name ON slot_definition_in_subset (slot_definition_name); CREATE INDEX ix_slot_definition_in_subset_in_subset_name ON slot_definition_in_subset (in_subset_name); +CREATE INDEX ix_slot_definition_in_subset_slot_definition_name ON slot_definition_in_subset (slot_definition_name); CREATE TABLE anonymous_class_expression_in_subset ( anonymous_class_expression_id INTEGER, @@ -6374,8 +6374,8 @@ CREATE TABLE anonymous_class_expression_in_subset ( FOREIGN KEY(anonymous_class_expression_id) REFERENCES anonymous_class_expression (id), FOREIGN KEY(in_subset_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_anonymous_class_expression_in_subset_in_subset_name ON anonymous_class_expression_in_subset (in_subset_name); CREATE INDEX ix_anonymous_class_expression_in_subset_anonymous_class_expression_id ON anonymous_class_expression_in_subset (anonymous_class_expression_id); +CREATE INDEX ix_anonymous_class_expression_in_subset_in_subset_name ON anonymous_class_expression_in_subset (in_subset_name); CREATE TABLE class_definition_in_subset ( class_definition_name TEXT, @@ -6384,8 +6384,8 @@ CREATE TABLE class_definition_in_subset ( FOREIGN KEY(class_definition_name) REFERENCES class_definition (name), FOREIGN KEY(in_subset_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_class_definition_in_subset_in_subset_name ON class_definition_in_subset (in_subset_name); CREATE INDEX ix_class_definition_in_subset_class_definition_name ON class_definition_in_subset (class_definition_name); +CREATE INDEX ix_class_definition_in_subset_in_subset_name ON class_definition_in_subset (in_subset_name); CREATE TABLE class_rule_todos ( class_rule_id INTEGER, @@ -6411,8 +6411,8 @@ CREATE TABLE class_rule_comments ( PRIMARY KEY (class_rule_id, comments), FOREIGN KEY(class_rule_id) REFERENCES class_rule (id) ); -CREATE INDEX ix_class_rule_comments_class_rule_id ON class_rule_comments (class_rule_id); CREATE INDEX ix_class_rule_comments_comments ON class_rule_comments (comments); +CREATE INDEX ix_class_rule_comments_class_rule_id ON class_rule_comments (class_rule_id); CREATE TABLE class_rule_in_subset ( class_rule_id INTEGER, @@ -6439,8 +6439,8 @@ CREATE TABLE class_rule_aliases ( PRIMARY KEY (class_rule_id, aliases), FOREIGN KEY(class_rule_id) REFERENCES class_rule (id) ); -CREATE INDEX ix_class_rule_aliases_class_rule_id ON class_rule_aliases (class_rule_id); CREATE INDEX ix_class_rule_aliases_aliases ON class_rule_aliases (aliases); +CREATE INDEX ix_class_rule_aliases_class_rule_id ON class_rule_aliases (class_rule_id); CREATE TABLE class_rule_mappings ( class_rule_id INTEGER, @@ -6466,8 +6466,8 @@ CREATE TABLE class_rule_close_mappings ( PRIMARY KEY (class_rule_id, close_mappings), FOREIGN KEY(class_rule_id) REFERENCES class_rule (id) ); -CREATE INDEX ix_class_rule_close_mappings_close_mappings ON class_rule_close_mappings (close_mappings); CREATE INDEX ix_class_rule_close_mappings_class_rule_id ON class_rule_close_mappings (class_rule_id); +CREATE INDEX ix_class_rule_close_mappings_close_mappings ON class_rule_close_mappings (close_mappings); CREATE TABLE class_rule_related_mappings ( class_rule_id INTEGER, @@ -6493,8 +6493,8 @@ CREATE TABLE class_rule_broad_mappings ( PRIMARY KEY (class_rule_id, broad_mappings), FOREIGN KEY(class_rule_id) REFERENCES class_rule (id) ); -CREATE INDEX ix_class_rule_broad_mappings_class_rule_id ON class_rule_broad_mappings (class_rule_id); CREATE INDEX ix_class_rule_broad_mappings_broad_mappings ON class_rule_broad_mappings (broad_mappings); +CREATE INDEX ix_class_rule_broad_mappings_class_rule_id ON class_rule_broad_mappings (class_rule_id); CREATE TABLE class_rule_contributors ( class_rule_id INTEGER, @@ -6520,8 +6520,8 @@ CREATE TABLE class_rule_keyword ( PRIMARY KEY (class_rule_id, keyword), FOREIGN KEY(class_rule_id) REFERENCES class_rule (id) ); -CREATE INDEX ix_class_rule_keyword_keyword ON class_rule_keyword (keyword); CREATE INDEX ix_class_rule_keyword_class_rule_id ON class_rule_keyword (class_rule_id); +CREATE INDEX ix_class_rule_keyword_keyword ON class_rule_keyword (keyword); CREATE TABLE array_expression_dimensions ( array_expression_id INTEGER, @@ -6539,8 +6539,8 @@ CREATE TABLE array_expression_todos ( PRIMARY KEY (array_expression_id, todos), FOREIGN KEY(array_expression_id) REFERENCES array_expression (id) ); -CREATE INDEX ix_array_expression_todos_todos ON array_expression_todos (todos); CREATE INDEX ix_array_expression_todos_array_expression_id ON array_expression_todos (array_expression_id); +CREATE INDEX ix_array_expression_todos_todos ON array_expression_todos (todos); CREATE TABLE array_expression_notes ( array_expression_id INTEGER, @@ -6548,8 +6548,8 @@ CREATE TABLE array_expression_notes ( PRIMARY KEY (array_expression_id, notes), FOREIGN KEY(array_expression_id) REFERENCES array_expression (id) ); -CREATE INDEX ix_array_expression_notes_notes ON array_expression_notes (notes); CREATE INDEX ix_array_expression_notes_array_expression_id ON array_expression_notes (array_expression_id); +CREATE INDEX ix_array_expression_notes_notes ON array_expression_notes (notes); CREATE TABLE array_expression_comments ( array_expression_id INTEGER, @@ -6576,8 +6576,8 @@ CREATE TABLE array_expression_see_also ( PRIMARY KEY (array_expression_id, see_also), FOREIGN KEY(array_expression_id) REFERENCES array_expression (id) ); -CREATE INDEX ix_array_expression_see_also_array_expression_id ON array_expression_see_also (array_expression_id); CREATE INDEX ix_array_expression_see_also_see_also ON array_expression_see_also (see_also); +CREATE INDEX ix_array_expression_see_also_array_expression_id ON array_expression_see_also (array_expression_id); CREATE TABLE array_expression_aliases ( array_expression_id INTEGER, @@ -6603,8 +6603,8 @@ CREATE TABLE array_expression_exact_mappings ( PRIMARY KEY (array_expression_id, exact_mappings), FOREIGN KEY(array_expression_id) REFERENCES array_expression (id) ); -CREATE INDEX ix_array_expression_exact_mappings_exact_mappings ON array_expression_exact_mappings (exact_mappings); CREATE INDEX ix_array_expression_exact_mappings_array_expression_id ON array_expression_exact_mappings (array_expression_id); +CREATE INDEX ix_array_expression_exact_mappings_exact_mappings ON array_expression_exact_mappings (exact_mappings); CREATE TABLE array_expression_close_mappings ( array_expression_id INTEGER, @@ -6630,8 +6630,8 @@ CREATE TABLE array_expression_narrow_mappings ( PRIMARY KEY (array_expression_id, narrow_mappings), FOREIGN KEY(array_expression_id) REFERENCES array_expression (id) ); -CREATE INDEX ix_array_expression_narrow_mappings_array_expression_id ON array_expression_narrow_mappings (array_expression_id); CREATE INDEX ix_array_expression_narrow_mappings_narrow_mappings ON array_expression_narrow_mappings (narrow_mappings); +CREATE INDEX ix_array_expression_narrow_mappings_array_expression_id ON array_expression_narrow_mappings (array_expression_id); CREATE TABLE array_expression_broad_mappings ( array_expression_id INTEGER, @@ -6657,8 +6657,8 @@ CREATE TABLE array_expression_category ( PRIMARY KEY (array_expression_id, category), FOREIGN KEY(array_expression_id) REFERENCES array_expression (id) ); -CREATE INDEX ix_array_expression_category_array_expression_id ON array_expression_category (array_expression_id); CREATE INDEX ix_array_expression_category_category ON array_expression_category (category); +CREATE INDEX ix_array_expression_category_array_expression_id ON array_expression_category (array_expression_id); CREATE TABLE array_expression_keyword ( array_expression_id INTEGER, @@ -6706,8 +6706,8 @@ CREATE TABLE unique_key_unique_key_slots ( FOREIGN KEY(unique_key_unique_key_name) REFERENCES unique_key (unique_key_name), FOREIGN KEY(unique_key_slots_name) REFERENCES slot_definition (name) ); -CREATE INDEX ix_unique_key_unique_key_slots_unique_key_slots_name ON unique_key_unique_key_slots (unique_key_slots_name); CREATE INDEX ix_unique_key_unique_key_slots_unique_key_unique_key_name ON unique_key_unique_key_slots (unique_key_unique_key_name); +CREATE INDEX ix_unique_key_unique_key_slots_unique_key_slots_name ON unique_key_unique_key_slots (unique_key_slots_name); CREATE TABLE unique_key_todos ( unique_key_unique_key_name TEXT, @@ -6724,8 +6724,8 @@ CREATE TABLE unique_key_notes ( PRIMARY KEY (unique_key_unique_key_name, notes), FOREIGN KEY(unique_key_unique_key_name) REFERENCES unique_key (unique_key_name) ); -CREATE INDEX ix_unique_key_notes_unique_key_unique_key_name ON unique_key_notes (unique_key_unique_key_name); CREATE INDEX ix_unique_key_notes_notes ON unique_key_notes (notes); +CREATE INDEX ix_unique_key_notes_unique_key_unique_key_name ON unique_key_notes (unique_key_unique_key_name); CREATE TABLE unique_key_comments ( unique_key_unique_key_name TEXT, @@ -6770,8 +6770,8 @@ CREATE TABLE unique_key_mappings ( PRIMARY KEY (unique_key_unique_key_name, mappings), FOREIGN KEY(unique_key_unique_key_name) REFERENCES unique_key (unique_key_name) ); -CREATE INDEX ix_unique_key_mappings_unique_key_unique_key_name ON unique_key_mappings (unique_key_unique_key_name); CREATE INDEX ix_unique_key_mappings_mappings ON unique_key_mappings (mappings); +CREATE INDEX ix_unique_key_mappings_unique_key_unique_key_name ON unique_key_mappings (unique_key_unique_key_name); CREATE TABLE unique_key_exact_mappings ( unique_key_unique_key_name TEXT, @@ -6788,8 +6788,8 @@ CREATE TABLE unique_key_close_mappings ( PRIMARY KEY (unique_key_unique_key_name, close_mappings), FOREIGN KEY(unique_key_unique_key_name) REFERENCES unique_key (unique_key_name) ); -CREATE INDEX ix_unique_key_close_mappings_unique_key_unique_key_name ON unique_key_close_mappings (unique_key_unique_key_name); CREATE INDEX ix_unique_key_close_mappings_close_mappings ON unique_key_close_mappings (close_mappings); +CREATE INDEX ix_unique_key_close_mappings_unique_key_unique_key_name ON unique_key_close_mappings (unique_key_unique_key_name); CREATE TABLE unique_key_related_mappings ( unique_key_unique_key_name TEXT, @@ -6797,8 +6797,8 @@ CREATE TABLE unique_key_related_mappings ( PRIMARY KEY (unique_key_unique_key_name, related_mappings), FOREIGN KEY(unique_key_unique_key_name) REFERENCES unique_key (unique_key_name) ); -CREATE INDEX ix_unique_key_related_mappings_unique_key_unique_key_name ON unique_key_related_mappings (unique_key_unique_key_name); CREATE INDEX ix_unique_key_related_mappings_related_mappings ON unique_key_related_mappings (related_mappings); +CREATE INDEX ix_unique_key_related_mappings_unique_key_unique_key_name ON unique_key_related_mappings (unique_key_unique_key_name); CREATE TABLE unique_key_narrow_mappings ( unique_key_unique_key_name TEXT, @@ -6824,8 +6824,8 @@ CREATE TABLE unique_key_contributors ( PRIMARY KEY (unique_key_unique_key_name, contributors), FOREIGN KEY(unique_key_unique_key_name) REFERENCES unique_key (unique_key_name) ); -CREATE INDEX ix_unique_key_contributors_unique_key_unique_key_name ON unique_key_contributors (unique_key_unique_key_name); CREATE INDEX ix_unique_key_contributors_contributors ON unique_key_contributors (contributors); +CREATE INDEX ix_unique_key_contributors_unique_key_unique_key_name ON unique_key_contributors (unique_key_unique_key_name); CREATE TABLE unique_key_category ( unique_key_unique_key_name TEXT, @@ -6833,8 +6833,8 @@ CREATE TABLE unique_key_category ( PRIMARY KEY (unique_key_unique_key_name, category), FOREIGN KEY(unique_key_unique_key_name) REFERENCES unique_key (unique_key_name) ); -CREATE INDEX ix_unique_key_category_category ON unique_key_category (category); CREATE INDEX ix_unique_key_category_unique_key_unique_key_name ON unique_key_category (unique_key_unique_key_name); +CREATE INDEX ix_unique_key_category_category ON unique_key_category (category); CREATE TABLE unique_key_keyword ( unique_key_unique_key_name TEXT, @@ -6851,8 +6851,8 @@ CREATE TABLE type_mapping_todos ( PRIMARY KEY (type_mapping_framework, todos), FOREIGN KEY(type_mapping_framework) REFERENCES type_mapping (framework) ); -CREATE INDEX ix_type_mapping_todos_type_mapping_framework ON type_mapping_todos (type_mapping_framework); CREATE INDEX ix_type_mapping_todos_todos ON type_mapping_todos (todos); +CREATE INDEX ix_type_mapping_todos_type_mapping_framework ON type_mapping_todos (type_mapping_framework); CREATE TABLE type_mapping_notes ( type_mapping_framework TEXT, @@ -6879,8 +6879,8 @@ CREATE TABLE type_mapping_in_subset ( FOREIGN KEY(type_mapping_framework) REFERENCES type_mapping (framework), FOREIGN KEY(in_subset_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_type_mapping_in_subset_in_subset_name ON type_mapping_in_subset (in_subset_name); CREATE INDEX ix_type_mapping_in_subset_type_mapping_framework ON type_mapping_in_subset (type_mapping_framework); +CREATE INDEX ix_type_mapping_in_subset_in_subset_name ON type_mapping_in_subset (in_subset_name); CREATE TABLE type_mapping_see_also ( type_mapping_framework TEXT, @@ -6942,8 +6942,8 @@ CREATE TABLE type_mapping_narrow_mappings ( PRIMARY KEY (type_mapping_framework, narrow_mappings), FOREIGN KEY(type_mapping_framework) REFERENCES type_mapping (framework) ); -CREATE INDEX ix_type_mapping_narrow_mappings_narrow_mappings ON type_mapping_narrow_mappings (narrow_mappings); CREATE INDEX ix_type_mapping_narrow_mappings_type_mapping_framework ON type_mapping_narrow_mappings (type_mapping_framework); +CREATE INDEX ix_type_mapping_narrow_mappings_narrow_mappings ON type_mapping_narrow_mappings (narrow_mappings); CREATE TABLE type_mapping_broad_mappings ( type_mapping_framework TEXT, @@ -6951,8 +6951,8 @@ CREATE TABLE type_mapping_broad_mappings ( PRIMARY KEY (type_mapping_framework, broad_mappings), FOREIGN KEY(type_mapping_framework) REFERENCES type_mapping (framework) ); -CREATE INDEX ix_type_mapping_broad_mappings_type_mapping_framework ON type_mapping_broad_mappings (type_mapping_framework); CREATE INDEX ix_type_mapping_broad_mappings_broad_mappings ON type_mapping_broad_mappings (broad_mappings); +CREATE INDEX ix_type_mapping_broad_mappings_type_mapping_framework ON type_mapping_broad_mappings (type_mapping_framework); CREATE TABLE type_mapping_contributors ( type_mapping_framework TEXT, @@ -7079,8 +7079,8 @@ CREATE TABLE permissible_value_implements ( PRIMARY KEY (permissible_value_text, implements), FOREIGN KEY(permissible_value_text) REFERENCES permissible_value (text) ); -CREATE INDEX ix_permissible_value_implements_implements ON permissible_value_implements (implements); CREATE INDEX ix_permissible_value_implements_permissible_value_text ON permissible_value_implements (permissible_value_text); +CREATE INDEX ix_permissible_value_implements_implements ON permissible_value_implements (implements); CREATE TABLE permissible_value_mixins ( permissible_value_text TEXT, @@ -7089,8 +7089,8 @@ CREATE TABLE permissible_value_mixins ( FOREIGN KEY(permissible_value_text) REFERENCES permissible_value (text), FOREIGN KEY(mixins_text) REFERENCES permissible_value (text) ); -CREATE INDEX ix_permissible_value_mixins_mixins_text ON permissible_value_mixins (mixins_text); CREATE INDEX ix_permissible_value_mixins_permissible_value_text ON permissible_value_mixins (permissible_value_text); +CREATE INDEX ix_permissible_value_mixins_mixins_text ON permissible_value_mixins (mixins_text); CREATE TABLE permissible_value_todos ( permissible_value_text TEXT, @@ -7107,8 +7107,8 @@ CREATE TABLE permissible_value_notes ( PRIMARY KEY (permissible_value_text, notes), FOREIGN KEY(permissible_value_text) REFERENCES permissible_value (text) ); -CREATE INDEX ix_permissible_value_notes_permissible_value_text ON permissible_value_notes (permissible_value_text); CREATE INDEX ix_permissible_value_notes_notes ON permissible_value_notes (notes); +CREATE INDEX ix_permissible_value_notes_permissible_value_text ON permissible_value_notes (permissible_value_text); CREATE TABLE permissible_value_comments ( permissible_value_text TEXT, @@ -7135,8 +7135,8 @@ CREATE TABLE permissible_value_see_also ( PRIMARY KEY (permissible_value_text, see_also), FOREIGN KEY(permissible_value_text) REFERENCES permissible_value (text) ); -CREATE INDEX ix_permissible_value_see_also_permissible_value_text ON permissible_value_see_also (permissible_value_text); CREATE INDEX ix_permissible_value_see_also_see_also ON permissible_value_see_also (see_also); +CREATE INDEX ix_permissible_value_see_also_permissible_value_text ON permissible_value_see_also (permissible_value_text); CREATE TABLE permissible_value_aliases ( permissible_value_text TEXT, @@ -7162,8 +7162,8 @@ CREATE TABLE permissible_value_exact_mappings ( PRIMARY KEY (permissible_value_text, exact_mappings), FOREIGN KEY(permissible_value_text) REFERENCES permissible_value (text) ); -CREATE INDEX ix_permissible_value_exact_mappings_permissible_value_text ON permissible_value_exact_mappings (permissible_value_text); CREATE INDEX ix_permissible_value_exact_mappings_exact_mappings ON permissible_value_exact_mappings (exact_mappings); +CREATE INDEX ix_permissible_value_exact_mappings_permissible_value_text ON permissible_value_exact_mappings (permissible_value_text); CREATE TABLE permissible_value_close_mappings ( permissible_value_text TEXT, @@ -7171,8 +7171,8 @@ CREATE TABLE permissible_value_close_mappings ( PRIMARY KEY (permissible_value_text, close_mappings), FOREIGN KEY(permissible_value_text) REFERENCES permissible_value (text) ); -CREATE INDEX ix_permissible_value_close_mappings_permissible_value_text ON permissible_value_close_mappings (permissible_value_text); CREATE INDEX ix_permissible_value_close_mappings_close_mappings ON permissible_value_close_mappings (close_mappings); +CREATE INDEX ix_permissible_value_close_mappings_permissible_value_text ON permissible_value_close_mappings (permissible_value_text); CREATE TABLE permissible_value_related_mappings ( permissible_value_text TEXT, @@ -7180,8 +7180,8 @@ CREATE TABLE permissible_value_related_mappings ( PRIMARY KEY (permissible_value_text, related_mappings), FOREIGN KEY(permissible_value_text) REFERENCES permissible_value (text) ); -CREATE INDEX ix_permissible_value_related_mappings_permissible_value_text ON permissible_value_related_mappings (permissible_value_text); CREATE INDEX ix_permissible_value_related_mappings_related_mappings ON permissible_value_related_mappings (related_mappings); +CREATE INDEX ix_permissible_value_related_mappings_permissible_value_text ON permissible_value_related_mappings (permissible_value_text); CREATE TABLE permissible_value_narrow_mappings ( permissible_value_text TEXT, @@ -7198,8 +7198,8 @@ CREATE TABLE permissible_value_broad_mappings ( PRIMARY KEY (permissible_value_text, broad_mappings), FOREIGN KEY(permissible_value_text) REFERENCES permissible_value (text) ); -CREATE INDEX ix_permissible_value_broad_mappings_broad_mappings ON permissible_value_broad_mappings (broad_mappings); CREATE INDEX ix_permissible_value_broad_mappings_permissible_value_text ON permissible_value_broad_mappings (permissible_value_text); +CREATE INDEX ix_permissible_value_broad_mappings_broad_mappings ON permissible_value_broad_mappings (broad_mappings); CREATE TABLE permissible_value_contributors ( permissible_value_text TEXT, @@ -7207,8 +7207,8 @@ CREATE TABLE permissible_value_contributors ( PRIMARY KEY (permissible_value_text, contributors), FOREIGN KEY(permissible_value_text) REFERENCES permissible_value (text) ); -CREATE INDEX ix_permissible_value_contributors_contributors ON permissible_value_contributors (contributors); CREATE INDEX ix_permissible_value_contributors_permissible_value_text ON permissible_value_contributors (permissible_value_text); +CREATE INDEX ix_permissible_value_contributors_contributors ON permissible_value_contributors (contributors); CREATE TABLE permissible_value_category ( permissible_value_text TEXT, @@ -7225,8 +7225,8 @@ CREATE TABLE permissible_value_keyword ( PRIMARY KEY (permissible_value_text, keyword), FOREIGN KEY(permissible_value_text) REFERENCES permissible_value (text) ); -CREATE INDEX ix_permissible_value_keyword_permissible_value_text ON permissible_value_keyword (permissible_value_text); CREATE INDEX ix_permissible_value_keyword_keyword ON permissible_value_keyword (keyword); +CREATE INDEX ix_permissible_value_keyword_permissible_value_text ON permissible_value_keyword (permissible_value_text); CREATE TABLE structured_alias ( id INTEGER NOT NULL, @@ -7312,8 +7312,8 @@ CREATE TABLE enum_binding_notes ( PRIMARY KEY (enum_binding_id, notes), FOREIGN KEY(enum_binding_id) REFERENCES enum_binding (id) ); -CREATE INDEX ix_enum_binding_notes_notes ON enum_binding_notes (notes); CREATE INDEX ix_enum_binding_notes_enum_binding_id ON enum_binding_notes (enum_binding_id); +CREATE INDEX ix_enum_binding_notes_notes ON enum_binding_notes (notes); CREATE TABLE enum_binding_comments ( enum_binding_id INTEGER, @@ -7349,8 +7349,8 @@ CREATE TABLE enum_binding_aliases ( PRIMARY KEY (enum_binding_id, aliases), FOREIGN KEY(enum_binding_id) REFERENCES enum_binding (id) ); -CREATE INDEX ix_enum_binding_aliases_enum_binding_id ON enum_binding_aliases (enum_binding_id); CREATE INDEX ix_enum_binding_aliases_aliases ON enum_binding_aliases (aliases); +CREATE INDEX ix_enum_binding_aliases_enum_binding_id ON enum_binding_aliases (enum_binding_id); CREATE TABLE enum_binding_mappings ( enum_binding_id INTEGER, @@ -7358,8 +7358,8 @@ CREATE TABLE enum_binding_mappings ( PRIMARY KEY (enum_binding_id, mappings), FOREIGN KEY(enum_binding_id) REFERENCES enum_binding (id) ); -CREATE INDEX ix_enum_binding_mappings_enum_binding_id ON enum_binding_mappings (enum_binding_id); CREATE INDEX ix_enum_binding_mappings_mappings ON enum_binding_mappings (mappings); +CREATE INDEX ix_enum_binding_mappings_enum_binding_id ON enum_binding_mappings (enum_binding_id); CREATE TABLE enum_binding_exact_mappings ( enum_binding_id INTEGER, @@ -7376,8 +7376,8 @@ CREATE TABLE enum_binding_close_mappings ( PRIMARY KEY (enum_binding_id, close_mappings), FOREIGN KEY(enum_binding_id) REFERENCES enum_binding (id) ); -CREATE INDEX ix_enum_binding_close_mappings_close_mappings ON enum_binding_close_mappings (close_mappings); CREATE INDEX ix_enum_binding_close_mappings_enum_binding_id ON enum_binding_close_mappings (enum_binding_id); +CREATE INDEX ix_enum_binding_close_mappings_close_mappings ON enum_binding_close_mappings (close_mappings); CREATE TABLE enum_binding_related_mappings ( enum_binding_id INTEGER, @@ -7385,8 +7385,8 @@ CREATE TABLE enum_binding_related_mappings ( PRIMARY KEY (enum_binding_id, related_mappings), FOREIGN KEY(enum_binding_id) REFERENCES enum_binding (id) ); -CREATE INDEX ix_enum_binding_related_mappings_related_mappings ON enum_binding_related_mappings (related_mappings); CREATE INDEX ix_enum_binding_related_mappings_enum_binding_id ON enum_binding_related_mappings (enum_binding_id); +CREATE INDEX ix_enum_binding_related_mappings_related_mappings ON enum_binding_related_mappings (related_mappings); CREATE TABLE enum_binding_narrow_mappings ( enum_binding_id INTEGER, @@ -7403,8 +7403,8 @@ CREATE TABLE enum_binding_broad_mappings ( PRIMARY KEY (enum_binding_id, broad_mappings), FOREIGN KEY(enum_binding_id) REFERENCES enum_binding (id) ); -CREATE INDEX ix_enum_binding_broad_mappings_enum_binding_id ON enum_binding_broad_mappings (enum_binding_id); CREATE INDEX ix_enum_binding_broad_mappings_broad_mappings ON enum_binding_broad_mappings (broad_mappings); +CREATE INDEX ix_enum_binding_broad_mappings_enum_binding_id ON enum_binding_broad_mappings (enum_binding_id); CREATE TABLE enum_binding_contributors ( enum_binding_id INTEGER, @@ -7412,8 +7412,8 @@ CREATE TABLE enum_binding_contributors ( PRIMARY KEY (enum_binding_id, contributors), FOREIGN KEY(enum_binding_id) REFERENCES enum_binding (id) ); -CREATE INDEX ix_enum_binding_contributors_enum_binding_id ON enum_binding_contributors (enum_binding_id); CREATE INDEX ix_enum_binding_contributors_contributors ON enum_binding_contributors (contributors); +CREATE INDEX ix_enum_binding_contributors_enum_binding_id ON enum_binding_contributors (enum_binding_id); CREATE TABLE enum_binding_category ( enum_binding_id INTEGER, @@ -7563,54 +7563,54 @@ CREATE TABLE alt_description ( FOREIGN KEY(unique_key_unique_key_name) REFERENCES unique_key (unique_key_name), FOREIGN KEY(type_mapping_framework) REFERENCES type_mapping (framework) ); +CREATE INDEX ix_alt_description_slot_definition_name ON alt_description (slot_definition_name); +CREATE INDEX alt_description_schema_definition_name_source_idx ON alt_description (schema_definition_name, source); +CREATE INDEX alt_description_type_definition_name_source_idx ON alt_description (type_definition_name, source); +CREATE INDEX alt_description_pattern_expression_id_source_idx ON alt_description (pattern_expression_id, source); +CREATE INDEX alt_description_subset_definition_name_source_idx ON alt_description (subset_definition_name, source); CREATE INDEX alt_description_structured_alias_id_source_idx ON alt_description (structured_alias_id, source); CREATE INDEX ix_alt_description_subset_definition_name ON alt_description (subset_definition_name); +CREATE INDEX ix_alt_description_pattern_expression_id ON alt_description (pattern_expression_id); CREATE INDEX ix_alt_description_anonymous_slot_expression_id ON alt_description (anonymous_slot_expression_id); CREATE INDEX ix_alt_description_description ON alt_description (description); -CREATE INDEX ix_alt_description_dimension_expression_id ON alt_description (dimension_expression_id); CREATE INDEX alt_description_class_rule_id_source_idx ON alt_description (class_rule_id, source); -CREATE INDEX ix_alt_description_path_expression_id ON alt_description (path_expression_id); CREATE INDEX ix_alt_description_type_definition_name ON alt_description (type_definition_name); +CREATE INDEX ix_alt_description_path_expression_id ON alt_description (path_expression_id); CREATE INDEX alt_description_definition_name_source_idx ON alt_description (definition_name, source); +CREATE INDEX alt_description_anonymous_slot_expression_id_source_idx ON alt_description (anonymous_slot_expression_id, source); +CREATE INDEX ix_alt_description_dimension_expression_id ON alt_description (dimension_expression_id); CREATE INDEX alt_description_slot_definition_name_source_idx ON alt_description (slot_definition_name, source); CREATE INDEX alt_description_type_mapping_framework_source_idx ON alt_description (type_mapping_framework, source); -CREATE INDEX ix_alt_description_array_expression_id ON alt_description (array_expression_id); -CREATE INDEX alt_description_pattern_expression_id_source_idx ON alt_description (pattern_expression_id, source); +CREATE INDEX alt_description_unique_key_unique_key_name_source_idx ON alt_description (unique_key_unique_key_name, source); CREATE INDEX ix_alt_description_enum_definition_name ON alt_description (enum_definition_name); -CREATE INDEX ix_alt_description_anonymous_expression_id ON alt_description (anonymous_expression_id); CREATE INDEX alt_description_anonymous_expression_id_source_idx ON alt_description (anonymous_expression_id, source); CREATE INDEX alt_description_import_expression_id_source_idx ON alt_description (import_expression_id, source); CREATE INDEX ix_alt_description_schema_definition_name ON alt_description (schema_definition_name); -CREATE INDEX ix_alt_description_type_mapping_framework ON alt_description (type_mapping_framework); +CREATE INDEX ix_alt_description_anonymous_expression_id ON alt_description (anonymous_expression_id); +CREATE INDEX ix_alt_description_array_expression_id ON alt_description (array_expression_id); CREATE INDEX ix_alt_description_element_name ON alt_description (element_name); -CREATE INDEX ix_alt_description_class_rule_id ON alt_description (class_rule_id); CREATE INDEX alt_description_array_expression_id_source_idx ON alt_description (array_expression_id, source); -CREATE INDEX ix_alt_description_structured_alias_id ON alt_description (structured_alias_id); +CREATE INDEX ix_alt_description_type_mapping_framework ON alt_description (type_mapping_framework); +CREATE INDEX ix_alt_description_class_rule_id ON alt_description (class_rule_id); +CREATE INDEX alt_description_enum_definition_name_source_idx ON alt_description (enum_definition_name, source); CREATE INDEX ix_alt_description_source ON alt_description (source); -CREATE INDEX ix_alt_description_unique_key_unique_key_name ON alt_description (unique_key_unique_key_name); +CREATE INDEX ix_alt_description_structured_alias_id ON alt_description (structured_alias_id); CREATE INDEX alt_description_common_metadata_id_source_idx ON alt_description (common_metadata_id, source); -CREATE INDEX alt_description_enum_definition_name_source_idx ON alt_description (enum_definition_name, source); CREATE INDEX alt_description_anonymous_class_expression_id_source_idx ON alt_description (anonymous_class_expression_id, source); +CREATE INDEX ix_alt_description_unique_key_unique_key_name ON alt_description (unique_key_unique_key_name); +CREATE INDEX alt_description_permissible_value_text_source_idx ON alt_description (permissible_value_text, source); CREATE INDEX ix_alt_description_common_metadata_id ON alt_description (common_metadata_id); CREATE INDEX ix_alt_description_enum_binding_id ON alt_description (enum_binding_id); -CREATE INDEX ix_alt_description_class_definition_name ON alt_description (class_definition_name); -CREATE INDEX alt_description_permissible_value_text_source_idx ON alt_description (permissible_value_text, source); CREATE INDEX alt_description_path_expression_id_source_idx ON alt_description (path_expression_id, source); -CREATE INDEX ix_alt_description_permissible_value_text ON alt_description (permissible_value_text); +CREATE INDEX ix_alt_description_class_definition_name ON alt_description (class_definition_name); CREATE INDEX alt_description_dimension_expression_id_source_idx ON alt_description (dimension_expression_id, source); -CREATE INDEX ix_alt_description_anonymous_class_expression_id ON alt_description (anonymous_class_expression_id); +CREATE INDEX ix_alt_description_permissible_value_text ON alt_description (permissible_value_text); CREATE INDEX alt_description_enum_binding_id_source_idx ON alt_description (enum_binding_id, source); -CREATE INDEX ix_alt_description_import_expression_id ON alt_description (import_expression_id); +CREATE INDEX ix_alt_description_anonymous_class_expression_id ON alt_description (anonymous_class_expression_id); CREATE INDEX alt_description_element_name_source_idx ON alt_description (element_name, source); CREATE INDEX alt_description_class_definition_name_source_idx ON alt_description (class_definition_name, source); -CREATE INDEX alt_description_schema_definition_name_source_idx ON alt_description (schema_definition_name, source); +CREATE INDEX ix_alt_description_import_expression_id ON alt_description (import_expression_id); CREATE INDEX ix_alt_description_definition_name ON alt_description (definition_name); -CREATE INDEX ix_alt_description_slot_definition_name ON alt_description (slot_definition_name); -CREATE INDEX alt_description_anonymous_slot_expression_id_source_idx ON alt_description (anonymous_slot_expression_id, source); -CREATE INDEX alt_description_unique_key_unique_key_name_source_idx ON alt_description (unique_key_unique_key_name, source); -CREATE INDEX alt_description_type_definition_name_source_idx ON alt_description (type_definition_name, source); -CREATE INDEX ix_alt_description_pattern_expression_id ON alt_description (pattern_expression_id); -CREATE INDEX alt_description_subset_definition_name_source_idx ON alt_description (subset_definition_name, source); CREATE TABLE annotation ( tag TEXT NOT NULL, @@ -7690,56 +7690,56 @@ CREATE TABLE annotation ( FOREIGN KEY(annotation_tag) REFERENCES annotation (tag), FOREIGN KEY(value_id) REFERENCES "AnyValue" (id) ); -CREATE INDEX ix_annotation_element_name ON annotation (element_name); -CREATE INDEX ix_annotation_type_mapping_framework ON annotation (type_mapping_framework); +CREATE INDEX ix_annotation_value_id ON annotation (value_id); +CREATE INDEX annotation_type_definition_name_tag_idx ON annotation (type_definition_name, tag); +CREATE INDEX ix_annotation_anonymous_expression_id ON annotation (anonymous_expression_id); +CREATE INDEX annotation_annotatable_id_tag_idx ON annotation (annotatable_id, tag); +CREATE INDEX annotation_subset_definition_name_tag_idx ON annotation (subset_definition_name, tag); +CREATE INDEX annotation_anonymous_expression_id_tag_idx ON annotation (anonymous_expression_id, tag); +CREATE INDEX annotation_array_expression_id_tag_idx ON annotation (array_expression_id, tag); +CREATE INDEX ix_annotation_array_expression_id ON annotation (array_expression_id); +CREATE INDEX ix_annotation_annotation_tag ON annotation (annotation_tag); +CREATE INDEX annotation_definition_name_tag_idx ON annotation (definition_name, tag); +CREATE INDEX ix_annotation_class_rule_id ON annotation (class_rule_id); +CREATE INDEX ix_annotation_annotatable_id ON annotation (annotatable_id); CREATE INDEX annotation_enum_definition_name_tag_idx ON annotation (enum_definition_name, tag); CREATE INDEX annotation_anonymous_class_expression_id_tag_idx ON annotation (anonymous_class_expression_id, tag); -CREATE INDEX ix_annotation_enum_binding_id ON annotation (enum_binding_id); CREATE INDEX annotation_permissible_value_text_tag_idx ON annotation (permissible_value_text, tag); -CREATE INDEX ix_annotation_class_definition_name ON annotation (class_definition_name); -CREATE INDEX annotation_definition_name_tag_idx ON annotation (definition_name, tag); -CREATE INDEX ix_annotation_unique_key_unique_key_name ON annotation (unique_key_unique_key_name); +CREATE INDEX ix_annotation_element_name ON annotation (element_name); +CREATE INDEX ix_annotation_enum_binding_id ON annotation (enum_binding_id); +CREATE INDEX ix_annotation_type_mapping_framework ON annotation (type_mapping_framework); +CREATE INDEX annotation_schema_definition_name_tag_idx ON annotation (schema_definition_name, tag); CREATE INDEX annotation_annotation_tag_tag_idx ON annotation (annotation_tag, tag); -CREATE INDEX ix_annotation_enum_definition_name ON annotation (enum_definition_name); +CREATE INDEX ix_annotation_class_definition_name ON annotation (class_definition_name); CREATE INDEX annotation_path_expression_id_tag_idx ON annotation (path_expression_id, tag); CREATE INDEX annotation_dimension_expression_id_tag_idx ON annotation (dimension_expression_id, tag); -CREATE INDEX ix_annotation_anonymous_class_expression_id ON annotation (anonymous_class_expression_id); -CREATE INDEX ix_annotation_permissible_value_text ON annotation (permissible_value_text); +CREATE INDEX ix_annotation_unique_key_unique_key_name ON annotation (unique_key_unique_key_name); +CREATE INDEX ix_annotation_enum_definition_name ON annotation (enum_definition_name); CREATE INDEX annotation_unique_key_unique_key_name_tag_idx ON annotation (unique_key_unique_key_name, tag); -CREATE INDEX ix_annotation_definition_name ON annotation (definition_name); +CREATE INDEX ix_annotation_anonymous_class_expression_id ON annotation (anonymous_class_expression_id); CREATE INDEX annotation_enum_binding_id_tag_idx ON annotation (enum_binding_id, tag); CREATE INDEX annotation_class_definition_name_tag_idx ON annotation (class_definition_name, tag); +CREATE INDEX ix_annotation_definition_name ON annotation (definition_name); +CREATE INDEX ix_annotation_permissible_value_text ON annotation (permissible_value_text); CREATE INDEX ix_annotation_tag ON annotation (tag); CREATE INDEX ix_annotation_slot_definition_name ON annotation (slot_definition_name); -CREATE INDEX ix_annotation_import_expression_id ON annotation (import_expression_id); CREATE INDEX annotation_element_name_tag_idx ON annotation (element_name, tag); -CREATE INDEX ix_annotation_structured_alias_id ON annotation (structured_alias_id); CREATE INDEX annotation_anonymous_slot_expression_id_tag_idx ON annotation (anonymous_slot_expression_id, tag); CREATE INDEX annotation_pattern_expression_id_tag_idx ON annotation (pattern_expression_id, tag); +CREATE INDEX ix_annotation_structured_alias_id ON annotation (structured_alias_id); +CREATE INDEX ix_annotation_dimension_expression_id ON annotation (dimension_expression_id); CREATE INDEX ix_annotation_subset_definition_name ON annotation (subset_definition_name); -CREATE INDEX ix_annotation_anonymous_slot_expression_id ON annotation (anonymous_slot_expression_id); -CREATE INDEX ix_annotation_pattern_expression_id ON annotation (pattern_expression_id); -CREATE INDEX ix_annotation_type_definition_name ON annotation (type_definition_name); +CREATE INDEX ix_annotation_import_expression_id ON annotation (import_expression_id); CREATE INDEX annotation_type_mapping_framework_tag_idx ON annotation (type_mapping_framework, tag); +CREATE INDEX ix_annotation_type_definition_name ON annotation (type_definition_name); +CREATE INDEX ix_annotation_anonymous_slot_expression_id ON annotation (anonymous_slot_expression_id); CREATE INDEX annotation_structured_alias_id_tag_idx ON annotation (structured_alias_id, tag); CREATE INDEX annotation_class_rule_id_tag_idx ON annotation (class_rule_id, tag); +CREATE INDEX ix_annotation_pattern_expression_id ON annotation (pattern_expression_id); CREATE INDEX ix_annotation_path_expression_id ON annotation (path_expression_id); -CREATE INDEX ix_annotation_dimension_expression_id ON annotation (dimension_expression_id); -CREATE INDEX ix_annotation_schema_definition_name ON annotation (schema_definition_name); -CREATE INDEX annotation_anonymous_expression_id_tag_idx ON annotation (anonymous_expression_id, tag); -CREATE INDEX ix_annotation_value_id ON annotation (value_id); -CREATE INDEX annotation_schema_definition_name_tag_idx ON annotation (schema_definition_name, tag); CREATE INDEX annotation_slot_definition_name_tag_idx ON annotation (slot_definition_name, tag); CREATE INDEX annotation_import_expression_id_tag_idx ON annotation (import_expression_id, tag); -CREATE INDEX ix_annotation_anonymous_expression_id ON annotation (anonymous_expression_id); -CREATE INDEX annotation_array_expression_id_tag_idx ON annotation (array_expression_id, tag); -CREATE INDEX annotation_type_definition_name_tag_idx ON annotation (type_definition_name, tag); -CREATE INDEX ix_annotation_array_expression_id ON annotation (array_expression_id); -CREATE INDEX ix_annotation_annotation_tag ON annotation (annotation_tag); -CREATE INDEX annotation_subset_definition_name_tag_idx ON annotation (subset_definition_name, tag); -CREATE INDEX annotation_annotatable_id_tag_idx ON annotation (annotatable_id, tag); -CREATE INDEX ix_annotation_annotatable_id ON annotation (annotatable_id); -CREATE INDEX ix_annotation_class_rule_id ON annotation (class_rule_id); +CREATE INDEX ix_annotation_schema_definition_name ON annotation (schema_definition_name); CREATE TABLE structured_alias_category ( structured_alias_id INTEGER, @@ -7756,8 +7756,8 @@ CREATE TABLE structured_alias_contexts ( PRIMARY KEY (structured_alias_id, contexts), FOREIGN KEY(structured_alias_id) REFERENCES structured_alias (id) ); -CREATE INDEX ix_structured_alias_contexts_contexts ON structured_alias_contexts (contexts); CREATE INDEX ix_structured_alias_contexts_structured_alias_id ON structured_alias_contexts (structured_alias_id); +CREATE INDEX ix_structured_alias_contexts_contexts ON structured_alias_contexts (contexts); CREATE TABLE structured_alias_todos ( structured_alias_id INTEGER, @@ -7765,8 +7765,8 @@ CREATE TABLE structured_alias_todos ( PRIMARY KEY (structured_alias_id, todos), FOREIGN KEY(structured_alias_id) REFERENCES structured_alias (id) ); -CREATE INDEX ix_structured_alias_todos_todos ON structured_alias_todos (todos); CREATE INDEX ix_structured_alias_todos_structured_alias_id ON structured_alias_todos (structured_alias_id); +CREATE INDEX ix_structured_alias_todos_todos ON structured_alias_todos (todos); CREATE TABLE structured_alias_notes ( structured_alias_id INTEGER, @@ -7793,8 +7793,8 @@ CREATE TABLE structured_alias_in_subset ( FOREIGN KEY(structured_alias_id) REFERENCES structured_alias (id), FOREIGN KEY(in_subset_name) REFERENCES subset_definition (name) ); -CREATE INDEX ix_structured_alias_in_subset_in_subset_name ON structured_alias_in_subset (in_subset_name); CREATE INDEX ix_structured_alias_in_subset_structured_alias_id ON structured_alias_in_subset (structured_alias_id); +CREATE INDEX ix_structured_alias_in_subset_in_subset_name ON structured_alias_in_subset (in_subset_name); CREATE TABLE structured_alias_see_also ( structured_alias_id INTEGER, @@ -7811,8 +7811,8 @@ CREATE TABLE structured_alias_aliases ( PRIMARY KEY (structured_alias_id, aliases), FOREIGN KEY(structured_alias_id) REFERENCES structured_alias (id) ); -CREATE INDEX ix_structured_alias_aliases_aliases ON structured_alias_aliases (aliases); CREATE INDEX ix_structured_alias_aliases_structured_alias_id ON structured_alias_aliases (structured_alias_id); +CREATE INDEX ix_structured_alias_aliases_aliases ON structured_alias_aliases (aliases); CREATE TABLE structured_alias_mappings ( structured_alias_id INTEGER, @@ -7829,8 +7829,8 @@ CREATE TABLE structured_alias_exact_mappings ( PRIMARY KEY (structured_alias_id, exact_mappings), FOREIGN KEY(structured_alias_id) REFERENCES structured_alias (id) ); -CREATE INDEX ix_structured_alias_exact_mappings_structured_alias_id ON structured_alias_exact_mappings (structured_alias_id); CREATE INDEX ix_structured_alias_exact_mappings_exact_mappings ON structured_alias_exact_mappings (exact_mappings); +CREATE INDEX ix_structured_alias_exact_mappings_structured_alias_id ON structured_alias_exact_mappings (structured_alias_id); CREATE TABLE structured_alias_close_mappings ( structured_alias_id INTEGER, @@ -7838,8 +7838,8 @@ CREATE TABLE structured_alias_close_mappings ( PRIMARY KEY (structured_alias_id, close_mappings), FOREIGN KEY(structured_alias_id) REFERENCES structured_alias (id) ); -CREATE INDEX ix_structured_alias_close_mappings_structured_alias_id ON structured_alias_close_mappings (structured_alias_id); CREATE INDEX ix_structured_alias_close_mappings_close_mappings ON structured_alias_close_mappings (close_mappings); +CREATE INDEX ix_structured_alias_close_mappings_structured_alias_id ON structured_alias_close_mappings (structured_alias_id); CREATE TABLE structured_alias_related_mappings ( structured_alias_id INTEGER, @@ -7856,8 +7856,8 @@ CREATE TABLE structured_alias_narrow_mappings ( PRIMARY KEY (structured_alias_id, narrow_mappings), FOREIGN KEY(structured_alias_id) REFERENCES structured_alias (id) ); -CREATE INDEX ix_structured_alias_narrow_mappings_narrow_mappings ON structured_alias_narrow_mappings (narrow_mappings); CREATE INDEX ix_structured_alias_narrow_mappings_structured_alias_id ON structured_alias_narrow_mappings (structured_alias_id); +CREATE INDEX ix_structured_alias_narrow_mappings_narrow_mappings ON structured_alias_narrow_mappings (narrow_mappings); CREATE TABLE structured_alias_broad_mappings ( structured_alias_id INTEGER, @@ -7865,8 +7865,8 @@ CREATE TABLE structured_alias_broad_mappings ( PRIMARY KEY (structured_alias_id, broad_mappings), FOREIGN KEY(structured_alias_id) REFERENCES structured_alias (id) ); -CREATE INDEX ix_structured_alias_broad_mappings_broad_mappings ON structured_alias_broad_mappings (broad_mappings); CREATE INDEX ix_structured_alias_broad_mappings_structured_alias_id ON structured_alias_broad_mappings (structured_alias_id); +CREATE INDEX ix_structured_alias_broad_mappings_broad_mappings ON structured_alias_broad_mappings (broad_mappings); CREATE TABLE structured_alias_contributors ( structured_alias_id INTEGER, @@ -7967,55 +7967,55 @@ CREATE TABLE extension ( FOREIGN KEY(annotation_tag) REFERENCES annotation (tag), FOREIGN KEY(value_id) REFERENCES "AnyValue" (id) ); +CREATE INDEX ix_extension_definition_name ON extension (definition_name); +CREATE INDEX extension_import_expression_id_tag_idx ON extension (import_expression_id, tag); +CREATE INDEX extension_slot_definition_name_tag_idx ON extension (slot_definition_name, tag); +CREATE INDEX extension_definition_name_tag_idx ON extension (definition_name, tag); +CREATE INDEX ix_extension_structured_alias_id ON extension (structured_alias_id); +CREATE INDEX ix_extension_anonymous_slot_expression_id ON extension (anonymous_slot_expression_id); +CREATE INDEX ix_extension_pattern_expression_id ON extension (pattern_expression_id); +CREATE INDEX ix_extension_subset_definition_name ON extension (subset_definition_name); +CREATE INDEX extension_extension_tag_tag_idx ON extension (extension_tag, tag); +CREATE INDEX ix_extension_type_definition_name ON extension (type_definition_name); CREATE INDEX extension_element_name_tag_idx ON extension (element_name, tag); CREATE INDEX extension_anonymous_expression_id_tag_idx ON extension (anonymous_expression_id, tag); +CREATE INDEX extension_array_expression_id_tag_idx ON extension (array_expression_id, tag); CREATE INDEX ix_extension_path_expression_id ON extension (path_expression_id); CREATE INDEX ix_extension_dimension_expression_id ON extension (dimension_expression_id); CREATE INDEX ix_extension_value_id ON extension (value_id); +CREATE INDEX extension_permissible_value_text_tag_idx ON extension (permissible_value_text, tag); CREATE INDEX ix_extension_schema_definition_name ON extension (schema_definition_name); CREATE INDEX ix_extension_annotation_tag ON extension (annotation_tag); -CREATE INDEX extension_anonymous_class_expression_id_tag_idx ON extension (anonymous_class_expression_id, tag); -CREATE INDEX extension_permissible_value_text_tag_idx ON extension (permissible_value_text, tag); -CREATE INDEX ix_extension_extensible_id ON extension (extensible_id); CREATE INDEX extension_enum_definition_name_tag_idx ON extension (enum_definition_name, tag); -CREATE INDEX extension_extension_tag_tag_idx ON extension (extension_tag, tag); +CREATE INDEX extension_anonymous_class_expression_id_tag_idx ON extension (anonymous_class_expression_id, tag); CREATE INDEX ix_extension_anonymous_expression_id ON extension (anonymous_expression_id); +CREATE INDEX ix_extension_extensible_id ON extension (extensible_id); CREATE INDEX ix_extension_array_expression_id ON extension (array_expression_id); -CREATE INDEX ix_extension_extension_tag ON extension (extension_tag); -CREATE INDEX extension_dimension_expression_id_tag_idx ON extension (dimension_expression_id, tag); CREATE INDEX extension_extensible_id_tag_idx ON extension (extensible_id, tag); +CREATE INDEX ix_extension_extension_tag ON extension (extension_tag); CREATE INDEX extension_path_expression_id_tag_idx ON extension (path_expression_id, tag); +CREATE INDEX extension_dimension_expression_id_tag_idx ON extension (dimension_expression_id, tag); CREATE INDEX ix_extension_element_name ON extension (element_name); CREATE INDEX ix_extension_class_rule_id ON extension (class_rule_id); CREATE INDEX ix_extension_type_mapping_framework ON extension (type_mapping_framework); CREATE INDEX extension_schema_definition_name_tag_idx ON extension (schema_definition_name, tag); -CREATE INDEX extension_class_definition_name_tag_idx ON extension (class_definition_name, tag); CREATE INDEX extension_unique_key_unique_key_name_tag_idx ON extension (unique_key_unique_key_name, tag); +CREATE INDEX ix_extension_import_expression_id ON extension (import_expression_id); CREATE INDEX extension_enum_binding_id_tag_idx ON extension (enum_binding_id, tag); -CREATE INDEX ix_extension_class_definition_name ON extension (class_definition_name); +CREATE INDEX extension_class_definition_name_tag_idx ON extension (class_definition_name, tag); CREATE INDEX ix_extension_unique_key_unique_key_name ON extension (unique_key_unique_key_name); -CREATE INDEX ix_extension_enum_binding_id ON extension (enum_binding_id); -CREATE INDEX extension_pattern_expression_id_tag_idx ON extension (pattern_expression_id, tag); +CREATE INDEX ix_extension_class_definition_name ON extension (class_definition_name); CREATE INDEX extension_annotation_tag_tag_idx ON extension (annotation_tag, tag); +CREATE INDEX ix_extension_enum_binding_id ON extension (enum_binding_id); CREATE INDEX extension_anonymous_slot_expression_id_tag_idx ON extension (anonymous_slot_expression_id, tag); +CREATE INDEX extension_pattern_expression_id_tag_idx ON extension (pattern_expression_id, tag); CREATE INDEX ix_extension_permissible_value_text ON extension (permissible_value_text); -CREATE INDEX ix_extension_enum_definition_name ON extension (enum_definition_name); CREATE INDEX ix_extension_anonymous_class_expression_id ON extension (anonymous_class_expression_id); CREATE INDEX extension_type_definition_name_tag_idx ON extension (type_definition_name, tag); -CREATE INDEX extension_class_rule_id_tag_idx ON extension (class_rule_id, tag); +CREATE INDEX ix_extension_enum_definition_name ON extension (enum_definition_name); CREATE INDEX extension_type_mapping_framework_tag_idx ON extension (type_mapping_framework, tag); -CREATE INDEX ix_extension_import_expression_id ON extension (import_expression_id); CREATE INDEX extension_subset_definition_name_tag_idx ON extension (subset_definition_name, tag); CREATE INDEX extension_structured_alias_id_tag_idx ON extension (structured_alias_id, tag); +CREATE INDEX extension_class_rule_id_tag_idx ON extension (class_rule_id, tag); CREATE INDEX ix_extension_tag ON extension (tag); CREATE INDEX ix_extension_slot_definition_name ON extension (slot_definition_name); -CREATE INDEX ix_extension_definition_name ON extension (definition_name); -CREATE INDEX extension_import_expression_id_tag_idx ON extension (import_expression_id, tag); -CREATE INDEX extension_slot_definition_name_tag_idx ON extension (slot_definition_name, tag); -CREATE INDEX extension_array_expression_id_tag_idx ON extension (array_expression_id, tag); -CREATE INDEX ix_extension_structured_alias_id ON extension (structured_alias_id); -CREATE INDEX ix_extension_pattern_expression_id ON extension (pattern_expression_id); -CREATE INDEX ix_extension_subset_definition_name ON extension (subset_definition_name); -CREATE INDEX ix_extension_anonymous_slot_expression_id ON extension (anonymous_slot_expression_id); -CREATE INDEX extension_definition_name_tag_idx ON extension (definition_name, tag); -CREATE INDEX ix_extension_type_definition_name ON extension (type_definition_name); diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/types.py b/packages/linkml_runtime/src/linkml_runtime/linkml_model/types.py index 3bb2141d02..dd69c9236a 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/types.py +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/types.py @@ -1,5 +1,5 @@ # Auto generated from types.yaml by pythongen.py version: 0.0.1 -# Generation date: 2026-05-05T18:49:15 +# Generation date: 2026-08-12T09:42:14 # Schema: types # # id: https://w3id.org/linkml/types @@ -22,7 +22,7 @@ XSDTime, ) -metamodel_version = "1.7.0" +metamodel_version = "1.11.0" version = None # Namespaces diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/units.py b/packages/linkml_runtime/src/linkml_runtime/linkml_model/units.py index 086c2461fd..7377ee550b 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/units.py +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/units.py @@ -1,5 +1,5 @@ # Auto generated from units.yaml by pythongen.py version: 0.0.1 -# Generation date: 2026-05-05T18:49:15 +# Generation date: 2026-08-12T09:42:15 # Schema: units # # id: https://w3id.org/linkml/units @@ -16,7 +16,7 @@ from linkml_runtime.utils.slot import Slot from linkml_runtime.utils.yamlutils import YAMLRoot -metamodel_version = "1.7.0" +metamodel_version = "1.11.0" version = None # Namespaces diff --git a/packages/linkml_runtime/src/linkml_runtime/linkml_model/validation.py b/packages/linkml_runtime/src/linkml_runtime/linkml_model/validation.py index 83caf3e9cc..e23f3191fa 100644 --- a/packages/linkml_runtime/src/linkml_runtime/linkml_model/validation.py +++ b/packages/linkml_runtime/src/linkml_runtime/linkml_model/validation.py @@ -1,5 +1,5 @@ # Auto generated from validation.yaml by pythongen.py version: 0.0.1 -# Generation date: 2026-05-05T18:49:16 +# Generation date: 2026-08-12T09:42:17 # Schema: reporting # # id: https://w3id.org/linkml/reporting @@ -18,7 +18,7 @@ from linkml_runtime.utils.slot import Slot from linkml_runtime.utils.yamlutils import YAMLRoot -metamodel_version = "1.7.0" +metamodel_version = "1.11.0" version = None # Namespaces diff --git a/pyproject.toml b/pyproject.toml index ad57aad34c..ff1036d98c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -82,6 +82,7 @@ filterwarnings = [ ] markers = [ "network: mark tests that make external network requests", + "upstream_main: soft-fail tests that compare vendored files against linkml-model main branch", "slow: mark test as slow to run", "no_asserts: tests that don't have meaningful asserts, but are only snapshot comparisons, or historically had print statements, or other non-erroring behavior", "strcmp: tests that compare stringified values rather than the values themselves", diff --git a/tests/conftest.py b/tests/conftest.py index 18fba769ea..7f591a91ed 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -246,6 +246,7 @@ def pytest_addoption(parser): ) parser.addoption("--with-slow", action="store_true", help="include tests marked slow") parser.addoption("--with-network", action="store_true", help="include tests marked network") + parser.addoption("--with-upstream-main", action="store_true", help="include tests marked upstream_main") parser.addoption( "--with-output", action="store_true", help="dump output in compliance test for richer debugging information" ) @@ -283,6 +284,12 @@ def pytest_collection_modifyitems(config, items: list[pytest.Item]): if item.get_closest_marker("network"): item.add_marker(skip_network) + if not config.getoption("--with-upstream-main"): + skip_upstream_main = pytest.mark.skip(reason="need --with-upstream-main option to run") + for item in items: + if item.get_closest_marker("upstream_main"): + item.add_marker(skip_upstream_main) + # Group compliance tests on a single xdist worker - they share # mutable module-level caches in helper.py that are not safe to split. for item in items: diff --git a/tests/linkml/test_base/__snapshots__/meta.json b/tests/linkml/test_base/__snapshots__/meta.json index f815db6f84..8381abdbae 100644 --- a/tests/linkml/test_base/__snapshots__/meta.json +++ b/tests/linkml/test_base/__snapshots__/meta.json @@ -2967,7 +2967,7 @@ { "name": "unique_keys", "definition_uri": "https://w3id.org/linkml/unique_keys", - "description": "A collection of named unique keys for this class. Such unique keys may be spread over several slots, which is why there are also called \"compound keys\". A unique key uniquely identifies instances of the class within a given container, meaning there cannot be two (or more) instances of the class with the same values for all the slots that make up the unique key.", + "description": "A collection of named unique keys for this class. Such unique keys may be spread over several slots, which is why they are also called \"compound keys\". A unique key uniquely identifies instances of the class within a given container, meaning there cannot be two (or more) instances of the class with the same values for all the slots that make up the unique key.", "comments": [ "Not to be confused with a \"singular unique key\", which is defined by means of the `key` slot, or with an \"identifier\", which is defined by means of the \"identifier\" slot. Compound keys, singular unique keys, and identifiers all create a unicity constraint, but singular unique keys and identifiers have additional effects that compound keys do not have.\n" ], diff --git a/tests/linkml/test_base/__snapshots__/meta.owl b/tests/linkml/test_base/__snapshots__/meta.owl index 565b265588..4bb91f12de 100644 --- a/tests/linkml/test_base/__snapshots__/meta.owl +++ b/tests/linkml/test_base/__snapshots__/meta.owl @@ -155,15 +155,6 @@ linkml:DimensionExpression a owl:Class, rdfs:label "dimension_expression" ; bibo:status ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:alias ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:exact_cardinality ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:exact_cardinality ], - [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:maximum_cardinality ], [ a owl:Restriction ; @@ -173,23 +164,32 @@ linkml:DimensionExpression a owl:Class, owl:allValuesFrom linkml:Integer ; owl:onProperty linkml:maximum_cardinality ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:alias ], + owl:minCardinality 0 ; + owl:onProperty linkml:minimum_cardinality ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:String ; owl:onProperty linkml:alias ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:minimum_cardinality ], + owl:onProperty linkml:exact_cardinality ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:exact_cardinality ], + owl:onProperty linkml:alias ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:minimum_cardinality ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; owl:onProperty linkml:minimum_cardinality ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:exact_cardinality ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty linkml:exact_cardinality ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:alias ], linkml:Annotatable, linkml:CommonMetadata, linkml:Extensible ; @@ -200,23 +200,23 @@ linkml:ExtraSlotsExpression a owl:Class, linkml:ClassDefinition ; rdfs:label "extra_slots_expression" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:allowed ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:range_expression ], - [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:range_expression ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:allowed ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:AnonymousSlotExpression ; + owl:onProperty linkml:range_expression ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:range_expression ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:allowed ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousSlotExpression ; - owl:onProperty linkml:range_expression ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:allowed ], linkml:Expression ; skos:definition """An expression that defines how to handle additional data in an instance of class beyond the slots/attributes defined for that class. @@ -317,25 +317,25 @@ linkml:TypeMapping a owl:Class, rdfs:label "type_mapping" ; rdfs:subClassOf [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:string_serialization ], + owl:onProperty linkml:mapped_type ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:string_serialization ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; owl:onProperty linkml:framework_key ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:framework_key ], + owl:allValuesFrom linkml:TypeDefinition ; + owl:onProperty linkml:mapped_type ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:mapped_type ], [ a owl:Restriction ; - owl:allValuesFrom linkml:TypeDefinition ; - owl:onProperty linkml:mapped_type ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:string_serialization ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:mapped_type ], + owl:onProperty linkml:string_serialization ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:framework_key ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:string_serialization ], @@ -777,47 +777,47 @@ linkml:ClassExpression a owl:Class, linkml:ClassDefinition ; rdfs:label "class_expression" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:all_of ], - [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:exactly_one_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousClassExpression ; - owl:onProperty linkml:none_of ], + owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:any_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousClassExpression ; - owl:onProperty linkml:any_of ], + owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:none_of ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:any_of ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:none_of ], [ a owl:Restriction ; owl:allValuesFrom linkml:AnonymousClassExpression ; - owl:onProperty linkml:exactly_one_of ], + owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:none_of ], + 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:all_of ], + owl:onProperty linkml:none_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:all_of ], + owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:slot_conditions ], + owl:allValuesFrom linkml:AnonymousClassExpression ; + owl:onProperty linkml:any_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:exactly_one_of ] ; + owl:onProperty linkml:exactly_one_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:AnonymousClassExpression ; + owl:onProperty linkml:exactly_one_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:slot_conditions ] ; skos:definition "A boolean expression that can be used to dynamically determine membership of a class" ; skos:inScheme linkml:meta . @@ -826,67 +826,67 @@ linkml:ClassRule a owl:Class, rdfs:label "class_rule" ; rdfs:subClassOf [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:deactivated ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousClassExpression ; owl:onProperty linkml:elseconditions ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:elseconditions ], + owl:minCardinality 0 ; + owl:onProperty linkml:postconditions ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousClassExpression ; - owl:onProperty linkml:preconditions ], + owl:minCardinality 0 ; + owl:onProperty linkml:deactivated ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:elseconditions ], + owl:onProperty linkml:bidirectional ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:bidirectional ], + owl:onProperty linkml:elseconditions ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:postconditions ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:open_world ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty linkml:deactivated ], + [ a owl:Restriction ; + owl:minCardinality 0 ; owl:onProperty linkml:rank ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:bidirectional ], + owl:onProperty linkml:deactivated ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:preconditions ], + owl:onProperty linkml:bidirectional ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:open_world ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:deactivated ], + owl:onProperty linkml:bidirectional ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:rank ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:AnonymousClassExpression ; + owl:onProperty linkml:elseconditions ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; owl:onProperty linkml:rank ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:AnonymousClassExpression ; owl:onProperty linkml:postconditions ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:open_world ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:preconditions ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:deactivated ], + owl:onProperty linkml:open_world ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:open_world ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousClassExpression ; - owl:onProperty linkml:postconditions ], + owl:maxCardinality 1 ; + owl:onProperty linkml:preconditions ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:bidirectional ], + owl:allValuesFrom linkml:AnonymousClassExpression ; + owl:onProperty linkml:preconditions ], linkml:Annotatable, linkml:ClassLevelRule, linkml:CommonMetadata, @@ -903,20 +903,20 @@ linkml:MatchQuery a owl:Class, rdfs:subClassOf [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:identifier_pattern ], + [ 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:allValuesFrom linkml:Uriorcurie ; + owl:minCardinality 0 ; owl:onProperty linkml:source_ontology ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:source_ontology ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:identifier_pattern ], - [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; 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 a query that matches on properties of the external concepts." ; skos:inScheme linkml:meta . @@ -925,119 +925,119 @@ linkml:TypeExpression a owl:Class, linkml:ClassDefinition ; rdfs:label "type_expression" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousTypeExpression ; - owl:onProperty linkml:exactly_one_of ], - [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:equals_string_in ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:equals_number ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:maximum_value ], + owl:onProperty linkml:implicit_prefix ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:implicit_prefix ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:any_of ], + owl:minCardinality 0 ; + owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:any_of ], + owl:onProperty linkml:unit ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:exactly_one_of ], + owl:onProperty linkml:maximum_value ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousTypeExpression ; + owl:maxCardinality 1 ; + owl:onProperty linkml:implicit_prefix ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty linkml:all_of ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:none_of ], + owl:maxCardinality 1 ; + owl:onProperty linkml:unit ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousTypeExpression ; + owl:minCardinality 0 ; owl:onProperty linkml:none_of ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:pattern ], + owl:onProperty linkml:equals_string ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:none_of ], + owl:onProperty linkml:maximum_value ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousTypeExpression ; + owl:minCardinality 0 ; owl:onProperty linkml:any_of ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:structured_pattern ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:implicit_prefix ], + owl:minCardinality 0 ; + owl:onProperty linkml:equals_string ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:implicit_prefix ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:pattern ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:equals_number ], + owl:onProperty linkml:none_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:unit ], + owl:onProperty linkml:minimum_value ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:equals_string ], + owl:onProperty linkml:equals_string_in ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:equals_number ], + owl:minCardinality 0 ; + owl:onProperty linkml:pattern ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Anything ; - owl:onProperty linkml:minimum_value ], + owl:allValuesFrom linkml:AnonymousTypeExpression ; + owl:onProperty linkml:all_of ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:equals_string_in ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:any_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:UnitOfMeasure ; + owl:onProperty linkml:unit ], [ a owl:Restriction ; owl:allValuesFrom linkml:PatternExpression ; owl:onProperty linkml:structured_pattern ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:structured_pattern ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Anything ; - owl:onProperty linkml:maximum_value ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:exactly_one_of ], + owl:onProperty linkml:equals_string ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:equals_string_in ], + owl:onProperty linkml:equals_number ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:minimum_value ], + owl:allValuesFrom linkml:Anything ; + owl:onProperty linkml:maximum_value ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:minimum_value ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:maximum_value ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:pattern ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:all_of ], + owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:unit ], + owl:allValuesFrom linkml:AnonymousTypeExpression ; + owl:onProperty linkml:none_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:equals_string ], + owl:onProperty linkml:equals_number ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:pattern ], + owl:allValuesFrom linkml:Integer ; + owl:onProperty linkml:equals_number ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:equals_string ], + owl:allValuesFrom linkml:AnonymousTypeExpression ; + owl:onProperty linkml:any_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Anything ; + owl:onProperty linkml:minimum_value ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:all_of ], + owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:UnitOfMeasure ; - owl:onProperty linkml:unit ], + owl:allValuesFrom linkml:AnonymousTypeExpression ; + owl:onProperty linkml:exactly_one_of ], linkml:Expression ; skos:definition "An abstract class grouping named types and anonymous type expressions" ; skos:inScheme linkml:meta . @@ -2213,19 +2213,19 @@ linkml:AltDescription a owl:Class, linkml:ClassDefinition ; rdfs:label "alt_description" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:String ; owl:onProperty linkml:alt_description_source ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:alt_description_text ], [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:maxCardinality 1 ; owl:onProperty linkml:alt_description_source ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:alt_description_text ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:minCardinality 1 ; owl:onProperty linkml:alt_description_source ], [ a owl:Restriction ; owl:minCardinality 1 ; @@ -2252,37 +2252,37 @@ linkml:EnumBinding a owl:Class, linkml:ClassDefinition ; rdfs:label "enum_binding" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:pv_formula ], + owl:minCardinality 0 ; + owl:onProperty linkml:range ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:obligation_level ], + owl:onProperty linkml:range ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:EnumDefinition ; + owl:onProperty linkml:range ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:binds_value_of ], + owl:onProperty linkml:pv_formula ], [ a owl:Restriction ; owl:allValuesFrom linkml:ObligationLevelEnum ; owl:onProperty linkml:obligation_level ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:pv_formula ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:binds_value_of ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty linkml:binds_value_of ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:range ], + owl:maxCardinality 1 ; + owl:onProperty linkml:pv_formula ], [ a owl:Restriction ; - owl:allValuesFrom linkml:EnumDefinition ; - owl:onProperty linkml:range ], + owl:minCardinality 0 ; + owl:onProperty linkml:obligation_level ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:range ], + owl:onProperty linkml:binds_value_of ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:obligation_level ], [ a owl:Restriction ; owl:allValuesFrom linkml:PvFormulaOptions ; @@ -2298,17 +2298,14 @@ linkml:ImportExpression a owl:Class, rdfs:label "import_expression" ; bibo:status ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty linkml:import_from ], + owl:allValuesFrom linkml:Setting ; + owl:onProperty linkml:import_map ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:import_map ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:import_as ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Ncname ; - owl:onProperty linkml:import_as ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:import_from ], @@ -2319,8 +2316,11 @@ linkml:ImportExpression a owl:Class, owl:maxCardinality 1 ; owl:onProperty linkml:import_as ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Setting ; - owl:onProperty linkml:import_map ], + owl:minCardinality 1 ; + owl:onProperty linkml:import_from ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Ncname ; + owl:onProperty linkml:import_as ], linkml:Annotatable, linkml:CommonMetadata, linkml:Extensible ; @@ -2331,22 +2331,22 @@ linkml:LocalName a owl:Class, linkml:ClassDefinition ; rdfs:label "local_name" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Ncname ; + 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:minCardinality 1 ; owl:onProperty linkml:local_name_source ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Ncname ; + owl:onProperty linkml:local_name_source ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:local_name_value ], [ a owl:Restriction ; owl:minCardinality 1 ; - owl:onProperty linkml:local_name_value ], - [ 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 ] ; skos:definition "an attributed label" ; skos:inScheme linkml:meta . @@ -2355,23 +2355,23 @@ linkml:Prefix a owl:Class, linkml:ClassDefinition ; rdfs:label "prefix" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Uri ; - owl:onProperty linkml:prefix_reference ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:prefix_reference ], - [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:prefix_prefix ], [ a owl:Restriction ; - owl:minCardinality 1 ; + owl:allValuesFrom linkml:Uri ; owl:onProperty linkml:prefix_reference ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty linkml:prefix_prefix ], [ a owl:Restriction ; owl:allValuesFrom linkml:Ncname ; - owl:onProperty linkml:prefix_prefix ] ; + owl:onProperty linkml:prefix_prefix ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:prefix_reference ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty linkml:prefix_reference ] ; skos:definition "prefix URI tuple" ; skos:inScheme linkml:meta ; sh:order 12 . @@ -2500,7 +2500,7 @@ linkml:unique_keys a owl:ObjectProperty, rdfs:seeAlso , linkml:identifier, linkml:key ; - skos:definition "A collection of named unique keys for this class. Such unique keys may be spread over several slots, which is why there are also called \"compound keys\". A unique key uniquely identifies instances of the class within a given container, meaning there cannot be two (or more) instances of the class with the same values for all the slots that make up the unique key." ; + skos:definition "A collection of named unique keys for this class. Such unique keys may be spread over several slots, which is why they are also called \"compound keys\". A unique key uniquely identifies instances of the class within a given container, meaning there cannot be two (or more) instances of the class with the same values for all the slots that make up the unique key." ; skos:exactMatch owl:hasKey ; skos:inScheme linkml:meta ; skos:note """Not to be confused with a "singular unique key", which is defined by means of the `key` slot, or with an "identifier", which is defined by means of the "identifier" slot. Compound keys, singular unique keys, and identifiers all create a unicity constraint, but singular unique keys and identifiers have additional effects that compound keys do not have. @@ -2510,32 +2510,32 @@ linkml:Example a owl:Class, linkml:ClassDefinition ; rdfs:label "example" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:value_object ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:value_object ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:value ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:value ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:value_description ], + owl:onProperty linkml:value ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Anything ; - owl:onProperty linkml:value_object ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:value_description ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:value_description ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:minCardinality 0 ; + owl:onProperty linkml:value_object ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty linkml:value_description ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:value ], + owl:onProperty linkml:value_object ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:value ] ; + owl:allValuesFrom linkml:Anything ; + owl:onProperty linkml:value_object ] ; skos:definition "usage example and description" ; skos:inScheme linkml:meta . @@ -2543,269 +2543,269 @@ linkml:SlotExpression a owl:Class, linkml:ClassDefinition ; rdfs:label "slot_expression" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:inlined ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:maximum_cardinality ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:implicit_prefix ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:has_member ], + owl:allValuesFrom linkml:EnumExpression ; + owl:onProperty linkml:enum_range ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:none_of ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:equals_expression ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:range_expression ], + owl:onProperty linkml:range ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:required ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:any_of ], + owl:onProperty linkml:implicit_prefix ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:bindings ], + owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:range ], + owl:onProperty linkml:unit ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:equals_string_in ], + owl:onProperty linkml:equals_expression ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:inlined ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:EnumExpression ; owl:onProperty linkml:enum_range ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:equals_string_in ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:unit ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:equals_expression ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:EnumBinding ; - owl:onProperty linkml:bindings ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:any_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousSlotExpression ; - owl:onProperty linkml:any_of ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:minimum_value ], + owl:onProperty linkml:has_member ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:equals_number ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:inlined ], + owl:onProperty linkml:range_expression ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:enum_range ], + owl:onProperty linkml:maximum_cardinality ], [ a owl:Restriction ; - owl:allValuesFrom linkml:PresenceEnum ; + owl:minCardinality 0 ; owl:onProperty linkml:value_presence ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Anything ; - owl:onProperty linkml:maximum_value ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Element ; + owl:maxCardinality 1 ; owl:onProperty linkml:range ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:maximum_value ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:value_presence ], + owl:onProperty linkml:implicit_prefix ], [ a owl:Restriction ; owl:allValuesFrom linkml:AnonymousSlotExpression ; - owl:onProperty linkml:all_members ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:exactly_one_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:equals_number ], + owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:all_members ], + owl:onProperty linkml:all_of ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:recommended ], + owl:maxCardinality 1 ; + owl:onProperty linkml:unit ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:equals_string ], + owl:onProperty linkml:equals_expression ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:inlined_as_list ], + owl:onProperty linkml:none_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:equals_expression ], + owl:onProperty linkml:enum_range ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:maximum_cardinality ], + owl:allValuesFrom linkml:AnonymousSlotExpression ; + owl:onProperty linkml:has_member ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:minimum_cardinality ], + owl:onProperty linkml:has_member ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:all_of ], + owl:onProperty linkml:multivalued ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:maximum_value ], + owl:onProperty linkml:range_expression ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:exact_cardinality ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:equals_string ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:none_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:pattern ], + owl:onProperty linkml:maximum_cardinality ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Anything ; - owl:onProperty linkml:minimum_value ], + owl:maxCardinality 1 ; + owl:onProperty linkml:value_presence ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:implicit_prefix ], + owl:onProperty linkml:maximum_value ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:required ], + owl:minCardinality 0 ; + owl:onProperty linkml:any_of ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; owl:onProperty linkml:maximum_cardinality ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:all_members ], + owl:onProperty linkml:structured_pattern ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:implicit_prefix ], + owl:onProperty linkml:equals_string ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:multivalued ], + owl:minCardinality 0 ; + owl:onProperty linkml:minimum_cardinality ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:range ], + owl:allValuesFrom linkml:PresenceEnum ; + owl:onProperty linkml:value_presence ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:implicit_prefix ], + owl:allValuesFrom linkml:AnonymousSlotExpression ; + owl:onProperty linkml:none_of ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:String ; owl:onProperty linkml:pattern ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:inlined_as_list ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:recommended ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:recommended ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:range_expression ], + owl:onProperty linkml:none_of ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:minimum_value ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:enum_range ], + owl:minCardinality 0 ; + owl:onProperty linkml:exact_cardinality ], [ a owl:Restriction ; - owl:allValuesFrom linkml:PatternExpression ; - owl:onProperty linkml:structured_pattern ], + owl:minCardinality 0 ; + owl:onProperty linkml:bindings ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousSlotExpression ; - owl:onProperty linkml:all_of ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:equals_string_in ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:equals_expression ], + owl:onProperty linkml:inlined_as_list ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:structured_pattern ], + owl:onProperty linkml:multivalued ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:pattern ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:exact_cardinality ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:multivalued ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousClassExpression ; - owl:onProperty linkml:range_expression ], + owl:allValuesFrom linkml:AnonymousSlotExpression ; + owl:onProperty linkml:any_of ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:equals_string_in ], [ a owl:Restriction ; owl:minCardinality 0 ; + owl:onProperty linkml:recommended ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:any_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:UnitOfMeasure ; + owl:onProperty linkml:unit ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:PatternExpression ; owl:onProperty linkml:structured_pattern ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:inlined_as_list ], + owl:maxCardinality 1 ; + owl:onProperty linkml:structured_pattern ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:equals_string ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:unit ], + owl:onProperty linkml:inlined ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:minimum_cardinality ], + owl:onProperty linkml:all_members ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:AnonymousClassExpression ; + owl:onProperty linkml:range_expression ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:all_of ], + owl:onProperty linkml:minimum_cardinality ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:value_presence ], + owl:onProperty linkml:equals_number ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:multivalued ], + owl:allValuesFrom linkml:Anything ; + owl:onProperty linkml:maximum_value ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; owl:onProperty linkml:minimum_cardinality ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; + owl:onProperty linkml:minimum_value ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty linkml:exact_cardinality ], [ a owl:Restriction ; - owl:allValuesFrom linkml:UnitOfMeasure ; - owl:onProperty linkml:unit ], + owl:allValuesFrom linkml:Integer ; + owl:onProperty linkml:exact_cardinality ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:has_member ], + owl:allValuesFrom linkml:EnumBinding ; + owl:onProperty linkml:bindings ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty linkml:inlined_as_list ], + [ a owl:Restriction ; + owl:minCardinality 0 ; owl:onProperty linkml:array ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:equals_string ], + owl:minCardinality 0 ; + owl:onProperty linkml:required ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousSlotExpression ; - owl:onProperty linkml:exactly_one_of ], + owl:maxCardinality 1 ; + owl:onProperty linkml:pattern ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousSlotExpression ; - owl:onProperty linkml:has_member ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:inlined_as_list ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:required ], + owl:onProperty linkml:recommended ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:equals_string ], + owl:onProperty linkml:exactly_one_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:recommended ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:equals_number ], + owl:onProperty linkml:inlined ], [ a owl:Restriction ; owl:allValuesFrom linkml:AnonymousSlotExpression ; - owl:onProperty linkml:none_of ], + owl:onProperty linkml:all_members ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:array ], + owl:maxCardinality 1 ; + owl:onProperty linkml:all_members ], [ a owl:Restriction ; owl:allValuesFrom linkml:ArrayExpression ; owl:onProperty linkml:array ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:exactly_one_of ], + owl:onProperty linkml:equals_number ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:multivalued ], + owl:onProperty linkml:inlined ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; + owl:onProperty linkml:equals_number ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:array ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:required ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:required ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Anything ; + owl:onProperty linkml:minimum_value ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:AnonymousSlotExpression ; + owl:onProperty linkml:exactly_one_of ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:exactly_one_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Element ; + owl:onProperty linkml:range ], linkml:Expression ; skos:definition "an expression that constrains the range of values a slot can take" ; skos:inScheme linkml:meta . @@ -2814,10 +2814,19 @@ linkml:StructuredAlias a owl:Class, linkml:ClassDefinition ; rdfs:label "structured_alias" ; rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:literal_form ], + [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:alias_contexts ], + owl:onProperty linkml:alias_predicate ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; + owl:maxCardinality 1 ; + owl:onProperty linkml:literal_form ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:alias_predicate ], + [ a owl:Restriction ; + owl:minCardinality 0 ; owl:onProperty linkml:categories ], [ a owl:Restriction ; owl:allValuesFrom linkml:AliasPredicateEnum ; @@ -2825,24 +2834,15 @@ linkml:StructuredAlias a owl:Class, [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty linkml:literal_form ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:literal_form ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uri ; owl:onProperty linkml:alias_contexts ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:categories ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:alias_predicate ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:alias_predicate ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:literal_form ], + owl:onProperty linkml:alias_contexts ], linkml:Annotatable, linkml:CommonMetadata, linkml:Expression, @@ -2863,29 +2863,29 @@ linkml:UniqueKey a owl:Class, linkml:ClassDefinition ; rdfs:label "unique_key" ; rdfs:subClassOf [ 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:consider_nulls_inequal ], + owl:onProperty linkml:unique_key_name ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty linkml:unique_key_name ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; + 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:maxCardinality 1 ; - owl:onProperty linkml:unique_key_name ], + owl:onProperty linkml:consider_nulls_inequal ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:consider_nulls_inequal ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:consider_nulls_inequal ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:unique_key_slots ], linkml:Annotatable, linkml:CommonMetadata, linkml:Extensible ; @@ -2896,84 +2896,84 @@ linkml:UniqueKey a owl:Class, linkml:UnitOfMeasure a owl:Class, linkml:ClassDefinition ; rdfs:label "UnitOfMeasure" ; - rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:has_quantity_kind ], + rdfs:subClassOf [ owl:unionOf ( [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:ucum_code ] [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:iec61360code ] [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:symbol ] [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:exact_mappings ] ) ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:abbreviation ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:abbreviation ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:has_quantity_kind ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:iec61360code ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:exact_mappings ], + owl:onProperty linkml:has_quantity_kind ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:ucum_code ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:iec61360code ], + owl:onProperty linkml:abbreviation ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:descriptive_name ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:ucum_code ], + owl:onProperty linkml:iec61360code ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:iec61360code ], + owl:onProperty linkml:symbol ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:ucum_code ], - [ owl:unionOf ( [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:ucum_code ] [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:iec61360code ] [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:symbol ] [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:exact_mappings ] ) ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:descriptive_name ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:ucum_code ], + owl:onProperty linkml:has_quantity_kind ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:exact_mappings ], + owl:onProperty linkml:symbol ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:has_quantity_kind ], + owl:onProperty linkml:iec61360code ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:derivation ], + owl:onProperty linkml:ucum_code ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:descriptive_name ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:iec61360code ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:derivation ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:abbreviation ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:symbol ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:symbol ], + owl:onProperty linkml:descriptive_name ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:derivation ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:derivation ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:abbreviation ], + owl:onProperty linkml:descriptive_name ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:abbreviation ], + owl:onProperty linkml:exact_mappings ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:symbol ] ; + owl:maxCardinality 1 ; + owl:onProperty linkml:derivation ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:exact_mappings ] ; 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 ; skos:inScheme linkml:units . @@ -3063,33 +3063,33 @@ linkml:ArrayExpression a owl:Class, owl:onProperty linkml:maximum_number_dimensions ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:minimum_number_dimensions ], + owl:onProperty linkml:dimensions ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:dimensions ], + owl:onProperty linkml:maximum_number_dimensions ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:maximum_number_dimensions ], [ a owl:Restriction ; owl:allValuesFrom linkml:DimensionExpression ; owl:onProperty linkml:dimensions ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:exact_number_dimensions ], - [ 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:maxCardinality 1 ; owl:onProperty linkml:exact_number_dimensions ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:maximum_number_dimensions ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; owl:onProperty linkml:exact_number_dimensions ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; + owl:maxCardinality 1 ; owl:onProperty linkml:minimum_number_dimensions ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:Integer ; owl:onProperty linkml:minimum_number_dimensions ], linkml:Annotatable, linkml:CommonMetadata, @@ -3101,25 +3101,25 @@ linkml:Extension a owl:Class, linkml:ClassDefinition ; rdfs:label "extension" ; rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:extension_tag ], + [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:extension_tag ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Extension ; + owl:minCardinality 0 ; owl:onProperty linkml:extensions ], - [ 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:Uriorcurie ; - owl:onProperty linkml:extension_tag ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:extension_value ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:AnyValue ; + owl:onProperty linkml:extension_value ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Extension ; owl:onProperty linkml:extensions ], [ a owl:Restriction ; owl:minCardinality 1 ; @@ -3131,6 +3131,12 @@ linkml:PatternExpression a owl:Class, linkml:ClassDefinition ; rdfs:label "pattern_expression" ; rdfs:subClassOf [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:interpolated ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:interpolated ], + [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:interpolated ], [ a owl:Restriction ; @@ -3138,15 +3144,9 @@ linkml:PatternExpression a owl:Class, owl:onProperty linkml:syntax ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:partial_match ], + owl:onProperty linkml:syntax ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:interpolated ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:interpolated ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:partial_match ], [ a owl:Restriction ; owl:maxCardinality 1 ; @@ -3155,8 +3155,8 @@ linkml:PatternExpression a owl:Class, owl:maxCardinality 1 ; owl:onProperty linkml:partial_match ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:syntax ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:partial_match ], linkml:Annotatable, linkml:CommonMetadata, linkml:Extensible ; @@ -3167,68 +3167,68 @@ linkml:PermissibleValue a owl:Class, linkml:ClassDefinition ; rdfs:label "permissible_value" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:PermissibleValue ; - owl:onProperty linkml:is_a ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:description ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:UnitOfMeasure ; + owl:minCardinality 0 ; owl:onProperty linkml:unit ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:implements ], + owl:onProperty linkml:is_a ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:implements ], + owl:minCardinality 0 ; + owl:onProperty linkml:meaning ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:text ], + owl:onProperty linkml:unit ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:instantiates ], + owl:onProperty linkml:mixins ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:instantiates ], + owl:onProperty linkml:meaning ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:description ], + owl:maxCardinality 1 ; + owl:onProperty linkml:is_a ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; + owl:maxCardinality 1 ; owl:onProperty linkml:meaning ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty linkml:text ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:description ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:mixins ], + owl:onProperty linkml:instantiates ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:UnitOfMeasure ; + owl:onProperty linkml:unit ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:description ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:unit ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:meaning ], + owl:onProperty linkml:implements ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:instantiates ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:text ], [ a owl:Restriction ; owl:allValuesFrom linkml:PermissibleValue ; - owl:onProperty linkml:mixins ], - [ a owl:Restriction ; - owl:minCardinality 0 ; owl:onProperty linkml:is_a ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:unit ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:implements ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:is_a ], + owl:onProperty linkml:description ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:PermissibleValue ; + owl:onProperty linkml:mixins ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:meaning ], + owl:onProperty linkml:text ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty linkml:text ], linkml:Annotatable, linkml:CommonMetadata, linkml:Extensible ; @@ -3245,10 +3245,7 @@ linkml:Setting a owl:Class, owl:allValuesFrom linkml:String ; owl:onProperty linkml:setting_value ], [ a owl:Restriction ; - owl:minCardinality 1 ; - 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 ; @@ -3257,7 +3254,10 @@ linkml:Setting a owl:Class, owl:minCardinality 1 ; owl:onProperty linkml:setting_key ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 1 ; + owl:onProperty linkml:setting_value ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Ncname ; owl:onProperty linkml:setting_key ] ; skos:definition "assignment of a key to a value" ; skos:inScheme linkml:meta . @@ -3490,77 +3490,77 @@ linkml:PathExpression a owl:Class, linkml:ClassDefinition ; rdfs:label "path_expression" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:none_of ], + owl:allValuesFrom linkml:PathExpression ; + owl:onProperty linkml:all_of ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:followed_by ], + owl:minCardinality 0 ; + owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:traverse ], + owl:onProperty linkml:reversed ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; + owl:minCardinality 0 ; owl:onProperty linkml:traverse ], [ a owl:Restriction ; owl:allValuesFrom linkml:PathExpression ; - owl:onProperty linkml:all_of ], + owl:onProperty linkml:followed_by ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:exactly_one_of ], + owl:allValuesFrom linkml:PathExpression ; + owl:onProperty linkml:none_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:followed_by ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousClassExpression ; owl:onProperty linkml:range_expression ], [ a owl:Restriction ; - owl:allValuesFrom linkml:PathExpression ; - owl:onProperty linkml:exactly_one_of ], + owl:maxCardinality 1 ; + owl:onProperty linkml:all_of ], [ a owl:Restriction ; owl:allValuesFrom linkml:PathExpression ; owl:onProperty linkml:any_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:PathExpression ; - owl:onProperty linkml:none_of ], + owl:minCardinality 0 ; + owl:onProperty linkml:followed_by ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:reversed ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:PathExpression ; - owl:onProperty linkml:followed_by ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty linkml:traverse ], + [ a owl:Restriction ; + owl:minCardinality 0 ; owl:onProperty linkml:none_of ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:reversed ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:exactly_one_of ], + owl:onProperty linkml:range_expression ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:reversed ], + owl:onProperty linkml:any_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:any_of ], + owl:onProperty linkml:followed_by ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:any_of ], + owl:maxCardinality 1 ; + owl:onProperty linkml:none_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:all_of ], + owl:onProperty linkml:any_of ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:PathExpression ; + owl:onProperty linkml:exactly_one_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:AnonymousClassExpression ; owl:onProperty linkml:range_expression ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:SlotDefinition ; owl:onProperty linkml:traverse ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:all_of ], + owl:onProperty linkml:exactly_one_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:range_expression ], + owl:onProperty linkml:exactly_one_of ], linkml:Annotatable, linkml:CommonMetadata, linkml:Expression, @@ -3573,13 +3573,19 @@ linkml:ReachabilityQuery a owl:Class, rdfs:label "reachability_query" ; rdfs:subClassOf [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:relationship_types ], + owl:onProperty linkml:include_self ], [ a owl:Restriction ; owl:minCardinality 0 ; + owl:onProperty linkml:traverse_up ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty linkml:include_self ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:is_direct ], + owl:onProperty linkml:traverse_up ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:include_self ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:traverse_up ], @@ -3588,37 +3594,31 @@ linkml:ReachabilityQuery a owl:Class, owl:onProperty linkml:source_nodes ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:traverse_up ], + owl:onProperty linkml:is_direct ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:source_nodes ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:source_ontology ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; + owl:minCardinality 0 ; owl:onProperty linkml:source_ontology ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:is_direct ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:include_self ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:source_ontology ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:is_direct ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:include_self ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:source_ontology ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:relationship_types ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:traverse_up ] ; + owl:onProperty linkml:source_ontology ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:relationship_types ] ; 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 . @@ -3726,10 +3726,10 @@ 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 ; @@ -3828,248 +3828,248 @@ linkml:CommonMetadata a owl:Class, linkml:ClassDefinition ; rdfs:label "common_metadata" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:see_also ], - [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:notes ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:deprecated_element_has_possible_replacement ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:modified_by ], + owl:onProperty linkml:in_language ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:in_language ], + owl:onProperty linkml:deprecated ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:modified_by ], + owl:allValuesFrom linkml:AltDescription ; + owl:onProperty linkml:alt_descriptions ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:modified_by ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:created_by ], + owl:onProperty linkml:in_language ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:from_schema ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Datetime ; - owl:onProperty linkml:last_updated_on ], + owl:onProperty linkml:deprecated ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:in_subset ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty linkml:rank ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:status ], + owl:onProperty linkml:created_by ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:related_mappings ], + owl:onProperty linkml:close_mappings ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:description ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:description ], + owl:onProperty linkml:broad_mappings ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:mappings ], + owl:onProperty linkml:alt_descriptions ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:description ], + owl:onProperty linkml:imported_from ], [ a owl:Restriction ; - owl:allValuesFrom linkml:StructuredAlias ; - owl:onProperty linkml:structured_aliases ], + owl:allValuesFrom linkml:Example ; + owl:onProperty linkml:examples ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:deprecated_element_has_possible_replacement ], - [ a owl:Restriction ; - owl:minCardinality 0 ; owl:onProperty linkml:created_by ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:AltDescription ; - owl:onProperty linkml:alt_descriptions ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:exact_mappings ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:SubsetDefinition ; - owl:onProperty linkml:in_subset ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:deprecated_element_has_exact_replacement ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:deprecated ], + owl:onProperty linkml:close_mappings ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:comments ], + owl:onProperty linkml:keywords ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:rank ], + owl:onProperty linkml:deprecated_element_has_possible_replacement ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:categories ], + owl:onProperty linkml:broad_mappings ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:categories ], + owl:onProperty linkml:imported_from ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:deprecated_element_has_possible_replacement ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:related_mappings ], + owl:onProperty linkml:in_language ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:title ], + owl:onProperty linkml:todos ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:created_on ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Datetime ; - owl:onProperty linkml:created_on ], + owl:onProperty linkml:deprecated ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:structured_aliases ], + owl:onProperty linkml:examples ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:created_by ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:see_also ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uri ; - owl:onProperty linkml:from_schema ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:notes ], + owl:onProperty linkml:structured_aliases ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:narrow_mappings ], + owl:onProperty linkml:related_mappings ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:close_mappings ], + owl:minCardinality 0 ; + owl:onProperty linkml:keywords ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:aliases ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:created_on ], + owl:onProperty linkml:contributors ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:deprecated_element_has_exact_replacement ], + owl:onProperty linkml:todos ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:last_updated_on ], + owl:onProperty linkml:deprecated_element_has_exact_replacement ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:last_updated_on ], + owl:allValuesFrom linkml:Uri ; + owl:onProperty linkml:from_schema ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:todos ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:deprecated_element_has_possible_replacement ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:close_mappings ], + owl:onProperty linkml:created_on ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:todos ], + owl:onProperty linkml:see_also ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:source ], + owl:minCardinality 0 ; + owl:onProperty linkml:aliases ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:deprecated_element_has_exact_replacement ], + owl:minCardinality 0 ; + owl:onProperty linkml:rank ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:mappings ], + owl:onProperty linkml:related_mappings ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:broad_mappings ], + owl:onProperty linkml:in_subset ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:source ], + owl:maxCardinality 1 ; + owl:onProperty linkml:deprecated_element_has_possible_replacement ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:contributors ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:title ], + owl:onProperty linkml:from_schema ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:comments ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:source ], + owl:onProperty linkml:deprecated_element_has_exact_replacement ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:imported_from ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:in_language ], + owl:onProperty linkml:narrow_mappings ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:keywords ], + owl:allValuesFrom linkml:SubsetDefinition ; + owl:onProperty linkml:in_subset ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:broad_mappings ], + owl:onProperty linkml:see_also ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:contributors ], + owl:onProperty linkml:last_updated_on ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:modified_by ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:comments ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:rank ], + owl:onProperty linkml:deprecated_element_has_exact_replacement ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:imported_from ], + owl:onProperty linkml:notes ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:categories ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:narrow_mappings ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:description ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:deprecated ], + owl:onProperty linkml:created_on ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Example ; - owl:onProperty linkml:examples ], + owl:allValuesFrom linkml:StructuredAlias ; + owl:onProperty linkml:structured_aliases ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:title ], + owl:onProperty linkml:rank ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:notes ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:contributors ], + owl:onProperty linkml:modified_by ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:deprecated ], + owl:allValuesFrom linkml:Integer ; + owl:onProperty linkml:rank ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:aliases ], + owl:maxCardinality 1 ; + owl:onProperty linkml:from_schema ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:imported_from ], + owl:onProperty linkml:description ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:title ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:narrow_mappings ], + owl:onProperty linkml:categories ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:keywords ], + owl:maxCardinality 1 ; + owl:onProperty linkml:last_updated_on ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:alt_descriptions ], + owl:maxCardinality 1 ; + owl:onProperty linkml:modified_by ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:comments ], + owl:onProperty linkml:title ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:status ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:in_language ], + owl:minCardinality 0 ; + owl:onProperty linkml:mappings ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:examples ], + owl:onProperty linkml:source ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:from_schema ], + owl:onProperty linkml:description ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:exact_mappings ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:status ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:mappings ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:source ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:title ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Datetime ; + owl:onProperty linkml:created_on ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:exact_mappings ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:status ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:imported_from ] ; + owl:onProperty linkml:source ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Datetime ; + owl:onProperty linkml:last_updated_on ] ; skos:definition "Generic metadata shared across definitions" ; skos:inScheme linkml:meta . @@ -4109,47 +4109,47 @@ linkml:TypeDefinition a owl:Class, linkml:ClassDefinition ; rdfs:label "type_definition" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:base ], + owl:minCardinality 0 ; + owl:onProperty linkml:union_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:typeof ], + owl:onProperty linkml:type_uri ], [ a owl:Restriction ; owl:allValuesFrom linkml:TypeDefinition ; owl:onProperty linkml:union_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:repr ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:type_uri ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:repr ], + owl:onProperty linkml:type_uri ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:String ; owl:onProperty linkml:base ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty linkml:typeof ], [ a owl:Restriction ; - owl:allValuesFrom linkml:TypeDefinition ; - owl:onProperty linkml:typeof ], + owl:minCardinality 0 ; + owl:onProperty linkml:base ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:type_uri ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:repr ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:type_uri ], + owl:onProperty linkml:repr ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:TypeDefinition ; + owl:onProperty linkml:typeof ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:type_uri ], + owl:onProperty linkml:typeof ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:base ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:repr ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - 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" ; @@ -4160,10 +4160,10 @@ linkml:Annotatable a owl:Class, linkml:ClassDefinition ; rdfs:label "annotatable" ; 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 ] ; skos:definition "mixin for classes that support annotations" ; skos:inScheme linkml:annotations . @@ -4172,88 +4172,88 @@ linkml:EnumExpression a owl:Class, linkml:ClassDefinition ; rdfs:label "enum_expression" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:inherits ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:reachable_from ], + owl:allValuesFrom linkml:MatchQuery ; + owl:onProperty linkml:matches ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:code_set ], + owl:onProperty linkml:minus ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:code_set_tag ], + owl:onProperty linkml:matches ], [ a owl:Restriction ; - owl:allValuesFrom linkml:PermissibleValue ; + owl:minCardinality 0 ; owl:onProperty linkml:permissible_values ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:code_set_version ], + owl:onProperty linkml:reachable_from ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:matches ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:code_set_version ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:matches ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:concepts ], + owl:onProperty linkml:code_set ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:concepts ], + owl:allValuesFrom linkml:AnonymousEnumExpression ; + owl:onProperty linkml:minus ], [ a owl:Restriction ; - owl:allValuesFrom linkml:EnumDefinition ; - owl:onProperty linkml:inherits ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:code_set_tag ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty linkml:reachable_from ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; owl:onProperty linkml:code_set_version ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:permissible_values ], + owl:onProperty linkml:code_set_tag ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:code_set ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:include ], + owl:onProperty linkml:code_set_version ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:code_set ], [ a owl:Restriction ; owl:allValuesFrom linkml:ReachabilityQuery ; owl:onProperty linkml:reachable_from ], [ a owl:Restriction ; - owl:allValuesFrom linkml:MatchQuery ; - owl:onProperty linkml:matches ], + owl:minCardinality 0 ; + owl:onProperty linkml:pv_formula ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:code_set_tag ], [ a owl:Restriction ; - owl:allValuesFrom linkml:PvFormulaOptions ; - owl:onProperty linkml:pv_formula ], + owl:minCardinality 0 ; + owl:onProperty linkml:inherits ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:code_set ], + owl:onProperty linkml:code_set_version ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:PermissibleValue ; + owl:onProperty linkml:permissible_values ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:reachable_from ], + owl:onProperty linkml:include ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:pv_formula ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:code_set ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:minus ], + owl:onProperty linkml:concepts ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousEnumExpression ; - owl:onProperty linkml:include ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:concepts ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:code_set_tag ], + owl:allValuesFrom linkml:EnumDefinition ; + owl:onProperty linkml:inherits ], [ a owl:Restriction ; owl:allValuesFrom linkml:AnonymousEnumExpression ; - owl:onProperty linkml:minus ], + owl:onProperty linkml:include ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:PvFormulaOptions ; owl:onProperty linkml:pv_formula ], linkml:Expression ; skos:definition "An expression that constrains the range of a slot" ; @@ -4285,10 +4285,10 @@ linkml:AnonymousClassExpression a owl:Class, owl:minCardinality 0 ; owl:onProperty linkml:is_a ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Definition ; + owl:maxCardinality 1 ; owl:onProperty linkml:is_a ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:Definition ; owl:onProperty linkml:is_a ], linkml:AnonymousExpression, linkml:ClassExpression ; @@ -4299,179 +4299,179 @@ linkml:SchemaDefinition a owl:Class, rdfs:label "schema_definition" ; rdfs:seeAlso ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:generation_date ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:default_curi_maps ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:metamodel_version ], + owl:onProperty linkml:source_file ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:prefixes ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:slot_names_unique ], + owl:onProperty linkml:default_curi_maps ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty linkml:id ], + owl:minCardinality 0 ; + owl:onProperty linkml:source_file ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:license ], + owl:minCardinality 0 ; + owl:onProperty linkml:slot_names_unique ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uri ; - owl:onProperty linkml:id ], + owl:minCardinality 0 ; + owl:onProperty linkml:subsets ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:settings ], + owl:onProperty linkml:types ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:id ], + owl:allValuesFrom linkml:SubsetDefinition ; + owl:onProperty linkml:subsets ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:name ], + owl:minCardinality 0 ; + owl:onProperty linkml:imports ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; + owl:minCardinality 0 ; owl:onProperty linkml:source_file_size ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:subsets ], + owl:allValuesFrom linkml:Prefix ; + owl:onProperty linkml:prefixes ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:version ], + owl:onProperty linkml:prefixes ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:default_prefix ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:default_prefix ], + owl:onProperty linkml:source_file ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:imports ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:source_file ], + owl:maxCardinality 1 ; + owl:onProperty linkml:slot_names_unique ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:TypeDefinition ; + owl:onProperty linkml:types ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:slot_names_unique ], [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassDefinition ; - owl:onProperty linkml:classes ], + owl:allValuesFrom linkml:Setting ; + owl:onProperty linkml:settings ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uri ; + owl:onProperty linkml:id ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:version ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:default_range ], + owl:onProperty linkml:source_file_size ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:slot_definitions ], + owl:onProperty linkml:settings ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:generation_date ], + owl:onProperty linkml:version ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:emit_prefixes ], + owl:allValuesFrom linkml:Integer ; + owl:onProperty linkml:source_file_size ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:slot_names_unique ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:default_prefix ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Ncname ; + owl:maxCardinality 1 ; owl:onProperty linkml:name ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:source_file_date ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:metamodel_version ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:bindings ], + owl:onProperty linkml:default_prefix ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:classes ], + owl:onProperty linkml:metamodel_version ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:license ], + owl:onProperty linkml:default_range ], [ a owl:Restriction ; - owl:allValuesFrom linkml:EnumBinding ; + owl:minCardinality 0 ; owl:onProperty linkml:bindings ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Datetime ; + owl:minCardinality 0 ; owl:onProperty linkml:source_file_date ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Datetime ; - owl:onProperty linkml:generation_date ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:imports ], + owl:maxCardinality 1 ; + owl:onProperty linkml:version ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:types ], + owl:onProperty linkml:emit_prefixes ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:default_prefix ], + owl:onProperty linkml:license ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:version ], + owl:onProperty linkml:id ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:version ], + owl:minCardinality 1 ; + owl:onProperty linkml:name ], [ a owl:Restriction ; - owl:allValuesFrom linkml:EnumDefinition ; + owl:minCardinality 0 ; owl:onProperty linkml:enums ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Ncname ; - owl:onProperty linkml:emit_prefixes ], + owl:minCardinality 0 ; + owl:onProperty linkml:license ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:metamodel_version ], + owl:onProperty linkml:default_prefix ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:default_curi_maps ], + owl:allValuesFrom linkml:TypeDefinition ; + owl:onProperty linkml:default_range ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:source_file_date ], + owl:maxCardinality 1 ; + owl:onProperty linkml:metamodel_version ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:default_range ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:metamodel_version ], + owl:onProperty linkml:classes ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:slot_definitions ], + owl:allValuesFrom linkml:EnumBinding ; + owl:onProperty linkml:bindings ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:license ], + owl:maxCardinality 1 ; + owl:onProperty linkml:source_file_date ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:enums ], + owl:allValuesFrom linkml:Ncname ; + owl:onProperty linkml:name ], [ a owl:Restriction ; - owl:allValuesFrom linkml:TypeDefinition ; - owl:onProperty linkml:types ], + owl:minCardinality 1 ; + owl:onProperty linkml:id ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:default_curi_maps ], + owl:minCardinality 0 ; + owl:onProperty linkml:slot_definitions ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:source_file ], + owl:minCardinality 0 ; + owl:onProperty linkml:generation_date ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:source_file_size ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Setting ; - owl:onProperty linkml:settings ], + owl:onProperty linkml:license ], [ a owl:Restriction ; - owl:allValuesFrom linkml:TypeDefinition ; - owl:onProperty linkml:default_range ], + owl:allValuesFrom linkml:EnumDefinition ; + owl:onProperty linkml:enums ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:source_file ], + owl:onProperty linkml:generation_date ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:default_range ], + owl:allValuesFrom linkml:Datetime ; + owl:onProperty linkml:source_file_date ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Prefix ; - owl:onProperty linkml:prefixes ], + owl:allValuesFrom linkml:ClassDefinition ; + owl:onProperty linkml:classes ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SubsetDefinition ; - owl:onProperty linkml:subsets ], + owl:allValuesFrom linkml:Ncname ; + owl:onProperty linkml:emit_prefixes ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:source_file_size ], + owl:allValuesFrom linkml:Datetime ; + owl:onProperty linkml:generation_date ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty linkml:name ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:slot_definitions ], linkml:Element ; skos:altLabel "data dictionary", "data model", @@ -4489,61 +4489,61 @@ linkml:Definition a owl:Class, linkml:ClassDefinition ; rdfs:label "definition" ; rdfs:seeAlso ; - rdfs:subClassOf [ a owl:Restriction ; + rdfs:subClassOf [ owl:unionOf ( linkml:ClassDefinition linkml:EnumDefinition linkml:SlotDefinition ) ], + [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:abstract ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:mixin ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:apply_to ], + owl:onProperty linkml:is_a ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:mixins ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:string_serialization ], + owl:onProperty linkml:is_a ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:apply_to ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:mixin ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:string_serialization ], + owl:allValuesFrom linkml:Definition ; + owl:onProperty linkml:is_a ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:mixin ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:values_from ], [ a owl:Restriction ; owl:allValuesFrom linkml:Definition ; - owl:onProperty linkml:is_a ], + owl:onProperty linkml:mixins ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:abstract ], + owl:minCardinality 0 ; + owl:onProperty linkml:values_from ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:is_a ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:mixin ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:abstract ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:string_serialization ], [ a owl:Restriction ; owl:allValuesFrom linkml:Definition ; owl:onProperty linkml:apply_to ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:values_from ], + owl:onProperty linkml:string_serialization ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Definition ; - owl:onProperty linkml:mixins ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:values_from ], [ a owl:Restriction ; owl:minCardinality 0 ; + owl:onProperty linkml:abstract ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty linkml:string_serialization ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:is_a ], - [ owl:unionOf ( linkml:ClassDefinition linkml:EnumDefinition linkml:SlotDefinition ) ], + owl:maxCardinality 1 ; + owl:onProperty linkml:abstract ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:abstract ], linkml:Element ; skos:definition "abstract base class for core metaclasses" ; skos:inScheme linkml:meta . @@ -4552,28 +4552,25 @@ linkml:Element a owl:Class, linkml:ClassDefinition ; rdfs:label "element" ; rdfs:seeAlso ; - rdfs:subClassOf [ a owl:Restriction ; + rdfs:subClassOf [ owl:unionOf ( linkml:Definition linkml:SchemaDefinition linkml:SubsetDefinition linkml:TypeDefinition ) ], + [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:id_prefixes_are_closed ], - [ owl:unionOf ( linkml:Definition linkml:SchemaDefinition linkml:SubsetDefinition linkml:TypeDefinition ) ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:conforms_to ], - [ a owl:Restriction ; - owl:minCardinality 1 ; owl:onProperty linkml:name ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:name ], + owl:onProperty linkml:conforms_to ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Ncname ; - owl:onProperty linkml:id_prefixes ], + owl:maxCardinality 1 ; + owl:onProperty linkml:id_prefixes_are_closed ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:conforms_to ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:id_prefixes_are_closed ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:definition_uri ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:name ], @@ -4582,15 +4579,24 @@ linkml:Element a owl:Class, owl:onProperty linkml:conforms_to ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:implements ], + owl:onProperty linkml:local_names ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; + 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:maxCardinality 1 ; - owl:onProperty linkml:id_prefixes_are_closed ], + owl:minCardinality 0 ; + owl:onProperty linkml:id_prefixes ], [ a owl:Restriction ; owl:minCardinality 0 ; + owl:onProperty linkml:implements ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:instantiates ], [ a owl:Restriction ; owl:minCardinality 0 ; @@ -4599,20 +4605,14 @@ linkml:Element a owl:Class, owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:implements ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:conforms_to ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:definition_uri ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:definition_uri ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:Ncname ; owl:onProperty linkml:id_prefixes ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:LocalName ; - owl:onProperty linkml:local_names ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:local_names ], linkml:Annotatable, linkml:CommonMetadata, linkml:Extensible ; @@ -4625,152 +4625,152 @@ linkml:ClassDefinition a owl:Class, linkml:ClassDefinition ; rdfs:label "class_definition" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:alias ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassDefinition ; - owl:onProperty linkml:mixins ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:tree_root ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassDefinition ; - owl:onProperty linkml:union_of ], - [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:represents_relationship ], + owl:onProperty linkml:union_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:slot_usage ], + owl:onProperty linkml:slot_names_unique ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:represents_relationship ], + owl:allValuesFrom linkml:ExtraSlotsExpression ; + owl:onProperty linkml:extra_slots ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:children_are_mutually_disjoint ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:subclass_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassDefinition ; - owl:onProperty linkml:apply_to ], + owl:onProperty linkml:extra_slots ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:slots ], + owl:onProperty linkml:unique_keys ], [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassRule ; - owl:onProperty linkml:rules ], + owl:minCardinality 0 ; + owl:onProperty linkml:is_a ], [ a owl:Restriction ; - owl:allValuesFrom linkml:AnonymousClassExpression ; - owl:onProperty linkml:classification_rules ], + owl:minCardinality 0 ; + owl:onProperty linkml:defining_slots ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:subclass_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassDefinition ; - owl:onProperty linkml:disjoint_with ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; + owl:minCardinality 0 ; owl:onProperty linkml:children_are_mutually_disjoint ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:unique_keys ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:slot_usage ], + owl:onProperty linkml:represents_relationship ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:slot_names_unique ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:union_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:defining_slots ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:mixins ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:extra_slots ], + owl:minCardinality 0 ; + owl:onProperty linkml:class_uri ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:slot_names_unique ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:extra_slots ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:apply_to ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty linkml:subclass_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:children_are_mutually_disjoint ], + owl:onProperty linkml:extra_slots ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:class_uri ], + owl:onProperty linkml:is_a ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:defining_slots ], + owl:onProperty linkml:apply_to ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:slot_names_unique ], + owl:minCardinality 0 ; + owl:onProperty linkml:classification_rules ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:class_uri ], [ a owl:Restriction ; - owl:allValuesFrom linkml:ExtraSlotsExpression ; - owl:onProperty linkml:extra_slots ], + owl:allValuesFrom linkml:ClassDefinition ; + owl:onProperty linkml:union_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:alias ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:attributes ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:disjoint_with ], + owl:onProperty linkml:subclass_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:is_a ], + owl:onProperty linkml:children_are_mutually_disjoint ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty linkml:represents_relationship ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:children_are_mutually_disjoint ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:represents_relationship ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:class_uri ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:tree_root ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:alias ], [ a owl:Restriction ; owl:allValuesFrom linkml:ClassDefinition ; owl:onProperty linkml:is_a ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:classification_rules ], + owl:onProperty linkml:alias ], [ a owl:Restriction ; - owl:allValuesFrom linkml:UniqueKey ; - owl:onProperty linkml:unique_keys ], + owl:minCardinality 0 ; + owl:onProperty linkml:attributes ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:rules ], + owl:onProperty linkml:slots ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:is_a ], + owl:onProperty linkml:rules ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:attributes ], + owl:allValuesFrom linkml:ClassDefinition ; + owl:onProperty linkml:mixins ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:UniqueKey ; + owl:onProperty linkml:unique_keys ], [ 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:minCardinality 0 ; + owl:onProperty linkml:slot_usage ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:subclass_of ], + owl:onProperty linkml:alias ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:ClassDefinition ; + owl:onProperty linkml:apply_to ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:class_uri ], + owl:onProperty linkml:disjoint_with ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:defining_slots ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:AnonymousClassExpression ; + owl:onProperty linkml:classification_rules ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:ClassRule ; + owl:onProperty linkml:rules ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:ClassDefinition ; + owl:onProperty linkml:disjoint_with ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:attributes ], [ a owl:Restriction ; owl:allValuesFrom linkml:SlotDefinition ; owl:onProperty linkml:slots ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:alias ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:slot_usage ], linkml:ClassExpression, linkml:Definition ; skos:altLabel "message", @@ -4817,349 +4817,349 @@ linkml:SlotDefinition a owl:Class, linkml:ClassDefinition ; rdfs:label "slot_definition" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:designates_type ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:ifabsent ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:transitive ], + owl:onProperty linkml:symmetric ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:reflexive ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:singular_name ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:domain ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:role ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:key ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:singular_name ], + owl:onProperty linkml:ifabsent ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:asymmetric ], + owl:minCardinality 0 ; + owl:onProperty linkml:union_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:transitive_form_of ], + owl:minCardinality 0 ; + owl:onProperty linkml:symmetric ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:apply_to ], + owl:onProperty linkml:list_elements_unique ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:reflexive_transitive_form_of ], + owl:minCardinality 0 ; + owl:onProperty linkml:role ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty linkml:transitive_form_of ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:inherited ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:symmetric ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:is_a ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty linkml:slot_group ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:usage_slot_name ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:is_usage_slot ], + owl:onProperty linkml:subproperty_of ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:role ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:key ], + owl:onProperty linkml:reflexive ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:shared ], + owl:minCardinality 0 ; + owl:onProperty linkml:slot_uri ], [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassDefinition ; + owl:minCardinality 0 ; owl:onProperty linkml:domain ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:is_grouping_slot ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:locally_reflexive ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:identifier ], + owl:onProperty linkml:reflexive ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:shared ], + owl:onProperty linkml:is_a ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Definition ; - owl:onProperty linkml:owner ], + owl:minCardinality 0 ; + owl:onProperty linkml:inverse ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:mixins ], + owl:allValuesFrom owl:Thing ; + owl:onProperty linkml:reflexive_transitive_form_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:readonly ], + owl:onProperty linkml:is_class_field ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:children_are_mutually_disjoint ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty linkml:slot_uri ], + owl:onProperty linkml:ifabsent ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:reflexive ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:union_of ], + owl:onProperty linkml:symmetric ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:transitive_form_of ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:owner ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:is_usage_slot ], + owl:onProperty linkml:list_elements_unique ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:path_rule ], + owl:onProperty linkml:role ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:singular_name ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty linkml:slot_uri ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:relational_role ], + owl:onProperty linkml:children_are_mutually_disjoint ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:type_mappings ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:locally_reflexive ], + owl:onProperty linkml:inherited ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:list_elements_ordered ], + owl:onProperty linkml:transitive_form_of ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:is_grouping_slot ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:subproperty_of ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:role ], + owl:onProperty linkml:list_elements_unique ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:readonly ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:domain ], + owl:onProperty linkml:slot_group ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:is_class_field ], + owl:onProperty linkml:subproperty_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:inherited ], + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:usage_slot_name ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:designates_type ], + owl:onProperty linkml:mixins ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:reflexive_transitive_form_of ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:is_usage_slot ], + owl:onProperty linkml:owner ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:mixins ], + owl:onProperty linkml:designates_type ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:symmetric ], + owl:onProperty linkml:singular_name ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:relational_role ], + owl:onProperty linkml:slot_uri ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:transitive ], + owl:onProperty linkml:domain ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:children_are_mutually_disjoint ], + owl:onProperty linkml:usage_slot_name ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:asymmetric ], + owl:onProperty linkml:reflexive_transitive_form_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:list_elements_unique ], + owl:onProperty linkml:type_mappings ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:is_a ], + owl:maxCardinality 1 ; + owl:onProperty linkml:reflexive ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:irreflexive ], + owl:onProperty linkml:readonly ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:is_a ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:disjoint_with ], + owl:onProperty linkml:apply_to ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:inverse ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:is_class_field ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:union_of ], + owl:onProperty linkml:is_grouping_slot ], [ a owl:Restriction ; - owl:allValuesFrom linkml:ClassDefinition ; - owl:onProperty linkml:domain_of ], + owl:minCardinality 0 ; + owl:onProperty linkml:readonly ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:list_elements_unique ], + owl:onProperty linkml:is_class_field ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:symmetric ], + owl:minCardinality 0 ; + owl:onProperty linkml:domain_of ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:list_elements_unique ], + owl:onProperty linkml:children_are_mutually_disjoint ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:inherited ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:locally_reflexive ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; owl:onProperty linkml:children_are_mutually_disjoint ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:is_grouping_slot ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:inherited ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:is_a ], + owl:onProperty linkml:owner ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:subproperty_of ], + owl:onProperty linkml:designates_type ], [ a owl:Restriction ; - owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:inverse ], + owl:allValuesFrom linkml:PathExpression ; + owl:onProperty linkml:path_rule ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:alias ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:TypeMapping ; + owl:onProperty linkml:type_mappings ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:irreflexive ], + owl:onProperty linkml:singular_name ], [ a owl:Restriction ; - owl:allValuesFrom linkml:PathExpression ; - owl:onProperty linkml:path_rule ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:designates_type ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:slot_group ], + owl:onProperty linkml:locally_reflexive ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:ClassDefinition ; + owl:onProperty linkml:domain ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:identifier ], [ a owl:Restriction ; owl:allValuesFrom [ owl:intersectionOf ( [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty linkml:is_grouping_slot ] linkml:SlotDefinition ) ] ; owl:onProperty linkml:slot_group ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:list_elements_ordered ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:owner ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty linkml:inverse ], + owl:onProperty linkml:usage_slot_name ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty linkml:ifabsent ], + owl:onProperty linkml:asymmetric ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:reflexive_transitive_form_of ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:singular_name ], + owl:onProperty linkml:is_usage_slot ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:irreflexive ], + owl:onProperty linkml:key ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:slot_uri ], + owl:onProperty linkml:alias ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:alias ], + owl:onProperty linkml:is_grouping_slot ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:alias ], + owl:allValuesFrom linkml:Definition ; + owl:onProperty linkml:owner ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:inherited ], + owl:onProperty linkml:asymmetric ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:readonly ], [ a owl:Restriction ; owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:disjoint_with ], + owl:onProperty linkml:union_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:is_grouping_slot ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:irreflexive ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:subproperty_of ], + owl:onProperty linkml:path_rule ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:list_elements_ordered ], [ a owl:Restriction ; owl:allValuesFrom linkml:SlotDefinition ; - owl:onProperty linkml:apply_to ], + owl:onProperty linkml:transitive_form_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:TypeMapping ; - owl:onProperty linkml:type_mappings ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:subproperty_of ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty linkml:transitive ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:path_rule ], + owl:onProperty linkml:irreflexive ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:ifabsent ], + owl:onProperty linkml:locally_reflexive ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty linkml:identifier ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:ifabsent ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:reflexive ], + owl:onProperty linkml:relational_role ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:inverse ], + owl:maxCardinality 1 ; + owl:onProperty linkml:is_usage_slot ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:usage_slot_name ], + owl:onProperty linkml:key ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:shared ], + owl:onProperty linkml:identifier ], [ a owl:Restriction ; - owl:allValuesFrom linkml:RelationalRoleEnum ; - owl:onProperty linkml:relational_role ], + owl:maxCardinality 1 ; + owl:onProperty linkml:alias ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty linkml:domain_of ], + owl:onProperty linkml:transitive ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:usage_slot_name ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:is_usage_slot ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty linkml:disjoint_with ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Boolean ; + owl:onProperty linkml:key ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:is_a ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:designates_type ], + owl:onProperty linkml:asymmetric ], [ a owl:Restriction ; - owl:allValuesFrom owl:Thing ; - owl:onProperty linkml:reflexive_transitive_form_of ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:inverse ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:role ], + owl:allValuesFrom linkml:ClassDefinition ; + owl:onProperty linkml:domain_of ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:is_class_field ], + owl:minCardinality 0 ; + owl:onProperty linkml:shared ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:identifier ], + owl:onProperty linkml:path_rule ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:alias ], + owl:maxCardinality 1 ; + owl:onProperty linkml:list_elements_ordered ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:key ], + owl:onProperty linkml:list_elements_ordered ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:is_class_field ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:mixins ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty linkml:transitive ], + owl:maxCardinality 1 ; + owl:onProperty linkml:irreflexive ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:readonly ], + owl:maxCardinality 1 ; + owl:onProperty linkml:relational_role ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty linkml:asymmetric ], + owl:onProperty linkml:transitive ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty linkml:locally_reflexive ], + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:apply_to ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty linkml:shared ], [ a owl:Restriction ; owl:allValuesFrom linkml:Boolean ; - owl:onProperty linkml:list_elements_ordered ], + owl:onProperty linkml:shared ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:RelationalRoleEnum ; + owl:onProperty linkml:relational_role ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:SlotDefinition ; + owl:onProperty linkml:disjoint_with ], linkml:Definition, linkml:SlotExpression ; skos:altLabel "attribute", diff --git a/tests/linkml/test_base/__snapshots__/meta.ttl b/tests/linkml/test_base/__snapshots__/meta.ttl index 88ace46704..2f2a25939d 100644 --- a/tests/linkml/test_base/__snapshots__/meta.ttl +++ b/tests/linkml/test_base/__snapshots__/meta.ttl @@ -4093,7 +4093,7 @@ linkml:unique_keys OIO:inSubset linkml:BasicSubset , linkml:RelationalModelProfi skos:inScheme "https://w3id.org/linkml/meta"^^xsd:anyURI ; skos:note "Not to be confused with a \"singular unique key\", which is defined by means of the `key` slot, or with an \"identifier\", which is defined by means of the \"identifier\" slot. Compound keys, singular unique keys, and identifiers all create a unicity constraint, but singular unique keys and identifiers have additional effects that compound keys do not have.\n" ; linkml:definition_uri "https://w3id.org/linkml/unique_keys"^^xsd:anyURI ; - linkml:description "A collection of named unique keys for this class. Such unique keys may be spread over several slots, which is why there are also called \"compound keys\". A unique key uniquely identifies instances of the class within a given container, meaning there cannot be two (or more) instances of the class with the same values for all the slots that make up the unique key." ; + linkml:description "A collection of named unique keys for this class. Such unique keys may be spread over several slots, which is why they are also called \"compound keys\". A unique key uniquely identifies instances of the class within a given container, meaning there cannot be two (or more) instances of the class with the same values for all the slots that make up the unique key." ; linkml:domain linkml:ClassDefinition ; linkml:domain_of linkml:ClassDefinition ; linkml:inlined true ; diff --git a/tests/linkml_runtime/test_linkml_model/test_linkml_files.py b/tests/linkml_runtime/test_linkml_model/test_linkml_files.py index 76f99c3e03..2ac566ec87 100644 --- a/tests/linkml_runtime/test_linkml_model/test_linkml_files.py +++ b/tests/linkml_runtime/test_linkml_model/test_linkml_files.py @@ -1,3 +1,7 @@ +import re +import subprocess +import tempfile +from collections.abc import Callable, Iterator from importlib.util import find_spec from itertools import product from pathlib import Path @@ -130,15 +134,65 @@ def test_fixed_meta_url(): """Source files resolved locally at runtime by generators (YAML for schema imports, JSONLD for context resolution). Drift here means generators silently use stale definitions.""" -LINKML_MODEL_MAIN_BASE = "https://raw.githubusercontent.com/linkml/linkml-model/main/linkml_model/" -"""Base URL for the source-of-truth copies on linkml-model's main branch. +UPSTREAM_SHA_FILE = _LOCAL_BASE / "UPSTREAM_SHA" +"""File written by ``make update_model`` that records the upstream linkml-model commit SHA +that was vendored. The test uses this SHA to fetch the exact same revision from GitHub.""" -We compare against main rather than the w3id.org redirect because the redirect lags behind: -it points to gh-pages, which only updates after a successful PyPI/docs publish workflow. -A pre-release vendored bump (where local is intentionally ahead of the latest published -release) would otherwise false-alarm here. Comparing to main catches the actually-useful -signal — vendored files out of sync with what was merged upstream — without coupling to -the publish pipeline.""" +LINKML_MODEL_GITHUB_RAW_BASE = "https://raw.githubusercontent.com/linkml/linkml-model/" +"""Base URL for raw content on the linkml-model GitHub repository.""" + +LINKML_MODEL_REPO = "https://github.com/linkml/linkml-model.git" +"""URL of the upstream linkml-model Git repository.""" + +LINKML_MODEL_MAIN_BASE = f"{LINKML_MODEL_GITHUB_RAW_BASE}main/linkml_model/" +"""Base URL for the source-of-truth copies on linkml-model's main branch.""" + + +def _get_upstream_sha() -> str: + """Read the upstream commit SHA recorded by ``make update_model``. + + Returns the 40-character hex SHA written to ``UPSTREAM_SHA`` at vendoring time. + """ + regenerate = "Run 'make update_model' in packages/linkml_runtime/ to regenerate it." + assert UPSTREAM_SHA_FILE.exists(), f"{UPSTREAM_SHA_FILE} not found. {regenerate}" + + sha = UPSTREAM_SHA_FILE.read_text().strip() + assert re.fullmatch(r"[0-9a-f]{40}", sha), ( + f"{UPSTREAM_SHA_FILE} does not contain a 40-character hex commit SHA (got {sha!r}). {regenerate}" + ) + return sha + + +@pytest.fixture(scope="session") +def upstream_file_reader() -> Iterator[Callable[[str], str]]: + """Read files from the vendored upstream commit, fetching it only once per session. + + Uses the git protocol (``git fetch`` + ``git show``) rather than the GitHub REST + API to avoid IP-based rate limiting. The fetch is the expensive part, so it runs + a single time and every lookup reuses the same bare repository. + + Yields a callable taking a path inside the repository (e.g. + ``"linkml_model/model/schema/meta.yaml"``) and returning its content. + """ + sha = _get_upstream_sha() + with tempfile.TemporaryDirectory() as tmp: + subprocess.run(["git", "init", "--bare", "-q", tmp], check=True) + subprocess.run( + ["git", "-C", tmp, "fetch", "--depth=1", LINKML_MODEL_REPO, sha], + check=True, + capture_output=True, + ) + + def read(repo_path: str) -> str: + result = subprocess.run( + ["git", "-C", tmp, "show", f"FETCH_HEAD:{repo_path}"], + check=True, + capture_output=True, + text=True, + ) + return result.stdout + + yield read def _linkml_model_main_url(source: Source, fmt: Format) -> str: @@ -149,12 +203,45 @@ def _linkml_model_main_url(source: Source, fmt: Format) -> str: @pytest.mark.network @pytest.mark.parametrize("source,fmt", VENDORED_RUNTIME_FILES) -def test_vendored_files_match_upstream(source, fmt): - """Detect drift between vendored files and their upstream linkml-model main version. +def test_vendored_files_match_upstream(source, fmt, upstream_file_reader): + """Detect drift between vendored files and the upstream commit they were vendored from. Generators resolve these files locally instead of fetching from the network. - If upstream changes without updating the vendored copies, generated output - will silently diverge from what users expect. + The expected upstream revision is read from ``UPSTREAM_SHA``, which is written + by ``make update_model`` at vendoring time and committed alongside the files. + If the vendored files were modified without re-running ``make update_model``, + this test will catch it. + + File content is fetched via the git protocol (not the GitHub REST API) to + avoid IP-based rate limiting. + """ + sha = _get_upstream_sha() + local_path = Path(LOCAL_PATH_FOR(source, fmt)) + repo_path = f"linkml_model/{Path(LOCAL_PATH_FOR(source, fmt)).relative_to(_LOCAL_BASE).as_posix()}" + + local_content = local_path.read_text() + upstream_content = upstream_file_reader(repo_path) + + assert local_content == upstream_content, ( + f"Vendored {local_path.name} differs from upstream {LINKML_MODEL_REPO} " + f"at {repo_path} (SHA {sha[:12]}). " + "Run 'make update_model' in packages/linkml_runtime/ to re-vendor the files." + ) + + +@pytest.mark.network +@pytest.mark.upstream_main +@pytest.mark.parametrize("source,fmt", VENDORED_RUNTIME_FILES) +def test_vendored_files_match_upstream_main(source, fmt): + """Detect drift between vendored files and the linkml-model main branch. + + This is a soft-fail early-warning test. It catches cases where upstream main + has moved ahead of the vendored files before a new release is cut. Failures + here are informational — they do not block a PR — but signal that a vendored + update may be needed soon. + + For the hard check against the vendored commit, see + ``test_vendored_files_match_upstream``. """ local_path = Path(LOCAL_PATH_FOR(source, fmt)) url = _linkml_model_main_url(source, fmt) @@ -164,6 +251,7 @@ def test_vendored_files_match_upstream(source, fmt): assert response.ok, f"Failed to fetch {url}: {response.status_code}" assert local_content == response.text, ( - f"Vendored {local_path.name} differs from upstream {url}. " - "Update vendored files to match the current upstream main." + f"Vendored {local_path.name} differs from upstream main {url}. " + "This is an early warning: upstream main has diverged from the vendored files. " + "No action is required until a new linkml-model release is cut." ) From 65bc9bf35d70a936e9fbc4ad66be2e3a5b025b2c Mon Sep 17 00:00:00 2001 From: Corey Cox <69321580+amc-corey-cox@users.noreply.github.com> Date: Wed, 12 Aug 2026 17:20:40 -0500 Subject: [PATCH 55/72] fix(ci): eliminate two intermittent test failures (#3885) * fix(notebooks): correct the yamlmagic install cell in examples.ipynb The flags preceded the `install` subcommand, so uv rejected the command ("unexpected argument '--disable-pip-version-check'"), yamlmagic was never installed, and the following `%reload_ext yamlmagic` raised ModuleNotFoundError. All notebooks share one venv, so this only surfaced when examples.ipynb happened to run before a sibling that installs yamlmagic correctly. Ordering comes from os.listdir, which is filesystem order, so Notebook Tests failed intermittently on PRs that had nothing to do with notebooks -- and passed the rest of the time on a dependency it never installed itself. Verified against a venv with yamlmagic absent: the notebook fails before the change and passes after, installing yamlmagic itself. Refs #3879. * fix(tests): fetch creature schema fixtures from raw.githubusercontent.com Both remote creature fixtures fetched through github.com/.../raw/..., which 302s to raw.githubusercontent.com. The extra hop through the more aggressively rate-limited host is where `RemoteDisconnected: Remote end closed connection without response` kept coming from -- four occurrences today, each taking out all six parametrisations at once and reddening required test jobs on unrelated PRs. Two URLs move: CREATURE_SCHEMA_RAW_URL, used by creature_view_direct_url, and the mcc prefix in creature_schema_remote.yaml, which is the fetch base for creature_view_remote's import. The github.com/.../tree/... URLs elsewhere under mcc/ are deliberately left alone. Those are schema identifiers and CURIE bases rather than fetch targets, so rewriting them would change schema identity without fixing anything. Refs #3421, which stays open: it also covers a biolink.github.io 503 on a different host that this does not address. --- notebooks/examples.ipynb | 2 +- .../test_utils/input/mcc/creature_schema_remote.yaml | 2 +- tests/linkml_runtime/test_utils/test_schemaview.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/notebooks/examples.ipynb b/notebooks/examples.ipynb index 5ba91cc38b..a0b434f144 100644 --- a/notebooks/examples.ipynb +++ b/notebooks/examples.ipynb @@ -18,7 +18,7 @@ } }, "source": [ - "!uv pip -q --disable-pip-version-check install yamlmagic\n", + "!uv pip install -q --disable-pip-version-check yamlmagic\n", "%reload_ext yamlmagic" ], "outputs": [], diff --git a/tests/linkml_runtime/test_utils/input/mcc/creature_schema_remote.yaml b/tests/linkml_runtime/test_utils/input/mcc/creature_schema_remote.yaml index 833975cab2..72d528c3c8 100644 --- a/tests/linkml_runtime/test_utils/input/mcc/creature_schema_remote.yaml +++ b/tests/linkml_runtime/test_utils/input/mcc/creature_schema_remote.yaml @@ -5,6 +5,6 @@ description: | Schema for testing remote imports via a prefix. This produces yields exactly the same schema as creature_schema.yaml, but pulls in the files via remote import. prefixes: - mcc: https://github.com/linkml/linkml/raw/refs/heads/main/tests/linkml_runtime/test_utils/input/mcc/ + mcc: https://raw.githubusercontent.com/linkml/linkml/refs/heads/main/tests/linkml_runtime/test_utils/input/mcc/ imports: - mcc:creature_schema diff --git a/tests/linkml_runtime/test_utils/test_schemaview.py b/tests/linkml_runtime/test_utils/test_schemaview.py index 9a2c018f01..0943ab558d 100644 --- a/tests/linkml_runtime/test_utils/test_schemaview.py +++ b/tests/linkml_runtime/test_utils/test_schemaview.py @@ -57,7 +57,7 @@ CREATURE_SCHEMA = "creature_schema" CREATURE_SCHEMA_BASE_URL = "https://github.com/linkml/linkml/tree/main/tests/linkml_runtime/test_utils/input/mcc" -CREATURE_SCHEMA_RAW_URL = "https://github.com/linkml/linkml/raw/refs/heads/main/tests/linkml_runtime/test_utils/input/mcc/creature_schema.yaml" +CREATURE_SCHEMA_RAW_URL = "https://raw.githubusercontent.com/linkml/linkml/refs/heads/main/tests/linkml_runtime/test_utils/input/mcc/creature_schema.yaml" CREATURE_SCHEMA_BASE_PATH = INPUT_DIR_PATH / "mcc" From dd7c81aa6ef8f5fe764cdbb850a12295ce477201 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Aug 2026 07:55:05 -0500 Subject: [PATCH 56/72] build(deps): update jsonschema[format] requirement from >=4.0.0 to >=4.26.0 (#3862) * fix(ci): retry transient network failures in the link checker Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Corey Cox <69321580+amc-corey-cox@users.noreply.github.com> --- .github/scripts/check_links.py | 57 +++++++++++++++++++++++++--------- packages/linkml/pyproject.toml | 2 +- uv.lock | 55 ++++++++++++++++++++++---------- 3 files changed, 82 insertions(+), 32 deletions(-) diff --git a/.github/scripts/check_links.py b/.github/scripts/check_links.py index 256fa18163..351549a85c 100644 --- a/.github/scripts/check_links.py +++ b/.github/scripts/check_links.py @@ -11,6 +11,7 @@ import random import re import sys +import time from collections import defaultdict from datetime import datetime, timedelta from pathlib import Path @@ -139,24 +140,19 @@ def needs_check(url: str, cache: dict[str, dict], ttl_days: int, jitter_days: in return True -def check_url(url: str, timeout: int = 10) -> tuple[str, str]: - """ - Check a URL and return (status, error_message). +TRANSIENT_STATUSES = {"timeout", "connection_error"} +"""Failures that say the network misbehaved, not that the link is dead. - Don't follow redirects - accept 3xx as valid (the redirect itself is the response). - This avoids false failures when redirect targets have bot protection. +A dead link answers with 404. A dropped connection or a timeout is weather, and +retrying clears it -- so these are retried before being reported. +""" + +RETRY_ATTEMPTS = 3 +RETRY_BACKOFF_SECONDS = 2 - Returns: - Tuple of (status_code_or_error, error_message_or_empty) - """ - # Self-referencing repo URLs: verify the file exists locally - repo_match = REPO_FILE_PATTERN.match(url) - if repo_match: - path = Path(repo_match.group(1)) - if path.exists(): - return "200", "" - return "404", f"Local path not found: {path}" +def _attempt_url(url: str, timeout: int) -> tuple[str, str]: + """Make a single request and classify the outcome. See ``check_url``.""" try: response = requests.head( url, @@ -184,6 +180,37 @@ def check_url(url: str, timeout: int = 10) -> tuple[str, str]: return "error", str(e) +def check_url(url: str, timeout: int = 10) -> tuple[str, str]: + """ + Check a URL and return (status, error_message). + + Don't follow redirects - accept 3xx as valid (the redirect itself is the response). + This avoids false failures when redirect targets have bot protection. + + Transient network failures are retried up to ``RETRY_ATTEMPTS`` times with a + linear backoff, so a single dropped connection is not reported as a broken link. + + Returns: + Tuple of (status_code_or_error, error_message_or_empty) + """ + # Self-referencing repo URLs: verify the file exists locally + repo_match = REPO_FILE_PATTERN.match(url) + if repo_match: + path = Path(repo_match.group(1)) + if path.exists(): + return "200", "" + return "404", f"Local path not found: {path}" + + for attempt in range(1, RETRY_ATTEMPTS + 1): + status, message = _attempt_url(url, timeout) + if status not in TRANSIENT_STATUSES or attempt == RETRY_ATTEMPTS: + return status, message + time.sleep(RETRY_BACKOFF_SECONDS * attempt) + + # Unreachable: the loop always returns on its final attempt. + raise AssertionError("retry loop exited without returning") + + def main(): parser = argparse.ArgumentParser(description="Check links in documentation with caching and rate limiting.") parser.add_argument( diff --git a/packages/linkml/pyproject.toml b/packages/linkml/pyproject.toml index 1c9a7317d5..5247a2d607 100644 --- a/packages/linkml/pyproject.toml +++ b/packages/linkml/pyproject.toml @@ -45,7 +45,7 @@ dependencies = [ # Specifier syntax: https://peps.python.org/pep-0631/ "isodate >= 0.6.0", "jinja2 >= 3.1.0", "jsonasobj2 >= 1.0.3, < 2.0.0", - "jsonschema[format] >= 4.0.0", + "jsonschema[format]>=4.26.0", "linkml-runtime >= 1.10.0, < 2.0.0", "openpyxl", "parse", diff --git a/uv.lock b/uv.lock index d6ad86fbee..345767ad3d 100644 --- a/uv.lock +++ b/uv.lock @@ -1881,7 +1881,7 @@ wheels = [ [[package]] name = "jsonschema" -version = "4.24.1" +version = "4.26.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, @@ -1889,9 +1889,9 @@ dependencies = [ { name = "referencing" }, { name = "rpds-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f1/6e/35174c1d3f30560848c82d3c233c01420e047d70925c897a4d6e932b4898/jsonschema-4.24.1.tar.gz", hash = "sha256:fe45a130cc7f67cd0d67640b4e7e3e2e666919462ae355eda238296eafeb4b5d", size = 356635, upload-time = "2025-07-17T14:40:01.05Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/85/7f/ea48ffb58f9791f9d97ccb35e42fea1ebc81c67ce36dc4b8b2eee60e8661/jsonschema-4.24.1-py3-none-any.whl", hash = "sha256:6b916866aa0b61437785f1277aa2cbd63512e8d4b47151072ef13292049b4627", size = 89060, upload-time = "2025-07-17T14:39:59.471Z" }, + { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" }, ] [package.optional-dependencies] @@ -1912,22 +1912,24 @@ format-nongpl = [ { name = "jsonpointer" }, { name = "rfc3339-validator" }, { name = "rfc3986-validator" }, + { name = "rfc3987-syntax" }, { name = "uri-template" }, { name = "webcolors" }, ] [[package]] name = "jsonschema-path" -version = "0.4.5" +version = "0.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "attrs" }, { name = "pathable" }, { name = "pyyaml" }, { name = "referencing" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5b/8a/7e6102f2b8bdc6705a9eb5294f8f6f9ccd3a8420e8e8e19671d1dd773251/jsonschema_path-0.4.5.tar.gz", hash = "sha256:c6cd7d577ae290c7defd4f4029e86fdb248ca1bd41a07557795b3c95e5144918", size = 15113, upload-time = "2026-03-03T09:56:46.87Z" } +sdist = { url = "https://files.pythonhosted.org/packages/39/79/cd02a4df6d9270efdc7d3feefe6edd730b0820c39eeaa107a2faee8322d5/jsonschema_path-0.5.0.tar.gz", hash = "sha256:493b156ba895c97602655b620a8456caa2ce08c1aa389f5a7addec065e6e855c", size = 19597, upload-time = "2026-05-19T20:45:00.971Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/d5/4e96c44f6c1ea3d812cf5391d81a4f5abaa540abf8d04ecd7f66e0ed11df/jsonschema_path-0.4.5-py3-none-any.whl", hash = "sha256:7d77a2c3f3ec569a40efe5c5f942c44c1af2a6f96fe0866794c9ef5b8f87fd65", size = 19368, upload-time = "2026-03-03T09:56:45.39Z" }, + { url = "https://files.pythonhosted.org/packages/04/2c/9e69d73c4297508be9e3b64a970ea3971b3eb8db64ffc5802d40bd25981f/jsonschema_path-0.5.0-py3-none-any.whl", hash = "sha256:2790a070bc7abb08ea3dbe4d340ece4efadf639223001f020c7503229ba068e2", size = 24077, upload-time = "2026-05-19T20:44:59.225Z" }, ] [[package]] @@ -2286,6 +2288,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/da/e9/0d4add7873a73e462aeb45c036a2dead2562b825aa46ba326727b3f31016/kiwisolver-1.4.9-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:fb940820c63a9590d31d88b815e7a3aa5915cad3ce735ab45f0c730b39547de1", size = 73929, upload-time = "2025-08-10T21:27:48.236Z" }, ] +[[package]] +name = "lark" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/34/28fff3ab31ccff1fd4f6c7c7b0ceb2b6968d8ea4950663eadcb5720591a0/lark-1.3.1.tar.gz", hash = "sha256:b426a7a6d6d53189d318f2b6236ab5d6429eaf09259f1ca33eb716eed10d2905", size = 382732, upload-time = "2025-10-27T18:25:56.653Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl", hash = "sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12", size = 113151, upload-time = "2025-10-27T18:25:54.882Z" }, +] + [[package]] name = "lazy-object-proxy" version = "1.12.0" @@ -2463,7 +2474,7 @@ requires-dist = [ { name = "isodate", specifier = ">=0.6.0" }, { name = "jinja2", specifier = ">=3.1.0" }, { name = "jsonasobj2", specifier = ">=1.0.3,<2.0.0" }, - { name = "jsonschema", extras = ["format"], specifier = ">=4.0.0" }, + { name = "jsonschema", extras = ["format"], specifier = ">=4.26.0" }, { name = "linkml-runtime", editable = "packages/linkml_runtime" }, { name = "openapi-spec-validator", specifier = ">=0.8.4" }, { name = "openpyxl" }, @@ -3323,7 +3334,7 @@ wheels = [ [[package]] name = "openapi-schema-validator" -version = "0.8.1" +version = "0.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jsonschema" }, @@ -3333,14 +3344,14 @@ dependencies = [ { name = "referencing" }, { name = "rfc3339-validator" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/21/4b/67b24b2b23d96ea862be2cca3632a546f67a22461200831213e80c3c6011/openapi_schema_validator-0.8.1.tar.gz", hash = "sha256:4c57266ce8cbfa37bb4eb4d62cdb7d19356c3a468e3535743c4562863e1790da", size = 23134, upload-time = "2026-03-02T08:46:29.807Z" } +sdist = { url = "https://files.pythonhosted.org/packages/98/e8/ab3f27dbca54ec645f7fab714b640907d5d36c2ebb07e87eebd30bd5c81b/openapi_schema_validator-0.9.0.tar.gz", hash = "sha256:b72db64315b89d21834cd3ffef37e3e6893bc876327be2d366e8424b1029afd3", size = 24686, upload-time = "2026-04-27T17:31:27.606Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6f/87/e9f29f463b230d4b47d65e17858c595153a8ca8c1775f16e406aa82d455d/openapi_schema_validator-0.8.1-py3-none-any.whl", hash = "sha256:0f5859794c5bfa433d478dc5ac5e5768d50adc56b14380c8a6fd3a8113e89c9b", size = 19211, upload-time = "2026-03-02T08:46:28.154Z" }, + { url = "https://files.pythonhosted.org/packages/90/c0/5467967d95378b2cfce312e09cbd0c9ab64354a0922379b734f793edd04f/openapi_schema_validator-0.9.0-py3-none-any.whl", hash = "sha256:faa3bbe7c3aa8ca2087ad83f709dc3b7d920283153a570c03e24ea182558aa25", size = 19980, upload-time = "2026-04-27T17:31:25.965Z" }, ] [[package]] name = "openapi-spec-validator" -version = "0.8.4" +version = "0.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jsonschema" }, @@ -3350,9 +3361,9 @@ dependencies = [ { name = "pydantic" }, { name = "pydantic-settings" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/10/de/0199b15f5dde3ca61df6e6b3987420bfd424db077998f0162e8ffe12e4f5/openapi_spec_validator-0.8.4.tar.gz", hash = "sha256:8bb324b9b08b9b368b1359dec14610c60a8f3a3dd63237184eb04456d4546f49", size = 1756847, upload-time = "2026-03-01T15:48:19.499Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8f/d2/640b5149cd5688bc0ad1fdbb4df6a2f7b84a093c8d787c27d566132f8b8b/openapi_spec_validator-0.9.0.tar.gz", hash = "sha256:6d648cff6490ebb799dcfe273792f2941c050158854c721f086599d845da78b8", size = 1756839, upload-time = "2026-05-20T09:23:18.871Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/70/52310f9ece5f4eb02e0b31d538b51f729169517767a8d0100a25db31d67f/openapi_spec_validator-0.8.4-py3-none-any.whl", hash = "sha256:cf905117063d7c4d495c8a5a167a1f2a8006da6ffa8ba234a7ed0d0f11454d51", size = 50330, upload-time = "2026-03-01T15:48:17.668Z" }, + { url = "https://files.pythonhosted.org/packages/95/d8/321ff889330acca2e3097f3d4f80a40bcc41b6d34d302978ab32c449520b/openapi_spec_validator-0.9.0-py3-none-any.whl", hash = "sha256:222fecffc7714f6d0a6ad62c0e4b66cc2b7dbfafb7b93acfc6c308abbdb51af8", size = 50328, upload-time = "2026-05-20T09:23:17.017Z" }, ] [[package]] @@ -3501,11 +3512,11 @@ wheels = [ [[package]] name = "pathable" -version = "0.5.0" +version = "0.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/55/b748445cb4ea6b125626f15379be7c96d1035d4fa3e8fee362fa92298abf/pathable-0.5.0.tar.gz", hash = "sha256:d81938348a1cacb525e7c75166270644782c0fb9c8cecc16be033e71427e0ef1", size = 16655, upload-time = "2026-02-20T08:47:00.748Z" } +sdist = { url = "https://files.pythonhosted.org/packages/66/f3/5a20387de9bcd0607871bfc2198ee0e15836da7baa4592ccd7f24c27c986/pathable-0.6.0.tar.gz", hash = "sha256:6404b8b82aef5ff0fd478934137128b99b12212ba35afdde5525ca4f8388ea58", size = 18970, upload-time = "2026-05-19T18:15:11.911Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/52/96/5a770e5c461462575474468e5af931cff9de036e7c2b4fea23c1c58d2cbe/pathable-0.5.0-py3-none-any.whl", hash = "sha256:646e3d09491a6351a0c82632a09c02cdf70a252e73196b36d8a15ba0a114f0a6", size = 16867, upload-time = "2026-02-20T08:46:59.536Z" }, + { url = "https://files.pythonhosted.org/packages/a2/e8/6d75ffd9784bce2e93d1ae4415649427e39a53bb172d4672b2b59c6f0a7b/pathable-0.6.0-py3-none-any.whl", hash = "sha256:82c4ca6c98c502ad12e0d4e9779b6210afee93c38990988c8c5d1b49bdcdf566", size = 18983, upload-time = "2026-05-19T18:15:10.728Z" }, ] [[package]] @@ -4677,6 +4688,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl", hash = "sha256:10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53", size = 13377, upload-time = "2018-07-29T17:23:45.313Z" }, ] +[[package]] +name = "rfc3987-syntax" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "lark" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2c/06/37c1a5557acf449e8e406a830a05bf885ac47d33270aec454ef78675008d/rfc3987_syntax-1.1.0.tar.gz", hash = "sha256:717a62cbf33cffdd16dfa3a497d81ce48a660ea691b1ddd7be710c22f00b4a0d", size = 14239, upload-time = "2025-07-18T01:05:05.015Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl", hash = "sha256:6c3d97604e4c5ce9f714898e05401a0445a641cfa276432b0a648c80856f6a3f", size = 8046, upload-time = "2025-07-18T01:05:03.843Z" }, +] + [[package]] name = "rich" version = "14.2.0" From 70c66285aff52f2f57f33c846b8c7bccad8fa781 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Aug 2026 09:31:50 -0500 Subject: [PATCH 57/72] build(deps-dev): bump sphinx-rtd-theme from 3.0.2 to 3.1.0 * build(deps): cap open dependabot PRs at 3 Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: amc-corey-cox <69321580+amc-corey-cox@users.noreply.github.com> --- .github/dependabot.yml | 4 +++- uv.lock | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index c90c81eda6..1121664382 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -31,7 +31,9 @@ updates: - "*" update-types: - "patch" - open-pull-requests-limit: 10 + # Bounds rebase storms: every open PR runs the full matrix, and dependabot + # rebases all of them when main moves. + open-pull-requests-limit: 3 # Wait 7 days after a release before opening an update PR, giving time for # malware/CVE advisories to surface (mirrors the uv `exclude-newer` cooldown). cooldown: diff --git a/uv.lock b/uv.lock index 345767ad3d..bed19d0bcd 100644 --- a/uv.lock +++ b/uv.lock @@ -5050,7 +5050,7 @@ wheels = [ [[package]] name = "sphinx-rtd-theme" -version = "3.0.2" +version = "3.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "docutils" }, @@ -5058,9 +5058,9 @@ dependencies = [ { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "sphinxcontrib-jquery" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/91/44/c97faec644d29a5ceddd3020ae2edffa69e7d00054a8c7a6021e82f20335/sphinx_rtd_theme-3.0.2.tar.gz", hash = "sha256:b7457bc25dda723b20b086a670b9953c859eab60a2a03ee8eb2bb23e176e5f85", size = 7620463, upload-time = "2024-11-13T11:06:04.545Z" } +sdist = { url = "https://files.pythonhosted.org/packages/84/68/a1bfbf38c0f7bccc9b10bbf76b94606f64acb1552ae394f0b8285bfaea25/sphinx_rtd_theme-3.1.0.tar.gz", hash = "sha256:b44276f2c276e909239a4f6c955aa667aaafeb78597923b1c60babc76db78e4c", size = 7620915, upload-time = "2026-01-12T16:03:31.17Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/85/77/46e3bac77b82b4df5bb5b61f2de98637724f246b4966cfc34bc5895d852a/sphinx_rtd_theme-3.0.2-py2.py3-none-any.whl", hash = "sha256:422ccc750c3a3a311de4ae327e82affdaf59eb695ba4936538552f3b00f4ee13", size = 7655561, upload-time = "2024-11-13T11:06:02.094Z" }, + { url = "https://files.pythonhosted.org/packages/87/c7/b5c8015d823bfda1a346adb2c634a2101d50bb75d421eb6dcb31acd25ebc/sphinx_rtd_theme-3.1.0-py2.py3-none-any.whl", hash = "sha256:1785824ae8e6632060490f67cf3a72d404a85d2d9fc26bce3619944de5682b89", size = 7655617, upload-time = "2026-01-12T16:03:28.101Z" }, ] [[package]] From ffd3715260c9eb5746563a734e6b9f2829747980 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Aug 2026 10:00:09 -0500 Subject: [PATCH 58/72] build(deps): bump jsonschema from 4.24.1 to 4.26.0 (#3863) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Corey Cox <69321580+amc-corey-cox@users.noreply.github.com> --- packages/linkml_runtime/pyproject.toml | 2 +- uv.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/linkml_runtime/pyproject.toml b/packages/linkml_runtime/pyproject.toml index f135d33f59..0016490de6 100644 --- a/packages/linkml_runtime/pyproject.toml +++ b/packages/linkml_runtime/pyproject.toml @@ -40,7 +40,7 @@ dependencies = [ "hbreader", "json-flattener >=0.1.9", "jsonasobj2 ==1.*,>=1.0.0,>=1.0.4", - "jsonschema >=3.2.0", + "jsonschema>=4.26.0", "prefixcommons >=0.1.12", "pyyaml", "rdflib >=6.0.0", diff --git a/uv.lock b/uv.lock index bed19d0bcd..d4b9a1cfbe 100644 --- a/uv.lock +++ b/uv.lock @@ -2616,7 +2616,7 @@ requires-dist = [ { name = "isodate", marker = "python_full_version < '3.11'", specifier = ">=0.7.2,<1.0.0" }, { name = "json-flattener", specifier = ">=0.1.9" }, { name = "jsonasobj2", specifier = "==1.*,>=1.0.0,>=1.0.4" }, - { name = "jsonschema", specifier = ">=3.2.0" }, + { name = "jsonschema", specifier = ">=4.26.0" }, { name = "prefixcommons", specifier = ">=0.1.12" }, { name = "prefixmaps", specifier = ">=0.1.4" }, { name = "pydantic", specifier = ">=1.10.2,<3.0.0" }, From f308404a032d66dd8893b61ed390005e2cdd7519 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Aug 2026 10:43:28 -0500 Subject: [PATCH 59/72] build(deps-dev): bump numpydantic from 1.7.0 to 1.10.0 (#3865) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/linkml/pyproject.toml | 2 +- uv.lock | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/linkml/pyproject.toml b/packages/linkml/pyproject.toml index 5247a2d607..d7a2897180 100644 --- a/packages/linkml/pyproject.toml +++ b/packages/linkml/pyproject.toml @@ -71,7 +71,7 @@ lint = [ "black >= 24.0.0", ] typing = [ - "numpydantic >= 1.6.1", + "numpydantic>=1.10.0", ] shacl = [ "pyshacl >= 0.25.0", diff --git a/uv.lock b/uv.lock index d4b9a1cfbe..e0bfc91987 100644 --- a/uv.lock +++ b/uv.lock @@ -2513,7 +2513,7 @@ dev = [ { name = "nbformat" }, { name = "numpy", marker = "python_full_version < '3.12'", specifier = ">=1.24.3" }, { name = "numpy", marker = "python_full_version >= '3.12'", specifier = ">=1.25.2" }, - { name = "numpydantic", specifier = ">=1.6.1" }, + { name = "numpydantic", specifier = ">=1.10.0" }, { name = "openapi-spec-validator", specifier = ">=0.8.4" }, { name = "pandas" }, { name = "pandera", specifier = ">=0.19.0" }, @@ -2552,7 +2552,7 @@ shacl = [{ name = "pyshacl", specifier = ">=0.25.0" }] tests = [ { name = "black", specifier = ">=24.0.0" }, { name = "duckdb", specifier = ">=1.5.2" }, - { name = "numpydantic", specifier = ">=1.6.1" }, + { name = "numpydantic", specifier = ">=1.10.0" }, { name = "pyshacl", specifier = ">=0.25.0" }, { name = "sqlalchemy-bigquery", specifier = ">=1.9.0" }, ] @@ -2571,7 +2571,7 @@ tests-extra = [ ] tests-rustgen = [{ name = "maturin", specifier = ">=1.14.1" }] typedb = [{ name = "typedb-driver", specifier = ">=3.0,<4.0" }] -typing = [{ name = "numpydantic", specifier = ">=1.6.1" }] +typing = [{ name = "numpydantic", specifier = ">=1.10.0" }] [[package]] name = "linkml-runtime" @@ -3319,7 +3319,7 @@ wheels = [ [[package]] name = "numpydantic" -version = "1.7.0" +version = "1.10.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, @@ -3327,9 +3327,9 @@ dependencies = [ { name = "pydantic" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/59/ba/6bf5e0a7cc3fbfbb02a7824926cad73c58df374322eb7728b378023a76dc/numpydantic-1.7.0.tar.gz", hash = "sha256:268285bee026d9dfdf23efeee13f60c3b75d47de2ffdf2e58b4f0c17a6824e3b", size = 80412, upload-time = "2025-10-11T05:23:56.654Z" } +sdist = { url = "https://files.pythonhosted.org/packages/95/5c/0cfed22c6483338c73d2faf182d863c47836e5f8f34e65b70aea345e7b72/numpydantic-1.10.0.tar.gz", hash = "sha256:a17d5ccc3b893c4a2e539c81c2f18960d70884ad7fcaa09c9eb56a95e8daf4a3", size = 98771, upload-time = "2026-06-22T22:04:46.251Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/21/e0/42f0ea229a8b5ada24a1eae4f5522b80ab65b4083f5cea4c7372bc894af3/numpydantic-1.7.0-py3-none-any.whl", hash = "sha256:81314ed00423efa954a711a48003dba5382156e899f677f405ce043f5296b090", size = 86734, upload-time = "2025-10-11T05:23:55.003Z" }, + { url = "https://files.pythonhosted.org/packages/69/15/0dd8e1ff306f97bee18a3ef024bb694f9043ee57474c57f7330f90804cae/numpydantic-1.10.0-py3-none-any.whl", hash = "sha256:1c62a445d305da69a5fa4510f7e7e1c25218f58fe462e5d59548042f1f769e66", size = 101858, upload-time = "2026-06-22T22:04:44.918Z" }, ] [[package]] From 2b6bc3e047cb6206292ca60745309c7a419dcc93 Mon Sep 17 00:00:00 2001 From: Corey Cox <69321580+amc-corey-cox@users.noreply.github.com> Date: Thu, 13 Aug 2026 11:26:55 -0500 Subject: [PATCH 60/72] ci: cancel superseded runs on the same pull request --- .github/workflows/check-external-links.yaml | 6 ++++++ .github/workflows/dependency-audit.yaml | 6 ++++++ .github/workflows/docker-build.yaml | 6 ++++++ .github/workflows/docs-test.yaml | 6 ++++++ .github/workflows/main.yaml | 6 ++++++ .github/workflows/rustgen.yaml | 6 ++++++ .github/workflows/typedb-integration.yaml | 6 ++++++ 7 files changed, 42 insertions(+) diff --git a/.github/workflows/check-external-links.yaml b/.github/workflows/check-external-links.yaml index d561b99cf4..2a5bb1a548 100644 --- a/.github/workflows/check-external-links.yaml +++ b/.github/workflows/check-external-links.yaml @@ -1,6 +1,12 @@ name: Check Sphinx external links env: UV_VERSION: "0.11.21" +concurrency: + # Cancel superseded runs on the same PR. github.ref is refs/pull//merge, + # so each PR is its own group and never cancels another's runs. + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + on: push: branches: [main] diff --git a/.github/workflows/dependency-audit.yaml b/.github/workflows/dependency-audit.yaml index a4e89e4eb6..65b25318d4 100644 --- a/.github/workflows/dependency-audit.yaml +++ b/.github/workflows/dependency-audit.yaml @@ -9,6 +9,12 @@ env: UV_PREVIEW: "1" # Enables the preview uv audit and malware engines UV_MALWARE_CHECK: "1" # Automatically blocks malicious installs on sync/run +concurrency: + # Cancel superseded runs on the same PR. github.ref is refs/pull//merge, + # so each PR is its own group and never cancels another's runs. + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + on: push: branches: diff --git a/.github/workflows/docker-build.yaml b/.github/workflows/docker-build.yaml index 12a55e2f72..36df180ab6 100644 --- a/.github/workflows/docker-build.yaml +++ b/.github/workflows/docker-build.yaml @@ -1,5 +1,11 @@ name: Build Docker Image +concurrency: + # Cancel superseded runs on the same PR. github.ref is refs/pull//merge, + # so each PR is its own group and never cancels another's runs. + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + on: push: branches: diff --git a/.github/workflows/docs-test.yaml b/.github/workflows/docs-test.yaml index 61a9c773e2..4b748ba50b 100644 --- a/.github/workflows/docs-test.yaml +++ b/.github/workflows/docs-test.yaml @@ -1,6 +1,12 @@ name: Build and test documentation env: UV_VERSION: "0.11.21" +concurrency: + # Cancel superseded runs on the same PR. github.ref is refs/pull//merge, + # so each PR is its own group and never cancels another's runs. + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + on: push: branches: diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index a368288331..72abfd4686 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -4,6 +4,12 @@ name: Build and test linkml env: UV_VERSION: "0.11.21" +concurrency: + # Cancel superseded runs on the same PR. github.ref is refs/pull//merge, + # so each PR is its own group and never cancels another's runs. + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + on: push: branches: diff --git a/.github/workflows/rustgen.yaml b/.github/workflows/rustgen.yaml index 418ac9d222..67435405fb 100644 --- a/.github/workflows/rustgen.yaml +++ b/.github/workflows/rustgen.yaml @@ -3,6 +3,12 @@ name: Build and test linkml (rustgen) env: UV_VERSION: "0.11.21" +concurrency: + # Cancel superseded runs on the same PR. github.ref is refs/pull//merge, + # so each PR is its own group and never cancels another's runs. + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + on: pull_request: branches: diff --git a/.github/workflows/typedb-integration.yaml b/.github/workflows/typedb-integration.yaml index 60e79636cd..f73ce340fd 100644 --- a/.github/workflows/typedb-integration.yaml +++ b/.github/workflows/typedb-integration.yaml @@ -1,5 +1,11 @@ # .github/workflows/typedb-integration.yaml name: TypeDB Integration Tests +concurrency: + # Cancel superseded runs on the same PR. github.ref is refs/pull//merge, + # so each PR is its own group and never cancels another's runs. + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + on: pull_request: paths: From 4edefab01a947479749befc913792d9d43b58cb7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Aug 2026 16:51:13 +0000 Subject: [PATCH 61/72] build(deps): bump the patch-updates group across 1 directory with 3 updates Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Corey Cox <69321580+amc-corey-cox@users.noreply.github.com> --- packages/linkml/pyproject.toml | 2 +- packages/linkml_runtime/pyproject.toml | 2 +- uv.lock | 93 +++++++++++++------------- 3 files changed, 49 insertions(+), 48 deletions(-) diff --git a/packages/linkml/pyproject.toml b/packages/linkml/pyproject.toml index d7a2897180..cc043de5a3 100644 --- a/packages/linkml/pyproject.toml +++ b/packages/linkml/pyproject.toml @@ -80,7 +80,7 @@ tests = [ { include-group = "lint" }, { include-group = "typing" }, { include-group = "shacl" }, - "duckdb>=1.5.2", + "duckdb>=1.5.5", "sqlalchemy-bigquery >= 1.9.0", ] dev = [ diff --git a/packages/linkml_runtime/pyproject.toml b/packages/linkml_runtime/pyproject.toml index 0016490de6..2082d9c356 100644 --- a/packages/linkml_runtime/pyproject.toml +++ b/packages/linkml_runtime/pyproject.toml @@ -46,7 +46,7 @@ dependencies = [ "rdflib >=6.0.0", "requests", "prefixmaps >=0.1.4", - "curies>=0.14.4", + "curies>=0.14.6", "pyoxigraph >=0.5.6", "pydantic >=1.10.2, <3.0.0", "isodate >=0.7.2, <1.0.0; python_version < '3.11'", diff --git a/uv.lock b/uv.lock index e0bfc91987..73bd534b11 100644 --- a/uv.lock +++ b/uv.lock @@ -966,16 +966,16 @@ wheels = [ [[package]] name = "curies" -version = "0.14.4" +version = "0.14.6" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, { name = "pystow" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e5/26/6da71ec142b63f6a8cb6e6817f6b9ebf19332846412d2bdde4b6aabe48e1/curies-0.14.4.tar.gz", hash = "sha256:605c272f22466f0f3c331303b2313b1253012bcb32005da903443977044a60b8", size = 73128, upload-time = "2026-07-31T14:30:13.831Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9f/b2/aa2f21c1ef42b046600538aa3221d84b1f5ee4199e383f2014624fc8e047/curies-0.14.6.tar.gz", hash = "sha256:17cde129aba90c151f38aae762b6c26fa2dceda8ed51103c829e805ee11d231c", size = 73340, upload-time = "2026-08-05T08:11:46.482Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f2/87/b38ccafc594379d996f82ea0b417e7741b3b0eed26bebc44da496da62b22/curies-0.14.4-py3-none-any.whl", hash = "sha256:a21444f19d7b92f95c1207837f89fa7ab9040d00eac131bd78642a81eb8144f6", size = 82422, upload-time = "2026-07-31T14:30:12.472Z" }, + { url = "https://files.pythonhosted.org/packages/9e/e9/bfa4d4a47c03180422343be8c69df75f5942276e815a367ae377f32db2d5/curies-0.14.6-py3-none-any.whl", hash = "sha256:a3653afa27576029c491e6ef97d2bc7d9c388afbbf44973e993b8d24fbb0c99c", size = 82629, upload-time = "2026-08-05T08:11:45.123Z" }, ] [[package]] @@ -1036,13 +1036,14 @@ wheels = [ [[package]] name = "deprecated" -version = "1.3.0" +version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wrapt" }, ] +sdist = { url = "https://files.pythonhosted.org/packages/49/85/12f0a49a7c4ffb70572b6c2ef13c90c88fd190debda93b23f026b25f9634/deprecated-1.3.1.tar.gz", hash = "sha256:b1b50e0ff0c1fddaa5708a2c6b0a6588bb09b892825ab2b214ac9ea9d92a5223", size = 2932523, upload-time = "2025-10-30T08:19:02.757Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/66/9c/2665cc17662aacbd948ecc5d685afad60b60b80bcf4a93dd706197d11a4f/deprecated-1.3.0-py2.py3-none-any.whl", hash = "sha256:0efaf13de8bd3f3f86d88f6e1001d3982dae6e64b85302b60230de4d047387bd", size = 11294, upload-time = "2025-10-29T15:39:50.94Z" }, + { url = "https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl", hash = "sha256:597bfef186b6f60181535a29fbe44865ce137a5079f295b479886c82729d5f3f", size = 11298, upload-time = "2025-10-30T08:19:00.758Z" }, ] [[package]] @@ -1091,44 +1092,44 @@ wheels = [ [[package]] name = "duckdb" -version = "1.5.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0c/66/744b4931b799a42f8cb9bc7a6f169e7b8e51195b62b246db407fd90bf15f/duckdb-1.5.2.tar.gz", hash = "sha256:638da0d5102b6cb6f7d47f83d0600708ac1d3cb46c5e9aaabc845f9ba4d69246", size = 18017166, upload-time = "2026-04-13T11:30:09.065Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/00/03b96203d9bf4ff8637de4d42adeca5b43342a5050f656eccce1e69d6879/duckdb-1.5.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:63bf8687feefeed51adf45fa3b062ab8b1b1c350492b7518491b86bae68b1da1", size = 30017339, upload-time = "2026-04-13T11:28:36.134Z" }, - { url = "https://files.pythonhosted.org/packages/01/f4/2f4af0233489fc92822ff6021a2a4e05f7cd75fa1a352a163967fbeeab22/duckdb-1.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:84b193aca20565dedb3172de15f843c659c3a6c773bf14843a9bd781c850e7db", size = 15945057, upload-time = "2026-04-13T11:28:39.21Z" }, - { url = "https://files.pythonhosted.org/packages/34/0a/d41ee8cdeb63cf12f2ee9e6c8e17cc8bacff6468013be703e44fd2a22efa/duckdb-1.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5596bbfc31b1b259db69c8d847b42d036ce2c4804f9ccb28f9fc46a16de7bc53", size = 14199133, upload-time = "2026-04-13T11:28:41.791Z" }, - { url = "https://files.pythonhosted.org/packages/11/39/4da08139b109d7f84b12ecca202a5adfff5b1b20970c01bd82dc09d86a59/duckdb-1.5.2-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8dbd7e31e5dc157bfe8803fa7d2652336265c6c19926c5a4a9b40f8222868d08", size = 19285501, upload-time = "2026-04-13T11:28:44.208Z" }, - { url = "https://files.pythonhosted.org/packages/3c/cc/10a542561634408cbae951a836e645dda784ddc48eaa2ee72701a2992a8e/duckdb-1.5.2-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9cd5e71702d446613750405cde03f66ed268f4c321da071b0472759dad19536", size = 21392488, upload-time = "2026-04-13T11:28:46.923Z" }, - { url = "https://files.pythonhosted.org/packages/1b/61/e9015ee2117f86c2e8396ad66b85c8338b2ecdc9a20eb5b099a537cf3c6a/duckdb-1.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:ce17670bb392ea1b3650537db02bd720908776b5b95f6d2472d31a7de59d1dc1", size = 13096311, upload-time = "2026-04-13T11:28:49.635Z" }, - { url = "https://files.pythonhosted.org/packages/9a/b0/d13e7e396d86c245290b3e93f692a2d27c2fe99f857aaf9205003c00c978/duckdb-1.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7f69164b048e498b9e9140a24343108a5ae5f17bfb3485185f55fdf9b1aa924d", size = 30020978, upload-time = "2026-04-13T11:28:52.486Z" }, - { url = "https://files.pythonhosted.org/packages/70/7b/ae1ec7f516394aa55501d1949af1f731be8d9d7433f0acc3f4632a0ba484/duckdb-1.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:81fc4fbf0b5e25840b39ba2a10b78c6953c0314d5d0434191e7898f34ab1bba3", size = 15947821, upload-time = "2026-04-13T11:28:55.981Z" }, - { url = "https://files.pythonhosted.org/packages/8a/a5/cae0105e01a85f85ead61723bb42dab14c2f8ec49f91e67a2372c02574a4/duckdb-1.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56d38b3c4e0ef2abb58898d0fd423933999ed535c45e75e9d9f72e1d5fed69b8", size = 14201656, upload-time = "2026-04-13T11:28:58.316Z" }, - { url = "https://files.pythonhosted.org/packages/50/db/46c57e8813ac33762bddc9545610ed648751c5b6a379abf2dc6035505ce4/duckdb-1.5.2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:376856066c65ccd55fcb3a380bbe33a71ce089fc4623d229ffc6e82251afdb6d", size = 19285181, upload-time = "2026-04-13T11:29:01.041Z" }, - { url = "https://files.pythonhosted.org/packages/dc/a2/67694010693ec8c8c975e6991f48ef886d35ecbdaa2f287234882a403c21/duckdb-1.5.2-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c69907354ffee94ba8cf782daf0480dab7557f21ce27fffa6c0ea8f74ed4b8e2", size = 21394852, upload-time = "2026-04-13T11:29:03.814Z" }, - { url = "https://files.pythonhosted.org/packages/52/9f/2b1618c5a93949a70dcf105293db7e27bb2b2cc4aeb1ff46b806f430ec81/duckdb-1.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:d9b4f5430bf4f05d4c0dc4c55c75def3a5af4be0343be20fa2bfc577343fbfc9", size = 13095526, upload-time = "2026-04-13T11:29:06.265Z" }, - { url = "https://files.pythonhosted.org/packages/b8/e9/cb39e0d94a32f5333e819112fd01439a31f541f9c56a31b66f9bd209704b/duckdb-1.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:2323c1195c10fb2bb982fc0218c730b43d1b92a355d61e68e3c5f3ac9d44c34f", size = 13946215, upload-time = "2026-04-13T11:29:08.672Z" }, - { url = "https://files.pythonhosted.org/packages/41/de/ebe66bbe78125fc610f4fd415447a65349d94245950f3b3dfb31d028af02/duckdb-1.5.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e6495b00cad16888384119842797c49316a96ae1cb132bb03856d980d95afee1", size = 30064950, upload-time = "2026-04-13T11:29:11.468Z" }, - { url = "https://files.pythonhosted.org/packages/2d/8a/3e25b5d03bcf1fb99d189912f8ce92b1db4f9c8778e1b1f55745973a855a/duckdb-1.5.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d72b8856b1839d35648f38301b058f6232f4d36b463fe4dc8f4d3fdff2df1a2e", size = 15969113, upload-time = "2026-04-13T11:29:14.139Z" }, - { url = "https://files.pythonhosted.org/packages/19/bb/58001f0815002b1a93431bf907f77854085c7d049b83d521814a07b9db0b/duckdb-1.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2a1de4f4d454b8c97aec546c82003fc834d3422ce4bc6a19902f3462ef293bed", size = 14224774, upload-time = "2026-04-13T11:29:16.758Z" }, - { url = "https://files.pythonhosted.org/packages/d3/2f/a7f0de9509d1cef35608aeb382919041cdd70f58c173865c3da6a0d87979/duckdb-1.5.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce0b8141a10d37ecef729c45bc41d334854013f4389f1488bd6035c5579aaac1", size = 19313510, upload-time = "2026-04-13T11:29:19.574Z" }, - { url = "https://files.pythonhosted.org/packages/26/78/eb1e064ea8b9df3b87b167bfd7a407b2f615a4291e06cba756727adfa06c/duckdb-1.5.2-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c99ef73a277c8921bc0a1f16dee38d924484251d9cfd20951748c20fcd5ed855", size = 21429692, upload-time = "2026-04-13T11:29:22.575Z" }, - { url = "https://files.pythonhosted.org/packages/5b/12/05b0c47d14839925c5e35b79081d918ca82e3f236bb724a6f58409dd5291/duckdb-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:8d599758b4e48bf12e18c9b960cf491d219f0c4972d19a45489c05cc5ab36f83", size = 13107594, upload-time = "2026-04-13T11:29:25.43Z" }, - { url = "https://files.pythonhosted.org/packages/0b/2c/80558a82b236e044330e84a154b96aacddb343316b479f3d49be03ea11cb/duckdb-1.5.2-cp312-cp312-win_arm64.whl", hash = "sha256:fc85a5dbcbe6eccac1113c72370d1d3aacfdd49198d63950bdf7d8638a307f00", size = 13927537, upload-time = "2026-04-13T11:29:27.842Z" }, - { url = "https://files.pythonhosted.org/packages/98/f2/e3d742808f138d374be4bb516fade3d1f33749b813650810ab7885cdc363/duckdb-1.5.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:4420b3f47027a7849d0e1815532007f377fa95ee5810b47ea717d35525c12f79", size = 30064879, upload-time = "2026-04-13T11:29:30.763Z" }, - { url = "https://files.pythonhosted.org/packages/72/0d/f3dc1cf97e1267ca15e4307d456f96ce583961f0703fd75e62b2ad8d64fa/duckdb-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bb42e6ed543902e14eae647850da24103a89f0bc2587dec5601b1c1f213bd2ed", size = 15969327, upload-time = "2026-04-13T11:29:33.481Z" }, - { url = "https://files.pythonhosted.org/packages/b1/e0/d5418def53ae4e05a63075705ff44ed5af5a1a5932627eb2b600c5df1c93/duckdb-1.5.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:98c0535cd6d901f61a5ea3c2e26a1fd28482953d794deb183daf568e3aa5dda6", size = 14225107, upload-time = "2026-04-13T11:29:35.882Z" }, - { url = "https://files.pythonhosted.org/packages/16/a7/15aaa59dbecc35e9711980fcdbf525b32a52470b32d18ef678193a146213/duckdb-1.5.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:486c862bf7f163c0110b6d85b3e5c031d224a671cca468f12ebb1d3a348f6b39", size = 19313433, upload-time = "2026-04-13T11:29:38.367Z" }, - { url = "https://files.pythonhosted.org/packages/bd/21/d903cc63a5140c822b7b62b373a87dc557e60c29b321dfb435061c5e67cf/duckdb-1.5.2-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70631c847ca918ee710ec874241b00cf9d2e5be90762cbb2a0389f17823c08f7", size = 21429837, upload-time = "2026-04-13T11:29:41.135Z" }, - { url = "https://files.pythonhosted.org/packages/e3/0a/b770d1f60c70597302130d6247f418549b7094251a02348fbaf1c7e147ae/duckdb-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:52a21823f3fbb52f0f0e5425e20b07391ad882464b955879499b5ff0b45a376b", size = 13107699, upload-time = "2026-04-13T11:29:43.905Z" }, - { url = "https://files.pythonhosted.org/packages/d9/cf/e200fe431d700962d1a908d2ce89f53ccee1cc8db260174ae663ba09686b/duckdb-1.5.2-cp313-cp313-win_arm64.whl", hash = "sha256:411ad438bd4140f189a10e7f515781335962c5d18bd07837dc6d202e3985253d", size = 13927646, upload-time = "2026-04-13T11:29:46.598Z" }, - { url = "https://files.pythonhosted.org/packages/83/a1/f6286c67726cc1ea60a6e3c0d9fbc66527dde24ae089a51bbe298b13ca78/duckdb-1.5.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:6b0fe75c148000f060aa1a27b293cacc0ea08cc1cad724fbf2143d56070a3785", size = 30078598, upload-time = "2026-04-13T11:29:49.828Z" }, - { url = "https://files.pythonhosted.org/packages/de/6a/59febb02f21a4a5c6b0b0099ef7c965fdd5e61e4904cf813809bb792e35f/duckdb-1.5.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:35579b8e3a064b5eaf15b0eafc558056a13f79a0a62e34cc4baf57119daecfec", size = 15975120, upload-time = "2026-04-13T11:29:52.631Z" }, - { url = "https://files.pythonhosted.org/packages/09/70/ce750854d37bb5a45cccbb2c3cb04df4af56aea8fc30a2499bb643b4a9c0/duckdb-1.5.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ea58ff5b0880593a280cf5511734b17711b32ee1f58b47d726e8600848358160", size = 14227762, upload-time = "2026-04-13T11:29:55.564Z" }, - { url = "https://files.pythonhosted.org/packages/28/dc/ad45ac3c0b6c4687dc649e8f6cf01af1c8b0443932a39b2abb4ebcb3babd/duckdb-1.5.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef461bca07313412dc09961c4a4757a851f56b95ac01c58fac6007632b7b94f2", size = 19315668, upload-time = "2026-04-13T11:29:58.427Z" }, - { url = "https://files.pythonhosted.org/packages/cc/b1/1464f468d2e5813f5808de95df9d3113a645a5bfa2ffcaecbc542ddae272/duckdb-1.5.2-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:be37680ddb380015cb37318e378c53511c45c4f0d8fac5599d22b7d092b9217a", size = 21434056, upload-time = "2026-04-13T11:30:01.238Z" }, - { url = "https://files.pythonhosted.org/packages/ce/32/6673607e024722473fa7aafdd29c0e3dd231dd528f6cd8b5797fbeeb229d/duckdb-1.5.2-cp314-cp314-win_amd64.whl", hash = "sha256:0b291786014df1133f8f18b9df4d004484613146e858d71a21791e0fcca16cf4", size = 13633667, upload-time = "2026-04-13T11:30:04.05Z" }, - { url = "https://files.pythonhosted.org/packages/7a/e3/9d34173ec068631faea3ea6e73050700729363e7e33306a9a3218e5cdc61/duckdb-1.5.2-cp314-cp314-win_arm64.whl", hash = "sha256:c9f3e0b71b8a50fccfb42794899285d9d318ce2503782b9dd54868e5ecd0ad31", size = 14402513, upload-time = "2026-04-13T11:30:06.609Z" }, +version = "1.5.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/19/e57151753576373c6696a12022648546cca6038e8833fda2908ee2342d9b/duckdb-1.5.5.tar.gz", hash = "sha256:72f33ee57ca7595b23957671a2cc7f7fe2be0ecc2d68f63abedcfcaa3a5c1238", size = 18066741, upload-time = "2026-07-22T10:55:17.819Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/d4/298acf9331a80b3ce6ac64dd940e7e13f4058fb69d18914445f02e3c7bfe/duckdb-1.5.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3b805507f88171b428b21c966c30e9a3d54e30b24528918a44ed0032542bc26f", size = 32702934, upload-time = "2026-07-22T10:53:19.069Z" }, + { url = "https://files.pythonhosted.org/packages/d5/90/c489fb63d64b2e7ee109ce8460bdede003a0f256e5b41a03a2a1c4764058/duckdb-1.5.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b08e19cc856220d8a26fa62abc2264b349aff67255e9373c6a3f607addd56dc6", size = 17343604, upload-time = "2026-07-22T10:53:22.767Z" }, + { url = "https://files.pythonhosted.org/packages/0b/27/effa80a15b1f0c61c235622f797868485359e8c9ad6a8e358e7a0c479151/duckdb-1.5.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a17e6a922e42a5c06ed2353fe78c5dff2610f6632d603836f9606ad0bf754079", size = 15488179, upload-time = "2026-07-22T10:53:25.945Z" }, + { url = "https://files.pythonhosted.org/packages/5d/07/21212345c8d24ba62dceaa20be3b21f5c46f1510b1b42ce93bb058afe0c4/duckdb-1.5.5-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bdc38922c365c37720149f90d90b1e9823eb82dad6830855b5f87537fa6fc0c", size = 19367323, upload-time = "2026-07-22T10:53:30.23Z" }, + { url = "https://files.pythonhosted.org/packages/3f/d0/10371ae875fb4b5ef61bb892743b4b2e90c512b371fdf29317deb744857d/duckdb-1.5.5-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e238060db5ca59879882a6e9b015e2c65d5c64ddf281ba1d7a9a2033764152cf", size = 21476568, upload-time = "2026-07-22T10:53:33.486Z" }, + { url = "https://files.pythonhosted.org/packages/b2/35/09568ce617dd7bc0757b3d7b6a981660b9e4f0b7594de8ed776755eae740/duckdb-1.5.5-cp310-cp310-win_amd64.whl", hash = "sha256:4acc72798ba1885a9c17d1242903d2cd502f13b1271c7677f7cab25d8578eceb", size = 13156129, upload-time = "2026-07-22T10:53:37.55Z" }, + { url = "https://files.pythonhosted.org/packages/9c/c2/b62ec24d57bb8df4e24b0b58f7f8facb32f5fdb9f1895aed9e9fcdded168/duckdb-1.5.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1b543841b0ae18a9c982345cfa3987e9c065d3a4b0f067daa473d92d1e65f528", size = 32708371, upload-time = "2026-07-22T10:53:41.642Z" }, + { url = "https://files.pythonhosted.org/packages/8a/ce/769171ba45f0b73632dc3bc3108d891e81dd6c6bbfba630a34a75b4dcc0f/duckdb-1.5.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a925d06c2a4c3b64553d6cc1aced5028d376d4479bed689a7d47e9b1dccd80a", size = 17343979, upload-time = "2026-07-22T10:53:44.951Z" }, + { url = "https://files.pythonhosted.org/packages/46/59/a8e3384ee916e00d5dcf985194c1511d61978540778a1e96fa47f9fb3e0d/duckdb-1.5.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0c42757cb34722144bd4dfb94b6f336339e7b2468f6813fa7fa9a319ba07bab4", size = 15493704, upload-time = "2026-07-22T10:53:47.912Z" }, + { url = "https://files.pythonhosted.org/packages/6f/1d/9840179c2607b90523a2884a129c4d4e6dbdc1178ba62a976c1043beba88/duckdb-1.5.5-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e72f9e1a4f90a5c8483ad4d540e495bf0834ba61c360b52499a573d7ed62a3f", size = 19366574, upload-time = "2026-07-22T10:53:51.876Z" }, + { url = "https://files.pythonhosted.org/packages/b5/55/f9641a4eebcc2f4df631287d6c3b9ed2eea3b92644f93acbad825e3972b6/duckdb-1.5.5-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b9b6f86ed85d4ef5e0211eaebf75d057bd8bb520bba438a95dd0f4e42234bbfe", size = 21477952, upload-time = "2026-07-22T10:53:55.575Z" }, + { url = "https://files.pythonhosted.org/packages/3c/3a/07c3556e37a5c97b95917b029c8fdde4a25fbd76a660bacdac195cf20dcb/duckdb-1.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:9f4287f97ccf0c1f3d471e7115be2b067cbf99627e2d34bffd462dd64703cddc", size = 13156986, upload-time = "2026-07-22T10:53:58.823Z" }, + { url = "https://files.pythonhosted.org/packages/4f/ff/07b48eef2078ca033847e9caa46cc7633b714c5f91ad1ce091c8ca89d792/duckdb-1.5.5-cp311-cp311-win_arm64.whl", hash = "sha256:179633a3fc6296c75d57c69c1e239fa9e5cdcb670fd1dbff88a02663f932905c", size = 14001317, upload-time = "2026-07-22T10:54:01.724Z" }, + { url = "https://files.pythonhosted.org/packages/d6/40/2e05d324400fdaa5656c9f48d6298da421cb034d85e509fa0e6e325cf04b/duckdb-1.5.5-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d4dd65f8941a604b947e0b9b4b4f7165988e29a23ec0b69b4038520956d9933e", size = 32753858, upload-time = "2026-07-22T10:54:05.514Z" }, + { url = "https://files.pythonhosted.org/packages/79/15/5ceb58ffb5bb8a62b3fd7abb39c41467cdf94850ece02e6d88664dfc75ce/duckdb-1.5.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:33db46679b071f108d57139493dee2d37e1f5efcf5c5c039c2969eed11a6c8a7", size = 17368293, upload-time = "2026-07-22T10:54:09.139Z" }, + { url = "https://files.pythonhosted.org/packages/bf/5c/bf02da0b354fe83cca4f95a4fbf762181af466f7d551ab2a093f7698882a/duckdb-1.5.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f0b88535a5d86fdd63dba6ea02ab68c003dfb9e4892b11256ef24c4da208baae", size = 15509131, upload-time = "2026-07-22T10:54:12.228Z" }, + { url = "https://files.pythonhosted.org/packages/ea/a9/5f1f09da421d8e930e0b063d11c1b3f90363f40ede74438cd188afdd13a2/duckdb-1.5.5-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f316eae2323d9a851883fdf2dee91c1f9efe251ab33e14a2272f82a913422ed6", size = 19391959, upload-time = "2026-07-22T10:54:15.551Z" }, + { url = "https://files.pythonhosted.org/packages/4f/98/6549769f158126fa64fd6c1ac2eb59a18282146c939867a3eb31b7c1db07/duckdb-1.5.5-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7a6d2d11859d82a936ebdcb30ce3d8a1cbb3e990bff05c12abb9b54c44fa7bd1", size = 21510909, upload-time = "2026-07-22T10:54:19.681Z" }, + { url = "https://files.pythonhosted.org/packages/af/b7/5753b41d3124838f868f9f523362812d9fc45409e9e4dd70dcbb0a25826e/duckdb-1.5.5-cp312-cp312-win_amd64.whl", hash = "sha256:ddfbdb096c11d51ee22492397d342c90a82e62c5d09961477895934d0a25372f", size = 13168544, upload-time = "2026-07-22T10:54:22.789Z" }, + { url = "https://files.pythonhosted.org/packages/5c/28/44b679c7d46245f8398feae7edac959d1b83d4eb143e25b3fce0630b78bd/duckdb-1.5.5-cp312-cp312-win_arm64.whl", hash = "sha256:2725d2b9ace3a4e75d72fc5a239f6a44b502c580edadb8fb2676db772c5f9282", size = 13988684, upload-time = "2026-07-22T10:54:26.003Z" }, + { url = "https://files.pythonhosted.org/packages/47/37/4a38116e7700720fd152c666292214fd3abdf916496991296d8d1f66efbf/duckdb-1.5.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:cd98829b67788609017e65c761bd42a5dd0f9129441bed8bda4d6881ccf819f0", size = 32754294, upload-time = "2026-07-22T10:54:29.822Z" }, + { url = "https://files.pythonhosted.org/packages/66/42/7d392f1ba1eee0eaf4ab4c8c7a604bfe3536cd63f979cf5c98798664f807/duckdb-1.5.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:feead93c56679b79592d437c62975d39cb67adedffa7592c763baf8160ac7366", size = 17368211, upload-time = "2026-07-22T10:54:33.359Z" }, + { url = "https://files.pythonhosted.org/packages/9f/a5/0a6f4fa60562faa615e55e15bd1953a2f2b17a8edd8105e5cda215e43457/duckdb-1.5.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:49c963d9469373d7aba8d750d9ea565ab823e94166efed953f184dd9b169b98c", size = 15509136, upload-time = "2026-07-22T10:54:36.369Z" }, + { url = "https://files.pythonhosted.org/packages/e4/cb/023c89f51978545b9fab318581bba0c457a58e7530d2d933e54ae7d8647c/duckdb-1.5.5-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a736217825461732b5442d05a220f3da2e23a0dae114efbf08c9bf171b53098a", size = 19392147, upload-time = "2026-07-22T10:54:39.551Z" }, + { url = "https://files.pythonhosted.org/packages/3e/c5/41bef391fb8b23dbc133c9f2ba016e7a7a8124513d2cc1b430f1897d87e4/duckdb-1.5.5-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:078e6a60dd8eedde5832f45422ca5c4a6b8c837aeabd8a56ca0b7d933f588053", size = 21511060, upload-time = "2026-07-22T10:54:42.788Z" }, + { url = "https://files.pythonhosted.org/packages/07/9f/c44dfc1f924ac29b3252dc1b91393c01d009dbfe9f8ed33f10b986151bd1/duckdb-1.5.5-cp313-cp313-win_amd64.whl", hash = "sha256:6826504277dba513c0c5d71d828456c94d729c9d2482f94b2e289f90a9167e28", size = 13168028, upload-time = "2026-07-22T10:54:46.127Z" }, + { url = "https://files.pythonhosted.org/packages/ca/88/591384b2cd59abddd6f5dc175e60374f9abae6064429f0c4402854c10f44/duckdb-1.5.5-cp313-cp313-win_arm64.whl", hash = "sha256:baa9c5702002fabb559ded2a39008f9f421fcbc7237d388b8213eff1e08858de", size = 13989955, upload-time = "2026-07-22T10:54:49.262Z" }, + { url = "https://files.pythonhosted.org/packages/3e/56/12c65bfa2d2605b81981b264788891bcf11ec72227889554cead5d8d13b9/duckdb-1.5.5-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8e6413dd40facb7b8ab21bd844450cd8f549b29e138635be9cf090ef4d2049e2", size = 32761946, upload-time = "2026-07-22T10:54:53.412Z" }, + { url = "https://files.pythonhosted.org/packages/b9/46/682ce155f17e0d2822d4f13ee3db9ca4b5b7c2da61b841b2629035e1f4bc/duckdb-1.5.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:64078acfd16541132ac6e191eb81b2845554444a0305cc1aa581ba107e514aa8", size = 17375069, upload-time = "2026-07-22T10:54:57.269Z" }, + { url = "https://files.pythonhosted.org/packages/39/ce/a24bcbd3289c8f305a430759c5fc12242740b4af3e17f7593f3a34e333d2/duckdb-1.5.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8c11775cc99a447618d5f1840126db17f2652f3eae05529df4f81f40e2df7151", size = 15519791, upload-time = "2026-07-22T10:55:00.681Z" }, + { url = "https://files.pythonhosted.org/packages/d9/76/3a01afbc615c1d418c0de58a6b68ac5ce2a8563232c0464bfbc2ce552398/duckdb-1.5.5-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:77bbc1e6ba12e1e06f9020117bdf848627ecfdf36f907550e62e008e6109dece", size = 19398251, upload-time = "2026-07-22T10:55:04.168Z" }, + { url = "https://files.pythonhosted.org/packages/a1/43/3a5e81d1728f4d234c79bfe385808ee7c04834f7c37a4b5c257459c25614/duckdb-1.5.5-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fbf0f2d48b43c6c304d00463b463c27ead6c4b01c3c1816b750f728decf71afe", size = 21513851, upload-time = "2026-07-22T10:55:07.864Z" }, + { url = "https://files.pythonhosted.org/packages/91/41/fc7c829172c60ca22485251eab285f4f1a0d87b486a024c726f21471d86e/duckdb-1.5.5-cp314-cp314-win_amd64.whl", hash = "sha256:9dc826c4b50e64f6c4e4d07a3a9cb075ef70ba3899dc43ec5493dc3d7b04b353", size = 13691858, upload-time = "2026-07-22T10:55:11.181Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2c/95d9216b79e9273689d7ebce125a54503ed0c9bd7da931f0265888e99779/duckdb-1.5.5-cp314-cp314-win_arm64.whl", hash = "sha256:63e48d4b74b15aeacd688976432a7225163df8c226eddeb8536bba2d4d4ff433", size = 14470180, upload-time = "2026-07-22T10:55:14.445Z" }, ] [[package]] @@ -2501,7 +2502,7 @@ dev = [ { name = "black", specifier = ">=24.0.0" }, { name = "chardet" }, { name = "coverage", specifier = ">=6.4.1" }, - { name = "duckdb", specifier = ">=1.5.2" }, + { name = "duckdb", specifier = ">=1.5.5" }, { name = "gql", specifier = ">=4.0.0" }, { name = "ipykernel" }, { name = "ipython-genutils" }, @@ -2551,7 +2552,7 @@ pandera = [ shacl = [{ name = "pyshacl", specifier = ">=0.25.0" }] tests = [ { name = "black", specifier = ">=24.0.0" }, - { name = "duckdb", specifier = ">=1.5.2" }, + { name = "duckdb", specifier = ">=1.5.5" }, { name = "numpydantic", specifier = ">=1.10.0" }, { name = "pyshacl", specifier = ">=0.25.0" }, { name = "sqlalchemy-bigquery", specifier = ">=1.9.0" }, @@ -2610,7 +2611,7 @@ dev = [ requires-dist = [ { name = "click", specifier = ">=8.2" }, { name = "coverage", marker = "extra == 'dev'" }, - { name = "curies", specifier = ">=0.14.4" }, + { name = "curies", specifier = ">=0.14.6" }, { name = "deprecated" }, { name = "hbreader" }, { name = "isodate", marker = "python_full_version < '3.11'", specifier = ">=0.7.2,<1.0.0" }, From fffd9a7d2de83aa8634f5b775893b92a15294b5d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Aug 2026 12:12:21 -0500 Subject: [PATCH 62/72] build(deps-dev): bump typedb-driver from 3.8.1 to 3.12.1 Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: amc-corey-cox <69321580+amc-corey-cox@users.noreply.github.com> --- .github/workflows/typedb-integration.yaml | 4 +- packages/linkml/pyproject.toml | 2 +- .../test_typedbgen_integration.py | 4 +- uv.lock | 59 ++++++++++--------- 4 files changed, 38 insertions(+), 31 deletions(-) diff --git a/.github/workflows/typedb-integration.yaml b/.github/workflows/typedb-integration.yaml index f73ce340fd..d854871cb7 100644 --- a/.github/workflows/typedb-integration.yaml +++ b/.github/workflows/typedb-integration.yaml @@ -18,7 +18,9 @@ jobs: runs-on: ubuntu-latest services: typedb: - image: typedb/typedb:3.8.0 + # Keep in step with typedb-driver in packages/linkml/pyproject.toml: the + # driver refuses to connect to a server on a different network protocol. + image: typedb/typedb:3.12.1 ports: - 1729:1729 options: >- diff --git a/packages/linkml/pyproject.toml b/packages/linkml/pyproject.toml index cc043de5a3..5054d01cf1 100644 --- a/packages/linkml/pyproject.toml +++ b/packages/linkml/pyproject.toml @@ -111,7 +111,7 @@ tests-rustgen = [ "maturin>=1.14.1" ] typedb = [ - "typedb-driver >= 3.0, < 4.0", + "typedb-driver>=3.12.1,<4.0", ] bigquery = [ "sqlalchemy-bigquery >= 1.9.0", diff --git a/tests/linkml/test_generators/test_typedbgen_integration.py b/tests/linkml/test_generators/test_typedbgen_integration.py index ef0ed648ec..1f592953f6 100644 --- a/tests/linkml/test_generators/test_typedbgen_integration.py +++ b/tests/linkml/test_generators/test_typedbgen_integration.py @@ -30,7 +30,7 @@ typedb = pytest.importorskip("typedb.driver", reason="typedb-driver not installed") -from typedb.driver import Credentials, DriverOptions, TransactionType, TypeDB # noqa: E402 +from typedb.driver import Credentials, DriverOptions, DriverTlsConfig, TransactionType, TypeDB # noqa: E402 TYPEDB_HOST = "localhost:1729" @@ -51,7 +51,7 @@ def _typedb_available() -> bool: _INPUT_DIR = Path(__file__).parent / "input" TYPEDB_CREDENTIALS = Credentials("admin", "password") -TYPEDB_OPTIONS = DriverOptions(is_tls_enabled=False) +TYPEDB_OPTIONS = DriverOptions(DriverTlsConfig.disabled()) @pytest.fixture(scope="module") diff --git a/uv.lock b/uv.lock index 73bd534b11..0676757e3e 100644 --- a/uv.lock +++ b/uv.lock @@ -2571,7 +2571,7 @@ tests-extra = [ { name = "testcontainers", specifier = "==3.7.1" }, ] tests-rustgen = [{ name = "maturin", specifier = ">=1.14.1" }] -typedb = [{ name = "typedb-driver", specifier = ">=3.0,<4.0" }] +typedb = [{ name = "typedb-driver", specifier = ">=3.12.1,<4.0" }] typing = [{ name = "numpydantic", specifier = ">=1.10.0" }] [[package]] @@ -5499,37 +5499,42 @@ wheels = [ [[package]] name = "typedb-driver" -version = "3.8.1" +version = "3.12.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "parse" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/52/d5/49535e1b3f164365cf21c1992bea462c4d0dfca714570a018d1256bc46c7/typedb_driver-3.8.1-py310-none-macosx_11_0_arm64.whl", hash = "sha256:ec7aa39a1ec6aad6dd67fea485f583b2ccd4a4450879f7fe9fbe63acad8f4818", size = 6274596, upload-time = "2026-02-27T22:05:55.974Z" }, - { url = "https://files.pythonhosted.org/packages/09/c6/26c506644537e3e559d8928cd6f1f73439f324a1ea73a3b2e18b0e312bd0/typedb_driver-3.8.1-py310-none-macosx_11_0_x86_64.whl", hash = "sha256:b278273a08b87f64212d8a9da69c5c53fb8655c771599d689ced23b82e8128a3", size = 6394177, upload-time = "2026-02-27T22:13:07.342Z" }, - { url = "https://files.pythonhosted.org/packages/1d/d5/d433362bb67002178dd8172045286587ec4b8f7cb3f8fd278e5495265bd5/typedb_driver-3.8.1-py310-none-manylinux_2_17_aarch64.whl", hash = "sha256:59a17461c3e9d4562dab833a398a05ae4d695d9f9ac2361846864c2955e29531", size = 7386774, upload-time = "2026-02-27T22:16:54.504Z" }, - { url = "https://files.pythonhosted.org/packages/ac/5b/85a67657256794005faeb221ef94920ba4f56430893c2562786bd882eb2a/typedb_driver-3.8.1-py310-none-manylinux_2_17_x86_64.whl", hash = "sha256:4c23beb8ad9aa2dc4796100ff77c5cb5efe38bd52c5dff5772722e9719a9b756", size = 7440767, upload-time = "2026-02-27T22:13:14.059Z" }, - { url = "https://files.pythonhosted.org/packages/65/e1/c201320558cfa39fa440bda18b444fa65ead8de890b54bc207fde1c251e8/typedb_driver-3.8.1-py310-none-win_amd64.whl", hash = "sha256:a5f4f4972011a668e4bbc9c901cee34f2a328a66c64bbc1451f6c76c2bd4b20d", size = 3734788, upload-time = "2026-02-27T22:15:15.851Z" }, - { url = "https://files.pythonhosted.org/packages/98/0c/2f863df46358baf8102a267a4b4d006952454338c7b59d83e1ecd0cadbb5/typedb_driver-3.8.1-py311-none-macosx_11_0_arm64.whl", hash = "sha256:42cdea68cf5c5405c950b42f0896ff7572295891b2eba746918b839e5f6f67dd", size = 6274590, upload-time = "2026-02-27T22:06:04.565Z" }, - { url = "https://files.pythonhosted.org/packages/68/2f/c8dd2b7157fca854e340e7bd755e58bfa75c9ca03ee42c668e49c6f5dc64/typedb_driver-3.8.1-py311-none-macosx_11_0_x86_64.whl", hash = "sha256:58c531616718975104174d06f89f065791a38c1aa15208d562f00483977f577a", size = 6394178, upload-time = "2026-02-27T22:13:26.129Z" }, - { url = "https://files.pythonhosted.org/packages/58/b7/269ada0da967c51f17e83c1d1d96ed9ff8cf89974476417c033f148072ae/typedb_driver-3.8.1-py311-none-manylinux_2_17_aarch64.whl", hash = "sha256:a054ab37610a917a9b27d6b547a7935509788b10aeb7f0ddab785383c55973e7", size = 7386731, upload-time = "2026-02-27T22:17:18.374Z" }, - { url = "https://files.pythonhosted.org/packages/5b/5a/0b882814f6fc9e821bf7d036d5433a536f8d667b68f31bf543b0db688a25/typedb_driver-3.8.1-py311-none-manylinux_2_17_x86_64.whl", hash = "sha256:c4180ea202ebe50c1ddb9a14590bd8f5b95573a0dd33357ebb4833ede3f406cc", size = 7440662, upload-time = "2026-02-27T22:13:43.135Z" }, - { url = "https://files.pythonhosted.org/packages/d0/78/e3137027bc0a36abf7f32905f224fb53c61b1a56a71cdbb611c043b64ded/typedb_driver-3.8.1-py311-none-win_amd64.whl", hash = "sha256:3a69e2329cea315fb234f70bd72af2455b9eb6cae9d9552e95a57287df631c59", size = 3734515, upload-time = "2026-02-27T22:16:29.078Z" }, - { url = "https://files.pythonhosted.org/packages/59/b7/bc018c47b4c781c23bb2c508d9ecf97154610616e5a9cc6de3c81d8b7fa2/typedb_driver-3.8.1-py312-none-macosx_11_0_arm64.whl", hash = "sha256:d5dfdb8dcb220bdd498038969118494244bf8840a4f4f9dc19afed6225e62d07", size = 6274708, upload-time = "2026-02-27T22:06:13.027Z" }, - { url = "https://files.pythonhosted.org/packages/8e/b5/61365038dee0a14ef1c9d7c914cb5a1154e9aa2e6bfb024647e0fdc85592/typedb_driver-3.8.1-py312-none-macosx_11_0_x86_64.whl", hash = "sha256:c27a81fcdb4c868df459989ebf9e2ca1010da04717af02f011eaf2a96fffc757", size = 6394840, upload-time = "2026-02-27T22:13:44.278Z" }, - { url = "https://files.pythonhosted.org/packages/9f/97/7fe40f1faeac0f9051886509e1f32bb27d5081077cfe96430f25351f9aeb/typedb_driver-3.8.1-py312-none-manylinux_2_17_aarch64.whl", hash = "sha256:83d1df301ab7a3b1187582db75ad7d75c23a97bd05e1bb4e818d0a18d2cf88a1", size = 7388346, upload-time = "2026-02-27T22:17:42.552Z" }, - { url = "https://files.pythonhosted.org/packages/38/90/6001a72c7c840fd4a4f89f4f8dab59f0a23656226b5798cc1f9b3c869451/typedb_driver-3.8.1-py312-none-manylinux_2_17_x86_64.whl", hash = "sha256:d55759ef6196bdb101044a691201e67057d0a037b9d28d40057a8b23c2b2ffe5", size = 7440489, upload-time = "2026-02-27T22:14:13.86Z" }, - { url = "https://files.pythonhosted.org/packages/97/91/63fed1498d28a075cdb4222767ab314ce3f51da1eba197f4ba8249d5ca97/typedb_driver-3.8.1-py312-none-win_amd64.whl", hash = "sha256:77e6bf767243f571b2f2d1235da1938562332ec348266180d3f2945034c6ecb8", size = 3734624, upload-time = "2026-02-27T22:17:17.677Z" }, - { url = "https://files.pythonhosted.org/packages/ae/dd/b6c329dc6159efeefcde43cffc5cabbf911999843ac02f2205cd0b4ce01c/typedb_driver-3.8.1-py313-none-macosx_11_0_arm64.whl", hash = "sha256:4e0ea48bbdaf0f12693f219093ddc9b7a036d640f49779926249981ddd54f981", size = 6274717, upload-time = "2026-02-27T22:06:21.374Z" }, - { url = "https://files.pythonhosted.org/packages/a2/c6/8dbb16c13ee4f4e2a6b7b655af3e5b6fd7c469f67c4435d33d46d778867b/typedb_driver-3.8.1-py313-none-macosx_11_0_x86_64.whl", hash = "sha256:e58ecd1cac55b023824baec9a3d0d3b3adcf9ba74345beacfd40b705653acb9e", size = 6394841, upload-time = "2026-02-27T22:14:05.319Z" }, - { url = "https://files.pythonhosted.org/packages/57/7c/25a6d615ebaf8f629f8b3c1c5a873f5a2f62d1d33b1963eb580e78e816d1/typedb_driver-3.8.1-py313-none-manylinux_2_17_aarch64.whl", hash = "sha256:a4714c147c277705aa44d26fbc508fd9d275f54edbd688d351cffd15c1fcb83b", size = 7388354, upload-time = "2026-02-27T22:18:06.542Z" }, - { url = "https://files.pythonhosted.org/packages/b5/40/3ec874276812afa0b1d8df3b1ad3a474db227db8b1ade4a299fbd0b0ba48/typedb_driver-3.8.1-py313-none-manylinux_2_17_x86_64.whl", hash = "sha256:60e1f534ef2320e7134c2d859fdd3a05ee98c12ce80490deb546f42eca6a2c6b", size = 7440392, upload-time = "2026-02-27T22:14:44.365Z" }, - { url = "https://files.pythonhosted.org/packages/36/00/2f21bc1a37e1dd3cf2b312edd26c5b308d5bacc5e705916f3c3c5b11bbbb/typedb_driver-3.8.1-py313-none-win_amd64.whl", hash = "sha256:c83bd43619c1cc59d47bbd37d90ccd08225ed2d033def53f4975ceb38425dcb5", size = 3734774, upload-time = "2026-02-27T22:17:59.916Z" }, - { url = "https://files.pythonhosted.org/packages/d1/ea/35e8f39df944c46fcdb324e5631b630b73c0a30755735b2ec4bf00c2c7e2/typedb_driver-3.8.1-py39-none-macosx_11_0_arm64.whl", hash = "sha256:4bbf93ccc772679e730fe24852227ed0d2e45c6251f2305e14e7067feccaa4f5", size = 6274201, upload-time = "2026-02-27T22:05:46.548Z" }, - { url = "https://files.pythonhosted.org/packages/e4/c1/7334ddd7959ebb2a2d33290beeb87b81335a21691d481437d0827edf78e5/typedb_driver-3.8.1-py39-none-macosx_11_0_x86_64.whl", hash = "sha256:ca6916bb7d316b0dfe3041f2da466a76ebe66d0f3c1ffb474ed6ea705331bc47", size = 6394515, upload-time = "2026-02-27T22:12:40.381Z" }, - { url = "https://files.pythonhosted.org/packages/1e/68/53a40c1158506b75cae1120ef38e69e7f7adc16ab9f5e9c87dfda99c3c99/typedb_driver-3.8.1-py39-none-manylinux_2_17_aarch64.whl", hash = "sha256:17e65f285a2303481b406ca67b8039a64f202f02a7537b0d9ed39aa654cdc9aa", size = 7386955, upload-time = "2026-02-27T22:16:28.028Z" }, - { url = "https://files.pythonhosted.org/packages/a3/b4/1712cd11a334cd53e351e29e57449db179e9dffda526571c3c54c694d625/typedb_driver-3.8.1-py39-none-manylinux_2_17_x86_64.whl", hash = "sha256:3bcfc849ce7f32281e12f7be3a85f5013afcd8aa4d4e44dc7e0d148a7952416e", size = 7441026, upload-time = "2026-02-27T22:12:43.742Z" }, - { url = "https://files.pythonhosted.org/packages/a1/7c/ffc9821f8775f7b9f91ae182519500bb5177cacfede4308604837b79305d/typedb_driver-3.8.1-py39-none-win_amd64.whl", hash = "sha256:89650fab49d0749008a1b8a5c1f41c30842f9f9456ccfa4342aecaa820308828", size = 3734424, upload-time = "2026-02-27T22:13:42.989Z" }, + { url = "https://files.pythonhosted.org/packages/22/1a/1ed66a450c91e1596d580c2202d8e04823e256043f4318e65ac65842b9d8/typedb_driver-3.12.1-py310-none-macosx_11_0_arm64.whl", hash = "sha256:50f81d42c5d3f4f8ab5c79831d25f827d3f282cd399ec8614a3af0903ee3966f", size = 5601837, upload-time = "2026-07-21T23:20:12.191Z" }, + { url = "https://files.pythonhosted.org/packages/51/b1/0545e3b73d34059fde8ef8875adce1dac56ddde148c6babcf2ab77bc9247/typedb_driver-3.12.1-py310-none-macosx_11_0_x86_64.whl", hash = "sha256:19d80e3c31ac92bcccd54390ce832240ddb974d3389a017b612c65f1b970b774", size = 5729488, upload-time = "2026-07-21T23:30:44.866Z" }, + { url = "https://files.pythonhosted.org/packages/86/d7/e0bd65a5e3747766aca018563297d7082a9505de1f0ff2dc786f92650c3f/typedb_driver-3.12.1-py310-none-manylinux_2_17_aarch64.whl", hash = "sha256:df47112adf445a0d50abb233d3d7b909b5a9d9c8e3e48f3fac1f290d01d81938", size = 6968844, upload-time = "2026-07-21T23:31:27.376Z" }, + { url = "https://files.pythonhosted.org/packages/6c/42/6b04984daa0319eeb89b711ab810cf742d7b1e7fb478aa3037cb9ddc1626/typedb_driver-3.12.1-py310-none-manylinux_2_17_x86_64.whl", hash = "sha256:7261bd792d0f391727fd2fab3dca17c972f363c4bbaa860dadb59d151c1700ca", size = 7119906, upload-time = "2026-07-21T23:27:31.34Z" }, + { url = "https://files.pythonhosted.org/packages/92/a9/a72806a178d641830abd07b7b038e3e290506624364499aef33af9d48977/typedb_driver-3.12.1-py310-none-win_amd64.whl", hash = "sha256:cd646f3b5f9fb98a6be061e5cba7a561dc1f241a7a7146f6c3df0d4d427ac61c", size = 3350372, upload-time = "2026-07-21T23:26:58.907Z" }, + { url = "https://files.pythonhosted.org/packages/48/0b/4f00f7b8e3687dfdb48d0e13f06cbf0c6b17a44a6978d1e0314e72a1a36b/typedb_driver-3.12.1-py311-none-macosx_11_0_arm64.whl", hash = "sha256:e9dfbfabed0b091022a403246978f607490216ddc71035b7980f459bc575165c", size = 5601834, upload-time = "2026-07-21T23:20:19.182Z" }, + { url = "https://files.pythonhosted.org/packages/fa/77/bd2b8c23ddaa540b9ed33d23de9deb06f978f941e68d84c6c2ab85f7367b/typedb_driver-3.12.1-py311-none-macosx_11_0_x86_64.whl", hash = "sha256:7ebb569ed5ba6bc556a48c035fffe8ec1bb152ab571e20a2ad82e06cdd4888a1", size = 5729483, upload-time = "2026-07-21T23:31:05.055Z" }, + { url = "https://files.pythonhosted.org/packages/94/0d/ac0ae7d6120bc118cfb1c06f9afebba448e5ffaedeb3454cc01eccee6ef6/typedb_driver-3.12.1-py311-none-manylinux_2_17_aarch64.whl", hash = "sha256:58abebc319df8ce391a81c9d013b23d32ff749066d2579de8e68ba72c4c91825", size = 6969084, upload-time = "2026-07-21T23:31:57.167Z" }, + { url = "https://files.pythonhosted.org/packages/7f/55/486f76022dfbcdde787bd912f31d46ddffb0588c1deb3d5d1651003626de/typedb_driver-3.12.1-py311-none-manylinux_2_17_x86_64.whl", hash = "sha256:aca291eb699e28714e6bce8a5b9a8be08564348dc12334ebcb0a360cc84e80bc", size = 7120033, upload-time = "2026-07-21T23:27:57.875Z" }, + { url = "https://files.pythonhosted.org/packages/f7/c4/a888264d2dde2b53d6f29575cebb1273f4d9d76be281710098b3aab795ae/typedb_driver-3.12.1-py311-none-win_amd64.whl", hash = "sha256:4cc3e5a75ef5ab1752d009930b9374b0fd38ed06544a8eae301b1f5d6d80524f", size = 3350594, upload-time = "2026-07-21T23:27:20.584Z" }, + { url = "https://files.pythonhosted.org/packages/58/72/4c3087c8fb6df55751948ec733a6aa223ce9e76c79d91067d3fc26d9e409/typedb_driver-3.12.1-py312-none-macosx_11_0_arm64.whl", hash = "sha256:2073f29326052483c90d01e9517bf6850845ea50be294329c9022c908439b656", size = 5602030, upload-time = "2026-07-21T23:20:26.272Z" }, + { url = "https://files.pythonhosted.org/packages/34/a8/bebb8395641605912e80fb5439ee323ada1a81977ba7466f0b21c30da44a/typedb_driver-3.12.1-py312-none-macosx_11_0_x86_64.whl", hash = "sha256:80133fe6a7597b95225dcc0ae5c9793cad442c1900622ea18e12fd698bfea564", size = 5730504, upload-time = "2026-07-21T23:31:23.069Z" }, + { url = "https://files.pythonhosted.org/packages/0f/1c/aa3c333bc10d8d586d2cabc92b25bb42cbf51bb0008257cc38fac5ea042e/typedb_driver-3.12.1-py312-none-manylinux_2_17_aarch64.whl", hash = "sha256:4a78940d846fb58cb74fa18b368da1add672d7825028262d2023e0c874bd1c09", size = 6970150, upload-time = "2026-07-21T23:32:26.69Z" }, + { url = "https://files.pythonhosted.org/packages/3a/2b/953bbc36d89c8baf64f0dbcfb2126e9b19dd3b051aa57b29121d09a5e3d9/typedb_driver-3.12.1-py312-none-manylinux_2_17_x86_64.whl", hash = "sha256:b7cbd7272aca4a82917c7da2558c6cbe9d47d0620898e87cb9c6ab3795f24cd4", size = 7120199, upload-time = "2026-07-21T23:28:24.981Z" }, + { url = "https://files.pythonhosted.org/packages/07/a0/ef157572d31cee0d461e8a133e46e64e6bd88f63b70ffc01333a3f7dc636/typedb_driver-3.12.1-py312-none-win_amd64.whl", hash = "sha256:20845930dbafc64b5a6ae9f21cc54e8dd40808bd7d1427edfd6dbbb6ecd1b012", size = 3350895, upload-time = "2026-07-21T23:27:50.335Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b4/01b4c48f44980b15d50866c6917be651290b41ef8272883f872683b31130/typedb_driver-3.12.1-py313-none-macosx_11_0_arm64.whl", hash = "sha256:d9c1140ef869571d6020dbdb4b46eee5fead847302c84378883e8fdc5234edab", size = 5602035, upload-time = "2026-07-21T23:20:32.984Z" }, + { url = "https://files.pythonhosted.org/packages/76/e3/d772c190cad7da42b958cb98b86d69b8910d9dab2bfc67e422522b0fbbcd/typedb_driver-3.12.1-py313-none-macosx_11_0_x86_64.whl", hash = "sha256:574349a6eb6e957fd5e3f46e8d7af815766999d34b1ec150581d87bb9600a256", size = 5730508, upload-time = "2026-07-21T23:31:40.676Z" }, + { url = "https://files.pythonhosted.org/packages/8d/58/f81b1ed5f4ba9070810e0d642e7f214fd9b9f083f125bddc45ccb5c791ab/typedb_driver-3.12.1-py313-none-manylinux_2_17_aarch64.whl", hash = "sha256:5dee935ce6473d271b7ec20851cdf8f4a8854e9722983dc2132b51486cdfd5d7", size = 6970016, upload-time = "2026-07-21T23:32:56.095Z" }, + { url = "https://files.pythonhosted.org/packages/a4/69/24f5f8aa395f491a6f31fe6139b226b853bf84c1fafe66325e989b48733d/typedb_driver-3.12.1-py313-none-manylinux_2_17_x86_64.whl", hash = "sha256:834f0c98e7e0e31ce35eb3dddbdecb7c8c023534f61afdd093582ee8c0dfff42", size = 7120200, upload-time = "2026-07-21T23:28:52.842Z" }, + { url = "https://files.pythonhosted.org/packages/d6/c5/22c07260f307897e7baf55ada88beb5b86714deb3c15abad085bf018ad27/typedb_driver-3.12.1-py313-none-win_amd64.whl", hash = "sha256:6225db4024e614aa299372113e61657cb7170bed15f2506e8e1ba9f758556a57", size = 3350225, upload-time = "2026-07-21T23:28:19.817Z" }, + { url = "https://files.pythonhosted.org/packages/55/7f/b28cdd0f44e7b0e7da1480d9c4662049e0a344a9ce24391e518238a47095/typedb_driver-3.12.1-py314-none-macosx_11_0_arm64.whl", hash = "sha256:5de7fe3bb5534634e0fa67d2ed9ee47f0f5e2b4d6b6e3bc73704a34ba3b2e2ce", size = 5603546, upload-time = "2026-07-21T23:20:39.872Z" }, + { url = "https://files.pythonhosted.org/packages/e8/b5/faa0618924a34852f67c0ba1ea9d7852af309e88412451a04a3dfe2d453a/typedb_driver-3.12.1-py314-none-macosx_11_0_x86_64.whl", hash = "sha256:48a999910da74ddcc04609c6d2b29ba47482f9930243dd43b5b167907ada086e", size = 5731520, upload-time = "2026-07-21T23:31:58.767Z" }, + { url = "https://files.pythonhosted.org/packages/28/12/7f645c3059cdd6fbd2646328882c65a183197133bf609173b6aca78d6b69/typedb_driver-3.12.1-py314-none-manylinux_2_17_aarch64.whl", hash = "sha256:1d02aabced59a7f0595c466019bd042d1442adb26222f382fdbcf467852ae1fe", size = 6969827, upload-time = "2026-07-21T23:33:25.439Z" }, + { url = "https://files.pythonhosted.org/packages/14/07/0c37c37ea042f0da6e7ef627f60d9c87fa8a0f0599750963a50f5fd1032a/typedb_driver-3.12.1-py314-none-manylinux_2_17_x86_64.whl", hash = "sha256:f5d3a65b678b91cb4805b231f4f8d879feb1ef65424184c805829533d55f910b", size = 7120040, upload-time = "2026-07-21T23:29:18.786Z" }, + { url = "https://files.pythonhosted.org/packages/b9/59/48ce4fcafc3a37674d22f277a04b40b017a07ba50c38b45507221f42e919/typedb_driver-3.12.1-py314-none-win_amd64.whl", hash = "sha256:c9360c6da756a0bbb1ba179b2ac3f87dc5a1f6e9f47816a8c34a2a394467f143", size = 3350414, upload-time = "2026-07-21T23:29:20.763Z" }, + { url = "https://files.pythonhosted.org/packages/cd/a4/a7f49aca83480e4427be8e05d0252c32acc6d7050dfcd6d1bf0d6f98c1c8/typedb_driver-3.12.1-py39-none-macosx_11_0_arm64.whl", hash = "sha256:c8ffe78ecd841f807c0a98d6cd10de00bcdf236e74f0e9cba05177d5876f1678", size = 5602213, upload-time = "2026-07-21T23:20:04.051Z" }, + { url = "https://files.pythonhosted.org/packages/37/1c/c62982187fb43a04e38b961e567c4f398806c74b4a393a099cd18db3a306/typedb_driver-3.12.1-py39-none-macosx_11_0_x86_64.whl", hash = "sha256:960da098bd2cf825c05fafd4887f0f2cfa441312c3e257f5ad413fcaaf0f4ecf", size = 5729611, upload-time = "2026-07-21T23:30:24.267Z" }, + { url = "https://files.pythonhosted.org/packages/80/2e/c56a6c764c9f51d8c5c3a408e628bd35c7d9c6795c9679d4f50ead0e8cd1/typedb_driver-3.12.1-py39-none-manylinux_2_17_aarch64.whl", hash = "sha256:61487659b776ef3d29f49b72bacb41ff32d7911a3fcd61c6f475907c49623b55", size = 6969262, upload-time = "2026-07-21T23:30:56.956Z" }, + { url = "https://files.pythonhosted.org/packages/67/8f/8cb2545bfdce1f5a784d1c4de25988fc5d3c734a6610acf30ab8e616ac68/typedb_driver-3.12.1-py39-none-manylinux_2_17_x86_64.whl", hash = "sha256:7b8e9f87be9412cc513bc0eadb9427339213d2be1ce6cf172a04ea5961751cdd", size = 7119453, upload-time = "2026-07-21T23:27:04.556Z" }, + { url = "https://files.pythonhosted.org/packages/a6/05/65442e89805848cfbd39e9a746c82c25b97885d4a5757c8055aa982c98f9/typedb_driver-3.12.1-py39-none-win_amd64.whl", hash = "sha256:6b0790fa2daf2d27c95edead7adbe0e45ca1655d42b971433a3ad59b0276f467", size = 3350174, upload-time = "2026-07-21T23:26:26.861Z" }, ] [[package]] From 7ea78d20f23f4b45b623920a169ec40460599140 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Aug 2026 17:28:21 +0000 Subject: [PATCH 63/72] build(deps): bump rdflib from 7.2.1 to 7.6.0 (#3870) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/linkml/pyproject.toml | 2 +- packages/linkml_runtime/pyproject.toml | 2 +- uv.lock | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/linkml/pyproject.toml b/packages/linkml/pyproject.toml index 5054d01cf1..7496301279 100644 --- a/packages/linkml/pyproject.toml +++ b/packages/linkml/pyproject.toml @@ -57,7 +57,7 @@ dependencies = [ # Specifier syntax: https://peps.python.org/pep-0631/ "pyshexc >= 0.10.3", "python-dateutil", "pyyaml", - "rdflib >=6.0.0", + "rdflib>=7.6.0", "requests >= 2.22", "sqlalchemy>=2.0.51", "watchdog >= 0.9.0", diff --git a/packages/linkml_runtime/pyproject.toml b/packages/linkml_runtime/pyproject.toml index 2082d9c356..09fc793535 100644 --- a/packages/linkml_runtime/pyproject.toml +++ b/packages/linkml_runtime/pyproject.toml @@ -43,7 +43,7 @@ dependencies = [ "jsonschema>=4.26.0", "prefixcommons >=0.1.12", "pyyaml", - "rdflib >=6.0.0", + "rdflib>=7.6.0", "requests", "prefixmaps >=0.1.4", "curies>=0.14.6", diff --git a/uv.lock b/uv.lock index 0676757e3e..b3eac9b84e 100644 --- a/uv.lock +++ b/uv.lock @@ -2488,7 +2488,7 @@ requires-dist = [ { name = "pyshexc", specifier = ">=0.10.3" }, { name = "python-dateutil" }, { name = "pyyaml" }, - { name = "rdflib", specifier = ">=6.0.0" }, + { name = "rdflib", specifier = ">=7.6.0" }, { name = "requests", specifier = ">=2.22" }, { name = "sphinx-click", specifier = ">=6.0.0" }, { name = "sqlalchemy", specifier = ">=2.0.51" }, @@ -2623,7 +2623,7 @@ requires-dist = [ { name = "pydantic", specifier = ">=1.10.2,<3.0.0" }, { name = "pyoxigraph", specifier = ">=0.5.6" }, { name = "pyyaml" }, - { name = "rdflib", specifier = ">=6.0.0" }, + { name = "rdflib", specifier = ">=7.6.0" }, { name = "requests" }, { name = "requests-cache", marker = "extra == 'dev'", specifier = ">=1.3.3" }, ] @@ -4572,15 +4572,15 @@ wheels = [ [[package]] name = "rdflib" -version = "7.2.1" +version = "7.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "isodate", marker = "python_full_version < '3.11'" }, { name = "pyparsing" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8d/99/d2fec85e5f6bdfe4367dea143119cb4469bf48710487939df0abf7e22003/rdflib-7.2.1.tar.gz", hash = "sha256:cf9b7fa25234e8925da8b1fb09700f8349b5f0f100e785fb4260e737308292ac", size = 4873802, upload-time = "2025-09-19T02:33:36.492Z" } +sdist = { url = "https://files.pythonhosted.org/packages/98/f5/18bb77b7af9526add0c727a3b2048959847dc5fb030913e2918bf384fec3/rdflib-7.6.0.tar.gz", hash = "sha256:6c831288d5e4a5a7ece85d0ccde9877d512a3d0f02d7c06455d00d6d0ea379df", size = 4943826, upload-time = "2026-02-13T07:15:55.938Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/31/98/7fa830bb4b9da21905683a5352aa0a01a1f3082328ae976aad341e980c23/rdflib-7.2.1-py3-none-any.whl", hash = "sha256:1a175bc1386a167a42fbfaba003bfa05c164a2a3ca3cb9c0c97f9c9638ca6ac2", size = 565423, upload-time = "2025-09-19T02:33:30.889Z" }, + { url = "https://files.pythonhosted.org/packages/10/c2/6604a71269e0c1bd75656d5a001432d16f2cc5b8c057140ec797155c295e/rdflib-7.6.0-py3-none-any.whl", hash = "sha256:30c0a3ebf4c0e09215f066be7246794b6492e054e782d7ac2a34c9f70a15e0dd", size = 615416, upload-time = "2026-02-13T07:15:46.487Z" }, ] [package.optional-dependencies] From 1cba7f46ac0018e035783282b84df339f24dbeb1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Aug 2026 17:46:48 +0000 Subject: [PATCH 64/72] build(deps-dev): bump coverage from 7.11.0 to 7.15.4 (#3864) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Corey Cox <69321580+amc-corey-cox@users.noreply.github.com> --- packages/linkml/pyproject.toml | 2 +- packages/linkml_runtime/pyproject.toml | 2 +- uv.lock | 343 ++++++++++++++----------- 3 files changed, 188 insertions(+), 159 deletions(-) diff --git a/packages/linkml/pyproject.toml b/packages/linkml/pyproject.toml index 7496301279..93922feead 100644 --- a/packages/linkml/pyproject.toml +++ b/packages/linkml/pyproject.toml @@ -93,7 +93,7 @@ dev = [ "jupyter", "nbconvert", "nbformat", - "coverage >= 6.4.1", + "coverage>=7.15.4", "tox >= 4", "tox-uv", "myst-nb >= 1.0.0; python_version >= '3.10'", diff --git a/packages/linkml_runtime/pyproject.toml b/packages/linkml_runtime/pyproject.toml index 09fc793535..5dfe3148a1 100644 --- a/packages/linkml_runtime/pyproject.toml +++ b/packages/linkml_runtime/pyproject.toml @@ -54,7 +54,7 @@ dependencies = [ [dependency-groups] dev = [ - "coverage >=6.2", + "coverage>=7.15.4", "requests-cache>=1.3.3", ] diff --git a/uv.lock b/uv.lock index b3eac9b84e..9925ed9456 100644 --- a/uv.lock +++ b/uv.lock @@ -652,7 +652,7 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130, upload-time = "2025-04-15T17:47:53.79Z" } wheels = [ @@ -725,7 +725,7 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "numpy", version = "2.3.4", source = { registry = "https://pypi.org/simple" } }, + { name = "numpy", version = "2.3.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } wheels = [ @@ -804,101 +804,130 @@ wheels = [ [[package]] name = "coverage" -version = "7.11.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1c/38/ee22495420457259d2f3390309505ea98f98a5eed40901cf62196abad006/coverage-7.11.0.tar.gz", hash = "sha256:167bd504ac1ca2af7ff3b81d245dfea0292c5032ebef9d66cc08a7d28c1b8050", size = 811905, upload-time = "2025-10-15T15:15:08.542Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/12/95/c49df0aceb5507a80b9fe5172d3d39bf23f05be40c23c8d77d556df96cec/coverage-7.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eb53f1e8adeeb2e78962bade0c08bfdc461853c7969706ed901821e009b35e31", size = 215800, upload-time = "2025-10-15T15:12:19.824Z" }, - { url = "https://files.pythonhosted.org/packages/dc/c6/7bb46ce01ed634fff1d7bb53a54049f539971862cc388b304ff3c51b4f66/coverage-7.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d9a03ec6cb9f40a5c360f138b88266fd8f58408d71e89f536b4f91d85721d075", size = 216198, upload-time = "2025-10-15T15:12:22.549Z" }, - { url = "https://files.pythonhosted.org/packages/94/b2/75d9d8fbf2900268aca5de29cd0a0fe671b0f69ef88be16767cc3c828b85/coverage-7.11.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0d7f0616c557cbc3d1c2090334eddcbb70e1ae3a40b07222d62b3aa47f608fab", size = 242953, upload-time = "2025-10-15T15:12:24.139Z" }, - { url = "https://files.pythonhosted.org/packages/65/ac/acaa984c18f440170525a8743eb4b6c960ace2dbad80dc22056a437fc3c6/coverage-7.11.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e44a86a47bbdf83b0a3ea4d7df5410d6b1a0de984fbd805fa5101f3624b9abe0", size = 244766, upload-time = "2025-10-15T15:12:25.974Z" }, - { url = "https://files.pythonhosted.org/packages/d8/0d/938d0bff76dfa4a6b228c3fc4b3e1c0e2ad4aa6200c141fcda2bd1170227/coverage-7.11.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:596763d2f9a0ee7eec6e643e29660def2eef297e1de0d334c78c08706f1cb785", size = 246625, upload-time = "2025-10-15T15:12:27.387Z" }, - { url = "https://files.pythonhosted.org/packages/38/54/8f5f5e84bfa268df98f46b2cb396b1009734cfb1e5d6adb663d284893b32/coverage-7.11.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ef55537ff511b5e0a43edb4c50a7bf7ba1c3eea20b4f49b1490f1e8e0e42c591", size = 243568, upload-time = "2025-10-15T15:12:28.799Z" }, - { url = "https://files.pythonhosted.org/packages/68/30/8ba337c2877fe3f2e1af0ed7ff4be0c0c4aca44d6f4007040f3ca2255e99/coverage-7.11.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9cbabd8f4d0d3dc571d77ae5bdbfa6afe5061e679a9d74b6797c48d143307088", size = 244665, upload-time = "2025-10-15T15:12:30.297Z" }, - { url = "https://files.pythonhosted.org/packages/cc/fb/c6f1d6d9a665536b7dde2333346f0cc41dc6a60bd1ffc10cd5c33e7eb000/coverage-7.11.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e24045453384e0ae2a587d562df2a04d852672eb63051d16096d3f08aa4c7c2f", size = 242681, upload-time = "2025-10-15T15:12:32.326Z" }, - { url = "https://files.pythonhosted.org/packages/be/38/1b532319af5f991fa153c20373291dc65c2bf532af7dbcffdeef745c8f79/coverage-7.11.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:7161edd3426c8d19bdccde7d49e6f27f748f3c31cc350c5de7c633fea445d866", size = 242912, upload-time = "2025-10-15T15:12:34.079Z" }, - { url = "https://files.pythonhosted.org/packages/67/3d/f39331c60ef6050d2a861dc1b514fa78f85f792820b68e8c04196ad733d6/coverage-7.11.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3d4ed4de17e692ba6415b0587bc7f12bc80915031fc9db46a23ce70fc88c9841", size = 243559, upload-time = "2025-10-15T15:12:35.809Z" }, - { url = "https://files.pythonhosted.org/packages/4b/55/cb7c9df9d0495036ce582a8a2958d50c23cd73f84a23284bc23bd4711a6f/coverage-7.11.0-cp310-cp310-win32.whl", hash = "sha256:765c0bc8fe46f48e341ef737c91c715bd2a53a12792592296a095f0c237e09cf", size = 218266, upload-time = "2025-10-15T15:12:37.429Z" }, - { url = "https://files.pythonhosted.org/packages/68/a8/b79cb275fa7bd0208767f89d57a1b5f6ba830813875738599741b97c2e04/coverage-7.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:24d6f3128f1b2d20d84b24f4074475457faedc3d4613a7e66b5e769939c7d969", size = 219169, upload-time = "2025-10-15T15:12:39.25Z" }, - { url = "https://files.pythonhosted.org/packages/49/3a/ee1074c15c408ddddddb1db7dd904f6b81bc524e01f5a1c5920e13dbde23/coverage-7.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d58ecaa865c5b9fa56e35efc51d1014d4c0d22838815b9fce57a27dd9576847", size = 215912, upload-time = "2025-10-15T15:12:40.665Z" }, - { url = "https://files.pythonhosted.org/packages/70/c4/9f44bebe5cb15f31608597b037d78799cc5f450044465bcd1ae8cb222fe1/coverage-7.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b679e171f1c104a5668550ada700e3c4937110dbdd153b7ef9055c4f1a1ee3cc", size = 216310, upload-time = "2025-10-15T15:12:42.461Z" }, - { url = "https://files.pythonhosted.org/packages/42/01/5e06077cfef92d8af926bdd86b84fb28bf9bc6ad27343d68be9b501d89f2/coverage-7.11.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ca61691ba8c5b6797deb221a0d09d7470364733ea9c69425a640f1f01b7c5bf0", size = 246706, upload-time = "2025-10-15T15:12:44.001Z" }, - { url = "https://files.pythonhosted.org/packages/40/b8/7a3f1f33b35cc4a6c37e759137533119560d06c0cc14753d1a803be0cd4a/coverage-7.11.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:aef1747ede4bd8ca9cfc04cc3011516500c6891f1b33a94add3253f6f876b7b7", size = 248634, upload-time = "2025-10-15T15:12:45.768Z" }, - { url = "https://files.pythonhosted.org/packages/7a/41/7f987eb33de386bc4c665ab0bf98d15fcf203369d6aacae74f5dd8ec489a/coverage-7.11.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a1839d08406e4cba2953dcc0ffb312252f14d7c4c96919f70167611f4dee2623", size = 250741, upload-time = "2025-10-15T15:12:47.222Z" }, - { url = "https://files.pythonhosted.org/packages/23/c1/a4e0ca6a4e83069fb8216b49b30a7352061ca0cb38654bd2dc96b7b3b7da/coverage-7.11.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e0eb0a2dcc62478eb5b4cbb80b97bdee852d7e280b90e81f11b407d0b81c4287", size = 246837, upload-time = "2025-10-15T15:12:48.904Z" }, - { url = "https://files.pythonhosted.org/packages/5d/03/ced062a17f7c38b4728ff76c3acb40d8465634b20b4833cdb3cc3a74e115/coverage-7.11.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bc1fbea96343b53f65d5351d8fd3b34fd415a2670d7c300b06d3e14a5af4f552", size = 248429, upload-time = "2025-10-15T15:12:50.73Z" }, - { url = "https://files.pythonhosted.org/packages/97/af/a7c6f194bb8c5a2705ae019036b8fe7f49ea818d638eedb15fdb7bed227c/coverage-7.11.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:214b622259dd0cf435f10241f1333d32caa64dbc27f8790ab693428a141723de", size = 246490, upload-time = "2025-10-15T15:12:52.646Z" }, - { url = "https://files.pythonhosted.org/packages/ab/c3/aab4df02b04a8fde79068c3c41ad7a622b0ef2b12e1ed154da986a727c3f/coverage-7.11.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:258d9967520cca899695d4eb7ea38be03f06951d6ca2f21fb48b1235f791e601", size = 246208, upload-time = "2025-10-15T15:12:54.586Z" }, - { url = "https://files.pythonhosted.org/packages/30/d8/e282ec19cd658238d60ed404f99ef2e45eed52e81b866ab1518c0d4163cf/coverage-7.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cf9e6ff4ca908ca15c157c409d608da77a56a09877b97c889b98fb2c32b6465e", size = 247126, upload-time = "2025-10-15T15:12:56.485Z" }, - { url = "https://files.pythonhosted.org/packages/d1/17/a635fa07fac23adb1a5451ec756216768c2767efaed2e4331710342a3399/coverage-7.11.0-cp311-cp311-win32.whl", hash = "sha256:fcc15fc462707b0680cff6242c48625da7f9a16a28a41bb8fd7a4280920e676c", size = 218314, upload-time = "2025-10-15T15:12:58.365Z" }, - { url = "https://files.pythonhosted.org/packages/2a/29/2ac1dfcdd4ab9a70026edc8d715ece9b4be9a1653075c658ee6f271f394d/coverage-7.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:865965bf955d92790f1facd64fe7ff73551bd2c1e7e6b26443934e9701ba30b9", size = 219203, upload-time = "2025-10-15T15:12:59.902Z" }, - { url = "https://files.pythonhosted.org/packages/03/21/5ce8b3a0133179115af4c041abf2ee652395837cb896614beb8ce8ddcfd9/coverage-7.11.0-cp311-cp311-win_arm64.whl", hash = "sha256:5693e57a065760dcbeb292d60cc4d0231a6d4b6b6f6a3191561e1d5e8820b745", size = 217879, upload-time = "2025-10-15T15:13:01.35Z" }, - { url = "https://files.pythonhosted.org/packages/c4/db/86f6906a7c7edc1a52b2c6682d6dd9be775d73c0dfe2b84f8923dfea5784/coverage-7.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9c49e77811cf9d024b95faf86c3f059b11c0c9be0b0d61bc598f453703bd6fd1", size = 216098, upload-time = "2025-10-15T15:13:02.916Z" }, - { url = "https://files.pythonhosted.org/packages/21/54/e7b26157048c7ba555596aad8569ff903d6cd67867d41b75287323678ede/coverage-7.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a61e37a403a778e2cda2a6a39abcc895f1d984071942a41074b5c7ee31642007", size = 216331, upload-time = "2025-10-15T15:13:04.403Z" }, - { url = "https://files.pythonhosted.org/packages/b9/19/1ce6bf444f858b83a733171306134a0544eaddf1ca8851ede6540a55b2ad/coverage-7.11.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c79cae102bb3b1801e2ef1511fb50e91ec83a1ce466b2c7c25010d884336de46", size = 247825, upload-time = "2025-10-15T15:13:05.92Z" }, - { url = "https://files.pythonhosted.org/packages/71/0b/d3bcbbc259fcced5fb67c5d78f6e7ee965f49760c14afd931e9e663a83b2/coverage-7.11.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:16ce17ceb5d211f320b62df002fa7016b7442ea0fd260c11cec8ce7730954893", size = 250573, upload-time = "2025-10-15T15:13:07.471Z" }, - { url = "https://files.pythonhosted.org/packages/58/8d/b0ff3641a320abb047258d36ed1c21d16be33beed4152628331a1baf3365/coverage-7.11.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:80027673e9d0bd6aef86134b0771845e2da85755cf686e7c7c59566cf5a89115", size = 251706, upload-time = "2025-10-15T15:13:09.4Z" }, - { url = "https://files.pythonhosted.org/packages/59/c8/5a586fe8c7b0458053d9c687f5cff515a74b66c85931f7fe17a1c958b4ac/coverage-7.11.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4d3ffa07a08657306cd2215b0da53761c4d73cb54d9143b9303a6481ec0cd415", size = 248221, upload-time = "2025-10-15T15:13:10.964Z" }, - { url = "https://files.pythonhosted.org/packages/d0/ff/3a25e3132804ba44cfa9a778cdf2b73dbbe63ef4b0945e39602fc896ba52/coverage-7.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a3b6a5f8b2524fd6c1066bc85bfd97e78709bb5e37b5b94911a6506b65f47186", size = 249624, upload-time = "2025-10-15T15:13:12.5Z" }, - { url = "https://files.pythonhosted.org/packages/c5/12/ff10c8ce3895e1b17a73485ea79ebc1896a9e466a9d0f4aef63e0d17b718/coverage-7.11.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:fcc0a4aa589de34bc56e1a80a740ee0f8c47611bdfb28cd1849de60660f3799d", size = 247744, upload-time = "2025-10-15T15:13:14.554Z" }, - { url = "https://files.pythonhosted.org/packages/16/02/d500b91f5471b2975947e0629b8980e5e90786fe316b6d7299852c1d793d/coverage-7.11.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:dba82204769d78c3fd31b35c3d5f46e06511936c5019c39f98320e05b08f794d", size = 247325, upload-time = "2025-10-15T15:13:16.438Z" }, - { url = "https://files.pythonhosted.org/packages/77/11/dee0284fbbd9cd64cfce806b827452c6df3f100d9e66188e82dfe771d4af/coverage-7.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:81b335f03ba67309a95210caf3eb43bd6fe75a4e22ba653ef97b4696c56c7ec2", size = 249180, upload-time = "2025-10-15T15:13:17.959Z" }, - { url = "https://files.pythonhosted.org/packages/59/1b/cdf1def928f0a150a057cab03286774e73e29c2395f0d30ce3d9e9f8e697/coverage-7.11.0-cp312-cp312-win32.whl", hash = "sha256:037b2d064c2f8cc8716fe4d39cb705779af3fbf1ba318dc96a1af858888c7bb5", size = 218479, upload-time = "2025-10-15T15:13:19.608Z" }, - { url = "https://files.pythonhosted.org/packages/ff/55/e5884d55e031da9c15b94b90a23beccc9d6beee65e9835cd6da0a79e4f3a/coverage-7.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:d66c0104aec3b75e5fd897e7940188ea1892ca1d0235316bf89286d6a22568c0", size = 219290, upload-time = "2025-10-15T15:13:21.593Z" }, - { url = "https://files.pythonhosted.org/packages/23/a8/faa930cfc71c1d16bc78f9a19bb73700464f9c331d9e547bfbc1dbd3a108/coverage-7.11.0-cp312-cp312-win_arm64.whl", hash = "sha256:d91ebeac603812a09cf6a886ba6e464f3bbb367411904ae3790dfe28311b15ad", size = 217924, upload-time = "2025-10-15T15:13:23.39Z" }, - { url = "https://files.pythonhosted.org/packages/60/7f/85e4dfe65e400645464b25c036a26ac226cf3a69d4a50c3934c532491cdd/coverage-7.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:cc3f49e65ea6e0d5d9bd60368684fe52a704d46f9e7fc413918f18d046ec40e1", size = 216129, upload-time = "2025-10-15T15:13:25.371Z" }, - { url = "https://files.pythonhosted.org/packages/96/5d/dc5fa98fea3c175caf9d360649cb1aa3715e391ab00dc78c4c66fabd7356/coverage-7.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f39ae2f63f37472c17b4990f794035c9890418b1b8cca75c01193f3c8d3e01be", size = 216380, upload-time = "2025-10-15T15:13:26.976Z" }, - { url = "https://files.pythonhosted.org/packages/b2/f5/3da9cc9596708273385189289c0e4d8197d37a386bdf17619013554b3447/coverage-7.11.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7db53b5cdd2917b6eaadd0b1251cf4e7d96f4a8d24e174bdbdf2f65b5ea7994d", size = 247375, upload-time = "2025-10-15T15:13:28.923Z" }, - { url = "https://files.pythonhosted.org/packages/65/6c/f7f59c342359a235559d2bc76b0c73cfc4bac7d61bb0df210965cb1ecffd/coverage-7.11.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10ad04ac3a122048688387828b4537bc9cf60c0bf4869c1e9989c46e45690b82", size = 249978, upload-time = "2025-10-15T15:13:30.525Z" }, - { url = "https://files.pythonhosted.org/packages/e7/8c/042dede2e23525e863bf1ccd2b92689692a148d8b5fd37c37899ba882645/coverage-7.11.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4036cc9c7983a2b1f2556d574d2eb2154ac6ed55114761685657e38782b23f52", size = 251253, upload-time = "2025-10-15T15:13:32.174Z" }, - { url = "https://files.pythonhosted.org/packages/7b/a9/3c58df67bfa809a7bddd786356d9c5283e45d693edb5f3f55d0986dd905a/coverage-7.11.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7ab934dd13b1c5e94b692b1e01bd87e4488cb746e3a50f798cb9464fd128374b", size = 247591, upload-time = "2025-10-15T15:13:34.147Z" }, - { url = "https://files.pythonhosted.org/packages/26/5b/c7f32efd862ee0477a18c41e4761305de6ddd2d49cdeda0c1116227570fd/coverage-7.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59a6e5a265f7cfc05f76e3bb53eca2e0dfe90f05e07e849930fecd6abb8f40b4", size = 249411, upload-time = "2025-10-15T15:13:38.425Z" }, - { url = "https://files.pythonhosted.org/packages/76/b5/78cb4f1e86c1611431c990423ec0768122905b03837e1b4c6a6f388a858b/coverage-7.11.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:df01d6c4c81e15a7c88337b795bb7595a8596e92310266b5072c7e301168efbd", size = 247303, upload-time = "2025-10-15T15:13:40.464Z" }, - { url = "https://files.pythonhosted.org/packages/87/c9/23c753a8641a330f45f221286e707c427e46d0ffd1719b080cedc984ec40/coverage-7.11.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:8c934bd088eed6174210942761e38ee81d28c46de0132ebb1801dbe36a390dcc", size = 247157, upload-time = "2025-10-15T15:13:42.087Z" }, - { url = "https://files.pythonhosted.org/packages/c5/42/6e0cc71dc8a464486e944a4fa0d85bdec031cc2969e98ed41532a98336b9/coverage-7.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a03eaf7ec24078ad64a07f02e30060aaf22b91dedf31a6b24d0d98d2bba7f48", size = 248921, upload-time = "2025-10-15T15:13:43.715Z" }, - { url = "https://files.pythonhosted.org/packages/e8/1c/743c2ef665e6858cccb0f84377dfe3a4c25add51e8c7ef19249be92465b6/coverage-7.11.0-cp313-cp313-win32.whl", hash = "sha256:695340f698a5f56f795b2836abe6fb576e7c53d48cd155ad2f80fd24bc63a040", size = 218526, upload-time = "2025-10-15T15:13:45.336Z" }, - { url = "https://files.pythonhosted.org/packages/ff/d5/226daadfd1bf8ddbccefbd3aa3547d7b960fb48e1bdac124e2dd13a2b71a/coverage-7.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:2727d47fce3ee2bac648528e41455d1b0c46395a087a229deac75e9f88ba5a05", size = 219317, upload-time = "2025-10-15T15:13:47.401Z" }, - { url = "https://files.pythonhosted.org/packages/97/54/47db81dcbe571a48a298f206183ba8a7ba79200a37cd0d9f4788fcd2af4a/coverage-7.11.0-cp313-cp313-win_arm64.whl", hash = "sha256:0efa742f431529699712b92ecdf22de8ff198df41e43aeaaadf69973eb93f17a", size = 217948, upload-time = "2025-10-15T15:13:49.096Z" }, - { url = "https://files.pythonhosted.org/packages/e5/8b/cb68425420154e7e2a82fd779a8cc01549b6fa83c2ad3679cd6c088ebd07/coverage-7.11.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:587c38849b853b157706407e9ebdca8fd12f45869edb56defbef2daa5fb0812b", size = 216837, upload-time = "2025-10-15T15:13:51.09Z" }, - { url = "https://files.pythonhosted.org/packages/33/55/9d61b5765a025685e14659c8d07037247de6383c0385757544ffe4606475/coverage-7.11.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b971bdefdd75096163dd4261c74be813c4508477e39ff7b92191dea19f24cd37", size = 217061, upload-time = "2025-10-15T15:13:52.747Z" }, - { url = "https://files.pythonhosted.org/packages/52/85/292459c9186d70dcec6538f06ea251bc968046922497377bf4a1dc9a71de/coverage-7.11.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:269bfe913b7d5be12ab13a95f3a76da23cf147be7fa043933320ba5625f0a8de", size = 258398, upload-time = "2025-10-15T15:13:54.45Z" }, - { url = "https://files.pythonhosted.org/packages/1f/e2/46edd73fb8bf51446c41148d81944c54ed224854812b6ca549be25113ee0/coverage-7.11.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:dadbcce51a10c07b7c72b0ce4a25e4b6dcb0c0372846afb8e5b6307a121eb99f", size = 260574, upload-time = "2025-10-15T15:13:56.145Z" }, - { url = "https://files.pythonhosted.org/packages/07/5e/1df469a19007ff82e2ca8fe509822820a31e251f80ee7344c34f6cd2ec43/coverage-7.11.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9ed43fa22c6436f7957df036331f8fe4efa7af132054e1844918866cd228af6c", size = 262797, upload-time = "2025-10-15T15:13:58.635Z" }, - { url = "https://files.pythonhosted.org/packages/f9/50/de216b31a1434b94d9b34a964c09943c6be45069ec704bfc379d8d89a649/coverage-7.11.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9516add7256b6713ec08359b7b05aeff8850c98d357784c7205b2e60aa2513fa", size = 257361, upload-time = "2025-10-15T15:14:00.409Z" }, - { url = "https://files.pythonhosted.org/packages/82/1e/3f9f8344a48111e152e0fd495b6fff13cc743e771a6050abf1627a7ba918/coverage-7.11.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb92e47c92fcbcdc692f428da67db33337fa213756f7adb6a011f7b5a7a20740", size = 260349, upload-time = "2025-10-15T15:14:02.188Z" }, - { url = "https://files.pythonhosted.org/packages/65/9b/3f52741f9e7d82124272f3070bbe316006a7de1bad1093f88d59bfc6c548/coverage-7.11.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d06f4fc7acf3cabd6d74941d53329e06bab00a8fe10e4df2714f0b134bfc64ef", size = 258114, upload-time = "2025-10-15T15:14:03.907Z" }, - { url = "https://files.pythonhosted.org/packages/0b/8b/918f0e15f0365d50d3986bbd3338ca01178717ac5678301f3f547b6619e6/coverage-7.11.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:6fbcee1a8f056af07ecd344482f711f563a9eb1c2cad192e87df00338ec3cdb0", size = 256723, upload-time = "2025-10-15T15:14:06.324Z" }, - { url = "https://files.pythonhosted.org/packages/44/9e/7776829f82d3cf630878a7965a7d70cc6ca94f22c7d20ec4944f7148cb46/coverage-7.11.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dbbf012be5f32533a490709ad597ad8a8ff80c582a95adc8d62af664e532f9ca", size = 259238, upload-time = "2025-10-15T15:14:08.002Z" }, - { url = "https://files.pythonhosted.org/packages/9a/b8/49cf253e1e7a3bedb85199b201862dd7ca4859f75b6cf25ffa7298aa0760/coverage-7.11.0-cp313-cp313t-win32.whl", hash = "sha256:cee6291bb4fed184f1c2b663606a115c743df98a537c969c3c64b49989da96c2", size = 219180, upload-time = "2025-10-15T15:14:09.786Z" }, - { url = "https://files.pythonhosted.org/packages/ac/e1/1a541703826be7ae2125a0fb7f821af5729d56bb71e946e7b933cc7a89a4/coverage-7.11.0-cp313-cp313t-win_amd64.whl", hash = "sha256:a386c1061bf98e7ea4758e4313c0ab5ecf57af341ef0f43a0bf26c2477b5c268", size = 220241, upload-time = "2025-10-15T15:14:11.471Z" }, - { url = "https://files.pythonhosted.org/packages/d5/d1/5ee0e0a08621140fd418ec4020f595b4d52d7eb429ae6a0c6542b4ba6f14/coverage-7.11.0-cp313-cp313t-win_arm64.whl", hash = "sha256:f9ea02ef40bb83823b2b04964459d281688fe173e20643870bb5d2edf68bc836", size = 218510, upload-time = "2025-10-15T15:14:13.46Z" }, - { url = "https://files.pythonhosted.org/packages/f4/06/e923830c1985ce808e40a3fa3eb46c13350b3224b7da59757d37b6ce12b8/coverage-7.11.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c770885b28fb399aaf2a65bbd1c12bf6f307ffd112d6a76c5231a94276f0c497", size = 216110, upload-time = "2025-10-15T15:14:15.157Z" }, - { url = "https://files.pythonhosted.org/packages/42/82/cdeed03bfead45203fb651ed756dfb5266028f5f939e7f06efac4041dad5/coverage-7.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a3d0e2087dba64c86a6b254f43e12d264b636a39e88c5cc0a01a7c71bcfdab7e", size = 216395, upload-time = "2025-10-15T15:14:16.863Z" }, - { url = "https://files.pythonhosted.org/packages/fc/ba/e1c80caffc3199aa699813f73ff097bc2df7b31642bdbc7493600a8f1de5/coverage-7.11.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:73feb83bb41c32811973b8565f3705caf01d928d972b72042b44e97c71fd70d1", size = 247433, upload-time = "2025-10-15T15:14:18.589Z" }, - { url = "https://files.pythonhosted.org/packages/80/c0/5b259b029694ce0a5bbc1548834c7ba3db41d3efd3474489d7efce4ceb18/coverage-7.11.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c6f31f281012235ad08f9a560976cc2fc9c95c17604ff3ab20120fe480169bca", size = 249970, upload-time = "2025-10-15T15:14:20.307Z" }, - { url = "https://files.pythonhosted.org/packages/8c/86/171b2b5e1aac7e2fd9b43f7158b987dbeb95f06d1fbecad54ad8163ae3e8/coverage-7.11.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9570ad567f880ef675673992222746a124b9595506826b210fbe0ce3f0499cd", size = 251324, upload-time = "2025-10-15T15:14:22.419Z" }, - { url = "https://files.pythonhosted.org/packages/1a/7e/7e10414d343385b92024af3932a27a1caf75c6e27ee88ba211221ff1a145/coverage-7.11.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8badf70446042553a773547a61fecaa734b55dc738cacf20c56ab04b77425e43", size = 247445, upload-time = "2025-10-15T15:14:24.205Z" }, - { url = "https://files.pythonhosted.org/packages/c4/3b/e4f966b21f5be8c4bf86ad75ae94efa0de4c99c7bbb8114476323102e345/coverage-7.11.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a09c1211959903a479e389685b7feb8a17f59ec5a4ef9afde7650bd5eabc2777", size = 249324, upload-time = "2025-10-15T15:14:26.234Z" }, - { url = "https://files.pythonhosted.org/packages/00/a2/8479325576dfcd909244d0df215f077f47437ab852ab778cfa2f8bf4d954/coverage-7.11.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:5ef83b107f50db3f9ae40f69e34b3bd9337456c5a7fe3461c7abf8b75dd666a2", size = 247261, upload-time = "2025-10-15T15:14:28.42Z" }, - { url = "https://files.pythonhosted.org/packages/7b/d8/3a9e2db19d94d65771d0f2e21a9ea587d11b831332a73622f901157cc24b/coverage-7.11.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:f91f927a3215b8907e214af77200250bb6aae36eca3f760f89780d13e495388d", size = 247092, upload-time = "2025-10-15T15:14:30.784Z" }, - { url = "https://files.pythonhosted.org/packages/b3/b1/bbca3c472544f9e2ad2d5116b2379732957048be4b93a9c543fcd0207e5f/coverage-7.11.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:cdbcd376716d6b7fbfeedd687a6c4be019c5a5671b35f804ba76a4c0a778cba4", size = 248755, upload-time = "2025-10-15T15:14:32.585Z" }, - { url = "https://files.pythonhosted.org/packages/89/49/638d5a45a6a0f00af53d6b637c87007eb2297042186334e9923a61aa8854/coverage-7.11.0-cp314-cp314-win32.whl", hash = "sha256:bab7ec4bb501743edc63609320aaec8cd9188b396354f482f4de4d40a9d10721", size = 218793, upload-time = "2025-10-15T15:14:34.972Z" }, - { url = "https://files.pythonhosted.org/packages/30/cc/b675a51f2d068adb3cdf3799212c662239b0ca27f4691d1fff81b92ea850/coverage-7.11.0-cp314-cp314-win_amd64.whl", hash = "sha256:3d4ba9a449e9364a936a27322b20d32d8b166553bfe63059bd21527e681e2fad", size = 219587, upload-time = "2025-10-15T15:14:37.047Z" }, - { url = "https://files.pythonhosted.org/packages/93/98/5ac886876026de04f00820e5094fe22166b98dcb8b426bf6827aaf67048c/coverage-7.11.0-cp314-cp314-win_arm64.whl", hash = "sha256:ce37f215223af94ef0f75ac68ea096f9f8e8c8ec7d6e8c346ee45c0d363f0479", size = 218168, upload-time = "2025-10-15T15:14:38.861Z" }, - { url = "https://files.pythonhosted.org/packages/14/d1/b4145d35b3e3ecf4d917e97fc8895bcf027d854879ba401d9ff0f533f997/coverage-7.11.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:f413ce6e07e0d0dc9c433228727b619871532674b45165abafe201f200cc215f", size = 216850, upload-time = "2025-10-15T15:14:40.651Z" }, - { url = "https://files.pythonhosted.org/packages/ca/d1/7f645fc2eccd318369a8a9948acc447bb7c1ade2911e31d3c5620544c22b/coverage-7.11.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:05791e528a18f7072bf5998ba772fe29db4da1234c45c2087866b5ba4dea710e", size = 217071, upload-time = "2025-10-15T15:14:42.755Z" }, - { url = "https://files.pythonhosted.org/packages/54/7d/64d124649db2737ceced1dfcbdcb79898d5868d311730f622f8ecae84250/coverage-7.11.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cacb29f420cfeb9283b803263c3b9a068924474ff19ca126ba9103e1278dfa44", size = 258570, upload-time = "2025-10-15T15:14:44.542Z" }, - { url = "https://files.pythonhosted.org/packages/6c/3f/6f5922f80dc6f2d8b2c6f974835c43f53eb4257a7797727e6ca5b7b2ec1f/coverage-7.11.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314c24e700d7027ae3ab0d95fbf8d53544fca1f20345fd30cd219b737c6e58d3", size = 260738, upload-time = "2025-10-15T15:14:46.436Z" }, - { url = "https://files.pythonhosted.org/packages/0e/5f/9e883523c4647c860b3812b417a2017e361eca5b635ee658387dc11b13c1/coverage-7.11.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:630d0bd7a293ad2fc8b4b94e5758c8b2536fdf36c05f1681270203e463cbfa9b", size = 262994, upload-time = "2025-10-15T15:14:48.3Z" }, - { url = "https://files.pythonhosted.org/packages/07/bb/43b5a8e94c09c8bf51743ffc65c4c841a4ca5d3ed191d0a6919c379a1b83/coverage-7.11.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e89641f5175d65e2dbb44db15fe4ea48fade5d5bbb9868fdc2b4fce22f4a469d", size = 257282, upload-time = "2025-10-15T15:14:50.236Z" }, - { url = "https://files.pythonhosted.org/packages/aa/e5/0ead8af411411330b928733e1d201384b39251a5f043c1612970310e8283/coverage-7.11.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c9f08ea03114a637dab06cedb2e914da9dc67fa52c6015c018ff43fdde25b9c2", size = 260430, upload-time = "2025-10-15T15:14:52.413Z" }, - { url = "https://files.pythonhosted.org/packages/ae/66/03dd8bb0ba5b971620dcaac145461950f6d8204953e535d2b20c6b65d729/coverage-7.11.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ce9f3bde4e9b031eaf1eb61df95c1401427029ea1bfddb8621c1161dcb0fa02e", size = 258190, upload-time = "2025-10-15T15:14:54.268Z" }, - { url = "https://files.pythonhosted.org/packages/45/ae/28a9cce40bf3174426cb2f7e71ee172d98e7f6446dff936a7ccecee34b14/coverage-7.11.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:e4dc07e95495923d6fd4d6c27bf70769425b71c89053083843fd78f378558996", size = 256658, upload-time = "2025-10-15T15:14:56.436Z" }, - { url = "https://files.pythonhosted.org/packages/5c/7c/3a44234a8599513684bfc8684878fd7b126c2760f79712bb78c56f19efc4/coverage-7.11.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:424538266794db2861db4922b05d729ade0940ee69dcf0591ce8f69784db0e11", size = 259342, upload-time = "2025-10-15T15:14:58.538Z" }, - { url = "https://files.pythonhosted.org/packages/e1/e6/0108519cba871af0351725ebdb8660fd7a0fe2ba3850d56d32490c7d9b4b/coverage-7.11.0-cp314-cp314t-win32.whl", hash = "sha256:4c1eeb3fb8eb9e0190bebafd0462936f75717687117339f708f395fe455acc73", size = 219568, upload-time = "2025-10-15T15:15:00.382Z" }, - { url = "https://files.pythonhosted.org/packages/c9/76/44ba876e0942b4e62fdde23ccb029ddb16d19ba1bef081edd00857ba0b16/coverage-7.11.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b56efee146c98dbf2cf5cffc61b9829d1e94442df4d7398b26892a53992d3547", size = 220687, upload-time = "2025-10-15T15:15:02.322Z" }, - { url = "https://files.pythonhosted.org/packages/b9/0c/0df55ecb20d0d0ed5c322e10a441775e1a3a5d78c60f0c4e1abfe6fcf949/coverage-7.11.0-cp314-cp314t-win_arm64.whl", hash = "sha256:b5c2705afa83f49bd91962a4094b6b082f94aef7626365ab3f8f4bd159c5acf3", size = 218711, upload-time = "2025-10-15T15:15:04.575Z" }, - { url = "https://files.pythonhosted.org/packages/5f/04/642c1d8a448ae5ea1369eac8495740a79eb4e581a9fb0cbdce56bbf56da1/coverage-7.11.0-py3-none-any.whl", hash = "sha256:4b7589765348d78fb4e5fb6ea35d07564e387da2fc5efff62e0222971f155f68", size = 207761, upload-time = "2025-10-15T15:15:06.439Z" }, +version = "7.15.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/be/c3/4f2195f512fb172aa425a8803a874b2baa9ba7f80ff7b6080998761fc701/coverage-7.15.4.tar.gz", hash = "sha256:0548198fff07ccf4faf469520bce1c2eceb1ce3e62891921138dec10907f9d00", size = 936952, upload-time = "2026-08-06T13:50:24.442Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/30/70/b052a519a584663a7bd052841a2debe11c8309ec49a7786340003f9c0a02/coverage-7.15.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d0be6daac4cce6b8c8dc65886bae1b082ddbca4da8e5cbb5e15166acf253e264", size = 222245, upload-time = "2026-08-06T13:46:55.253Z" }, + { url = "https://files.pythonhosted.org/packages/67/39/892fa511aba3d1c3c8f49509a0ff5c71eab9f9f88d08e1a38da395821660/coverage-7.15.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b24e078eabcd6a9caa8b0713f9bc1eeb310bcc960a29d45a3b4fcd4b16d5b11d", size = 222762, upload-time = "2026-08-06T13:46:57.848Z" }, + { url = "https://files.pythonhosted.org/packages/9f/95/b2c724ce1e64bc23cb5b1d7eeffa9548dc3d811f7a6297b2d01607f4e062/coverage-7.15.4-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cfe20cc8cf8821d4fe54f89106cbf06aa27f37b5bbe3535568065a81539b4150", size = 249498, upload-time = "2026-08-06T13:46:59.012Z" }, + { url = "https://files.pythonhosted.org/packages/0b/4f/b1973f67a1382af65b572a31ed692f8e490a6ad707191eab59148376832a/coverage-7.15.4-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:83cf06cdd687677742caff1a9134833b7a8b75f111519d2cb0e0ba1b9a851e15", size = 251328, upload-time = "2026-08-06T13:47:00.764Z" }, + { url = "https://files.pythonhosted.org/packages/a2/09/03efa6722a132abcac91b32a60b64b240dd707c189c64eee697e48992c96/coverage-7.15.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8fa4de68e2a752468ff14b4e15db7def689a71be759e826a31ccecbef69c5fd0", size = 253194, upload-time = "2026-08-06T13:47:01.976Z" }, + { url = "https://files.pythonhosted.org/packages/45/63/8299201d9c80fb65551ce99c966cab83d706ec4066ac999bef08201346de/coverage-7.15.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4dff9daa47d83120c3ec38ce921214242944a832aa04e903e50b5b7ebac8972d", size = 255106, upload-time = "2026-08-06T13:47:03.281Z" }, + { url = "https://files.pythonhosted.org/packages/ee/16/26fd8a691eb8d9a230128685f6d23309d7402cb030aa553001788c8c50fc/coverage-7.15.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a093fd37229918976f602aa07aa59e0973cde82186f220c8e197f721f5be0ce4", size = 250177, upload-time = "2026-08-06T13:47:04.713Z" }, + { url = "https://files.pythonhosted.org/packages/ad/ef/3c7556f33783a0a566e01443ca62bd8eb2cdfe22d271efdc02e08beb5654/coverage-7.15.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:317db01a2cb02552fd67e2b1cca77a4b528a2a277176c5e0bf2cecbb639d3f54", size = 251234, upload-time = "2026-08-06T13:47:06.104Z" }, + { url = "https://files.pythonhosted.org/packages/29/49/640a34043edac950738f36a3567832db5731d4cb2ed84b59cdb89c6bccbf/coverage-7.15.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:8ee3838dcb656602c3b51e16aed9bfb0822f8d8d6d1c5966d32ec8c104be8e20", size = 249237, upload-time = "2026-08-06T13:47:07.467Z" }, + { url = "https://files.pythonhosted.org/packages/48/f5/e80f212669dd1be954ff844f883ef11a437ef4fd0089c6e0effc7b66b15d/coverage-7.15.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:425920379052ff1fe465268f3361d35804a241bbdd5a1b592c8cb60df4c52325", size = 253050, upload-time = "2026-08-06T13:47:08.748Z" }, + { url = "https://files.pythonhosted.org/packages/c7/e9/e5da0fe39f7fde1bca9edc09c60921bb5fdba4cec7db5bbad41ddfd8c230/coverage-7.15.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:69bb2400abef928e365ea7d4d9925169ada78ed2295546780002d4b65de3df88", size = 249508, upload-time = "2026-08-06T13:47:10.072Z" }, + { url = "https://files.pythonhosted.org/packages/7d/38/41bf25774a0c8bba6b467f917cb1c9a0a2605e02dc93aad489fc7050ed59/coverage-7.15.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:81661f82d302484e3119e7c80c519c02fa9bcc2a6b339baf67d67bc89c580f04", size = 250110, upload-time = "2026-08-06T13:47:11.35Z" }, + { url = "https://files.pythonhosted.org/packages/89/6e/26f2e54b79acc29d179ee4272922625aedb69198c4eb61f7ff4f098f3c78/coverage-7.15.4-cp310-cp310-win32.whl", hash = "sha256:cb476b2e828ecb71cb6b6a928d23fd20a7ddb501188022dae1c37499149cc338", size = 224294, upload-time = "2026-08-06T13:47:12.753Z" }, + { url = "https://files.pythonhosted.org/packages/7b/06/9a318fc3ae040d4d6cb2d86101c6aa963fab20899a5c58666adf52cde0ca/coverage-7.15.4-cp310-cp310-win_amd64.whl", hash = "sha256:3fc2130bf37df31852a8384f12601563a45a0024bccc6624f38355cba7a8d360", size = 224919, upload-time = "2026-08-06T13:47:14.17Z" }, + { url = "https://files.pythonhosted.org/packages/2a/66/edcec7d7a0b524aa8923e22925fde6fe50ce005a113dca13ae1581455c4c/coverage-7.15.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bbac5abad70df71019988f83f26ac7092ff2642975def4429e98dc7585ef3490", size = 222367, upload-time = "2026-08-06T13:47:15.578Z" }, + { url = "https://files.pythonhosted.org/packages/e6/c6/ab8de429e2e8548faf58ec7e1674a4ce00414b4113942d3fe87109cf0f68/coverage-7.15.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:357a173465c7ce028d07a95cc2b63b5bf59f50ecdd5ad75c5cbb78ada984048e", size = 222874, upload-time = "2026-08-06T13:47:16.961Z" }, + { url = "https://files.pythonhosted.org/packages/be/c4/3b7b49587e8a6b9af79b3eb468d443d6042b6d65b47aa26586846a0d6566/coverage-7.15.4-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:21b803935e2efc3acebe9697197a294fccf5dc4e5382bd6369542ff7a7d2a1d7", size = 253287, upload-time = "2026-08-06T13:47:18.291Z" }, + { url = "https://files.pythonhosted.org/packages/fb/65/ec03b743a2a229c72cc1eff3e57be9d3564e9c6b4d5aba2d70744a3fc0d8/coverage-7.15.4-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7a2b580774a4786c1053157c0165e04476e03ff293993d7c148eee784a94bae6", size = 255199, upload-time = "2026-08-06T13:47:19.765Z" }, + { url = "https://files.pythonhosted.org/packages/41/4b/5163729e4b6582d61975cfd3ccab45b4ec53e21cf156d9941cb025188468/coverage-7.15.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a9464451c4efffe8d47ace5a540b10b0dc10e879066290f8600872b7f54a419d", size = 257308, upload-time = "2026-08-06T13:47:21.206Z" }, + { url = "https://files.pythonhosted.org/packages/86/08/2167a0f08fb87d702fa423a48578a32865464b7c9e1db3911ad7812ab414/coverage-7.15.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:de602f34123c2f4af1c1869c6dbbbd60da6d5983bf01937367295d135cccbfce", size = 259268, upload-time = "2026-08-06T13:47:22.503Z" }, + { url = "https://files.pythonhosted.org/packages/1e/e5/68eebae3053dbd48508edea559c21b23fbdf3460784f91370c83a86a6acd/coverage-7.15.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6879ded16a27f3eeca19b900c147e81616e7054db451471a611b2755ee5249f7", size = 253392, upload-time = "2026-08-06T13:47:23.88Z" }, + { url = "https://files.pythonhosted.org/packages/1a/46/fd4ced40a2b691c774e515c9b69500bfa64c7960b67fcee4b2f6fad97fc3/coverage-7.15.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:986be58c3ab54aae8d3496a6225eea74f760fdbe739b38bd442c7e8d133aa53b", size = 255001, upload-time = "2026-08-06T13:47:25.469Z" }, + { url = "https://files.pythonhosted.org/packages/53/25/ae2e5fa710bb6957a9aadeb9e3598d3b3e4af6587ce857ad42e8639a3f30/coverage-7.15.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c6103639613fe6c1e989082948419bc77a2d26b6c825c99d7fad25f7d3d87afc", size = 253061, upload-time = "2026-08-06T13:47:26.845Z" }, + { url = "https://files.pythonhosted.org/packages/d7/31/67ddc0365db2c6e93ac8580bc4bbc50f65273262f973f63ebcdbc15c0495/coverage-7.15.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d3af93dddb5659276c63bc16ac6466ac2033a70ca816097bbc06345b8ccdf571", size = 256831, upload-time = "2026-08-06T13:47:28.217Z" }, + { url = "https://files.pythonhosted.org/packages/f6/78/82b8fd18f57fb13f12d98fe874995bb2c4f9f17be8aff762c426323fdb96/coverage-7.15.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:b10075e5421d04265766a6d1dac809bbeb8a946fbb23c8f82c227409b2190719", size = 252781, upload-time = "2026-08-06T13:47:29.712Z" }, + { url = "https://files.pythonhosted.org/packages/0a/eb/6c74ef4dd12b252e573c49bdef9e2ac265bf3dbb79b8d7feb3266e084e9e/coverage-7.15.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a67a9f78b2942d87ba8ce3059c642164d2aedd65337377fb52fe9803656bc5c7", size = 253692, upload-time = "2026-08-06T13:47:31.192Z" }, + { url = "https://files.pythonhosted.org/packages/5a/66/eb9aed1c3fd2d36ee00eb173f434b14fa607fc056739c9a89ff4244010ea/coverage-7.15.4-cp311-cp311-win32.whl", hash = "sha256:69484d1aca26e322e1c3ce03f09341e84524ababad2d7202161738d83cc9f82e", size = 224461, upload-time = "2026-08-06T13:47:32.572Z" }, + { url = "https://files.pythonhosted.org/packages/e2/6d/81fa4161dfb3ed9d74e40d58647eff83a56b7612e78352581280fce2f477/coverage-7.15.4-cp311-cp311-win_amd64.whl", hash = "sha256:63fd6fcd1dd6e158f7eb78606e72933b3f6d01e7b747f99c6c12d764307a0fdc", size = 224937, upload-time = "2026-08-06T13:47:34.205Z" }, + { url = "https://files.pythonhosted.org/packages/5b/c1/d8dacf683c6cad3cf85ce68fd3774a6774ec402128822fdfaed920f11e6a/coverage-7.15.4-cp311-cp311-win_arm64.whl", hash = "sha256:ea82116c9893fa89e929b7f197ee5a1950a76e91cc5c85ba503fc02379d04890", size = 224479, upload-time = "2026-08-06T13:47:36.118Z" }, + { url = "https://files.pythonhosted.org/packages/1d/48/bc8d4ba7b37551a767bd863f15b3f80182b271c2f55975356f5f7dbe94c2/coverage-7.15.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d4fedd1f7f428f9fe83b1ead5e7cc87a43427be31aadafbac3ac0636dc7abb22", size = 222543, upload-time = "2026-08-06T13:47:37.562Z" }, + { url = "https://files.pythonhosted.org/packages/20/dd/88d6f83f1fffc974a3691a34a97951c5b12df7512a6782c5963883cbc058/coverage-7.15.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:37e2f0cdf58e2e1fed4e4d5a8f8786ae2f7eb80b478016876667dc4a01d60a97", size = 222905, upload-time = "2026-08-06T13:47:38.927Z" }, + { url = "https://files.pythonhosted.org/packages/bd/5c/54ee0d4748585bb0acab9891cd8d92f2d3593165b4e59fc9de113bfb3140/coverage-7.15.4-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:fb55d0e70bb15f2e81477613627286581414693d74ac7963c93a790dd453ca9d", size = 254407, upload-time = "2026-08-06T13:47:40.488Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3f/f0642a372f494bd0d7dad3b497083b910194a5f1c88be2c94fef707c3b59/coverage-7.15.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:899b9da30f3c6c336566e3707495bb23e8302d39d862f01fa78c48b99b9437e2", size = 257145, upload-time = "2026-08-06T13:47:41.931Z" }, + { url = "https://files.pythonhosted.org/packages/71/17/8b46d0ed68251016002ec972c8fc0119961a765d0984cafb8bf317c43758/coverage-7.15.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d15715e8c46552827e5e4f30a35575a2dbcad14454cf3284c54483946bd16931", size = 258257, upload-time = "2026-08-06T13:47:43.527Z" }, + { url = "https://files.pythonhosted.org/packages/30/b8/8498a0e72d0adbe15477dd07463d2b3bb2c9f6a4815e8589e50939e2c3ae/coverage-7.15.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:002a438859f7b430bc99afeaf01a6d187dad1d0dc907b64cdeffc632a5db8fd8", size = 260517, upload-time = "2026-08-06T13:47:45.121Z" }, + { url = "https://files.pythonhosted.org/packages/41/e1/7dce19c3bdb1e3dd63e769508216500edad81bd5f69a26d724e32aceaf78/coverage-7.15.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e4193a04b518f7968f3099755f5509ee7cccc6dc2b92a6b14841934d22e222c9", size = 254785, upload-time = "2026-08-06T13:47:46.541Z" }, + { url = "https://files.pythonhosted.org/packages/dd/b1/e1494703c675a2561723cd9b89f45c9168782c31280c611b1f767851e57c/coverage-7.15.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e98dcc55d572b38e69d117da7e8e8efb8500f1f5eaf81ecd460a63220790b839", size = 256176, upload-time = "2026-08-06T13:47:48.155Z" }, + { url = "https://files.pythonhosted.org/packages/73/76/a5629d270fb638a43a4b10466f51e2f49d532c1aa4da2913cbbb150bbe0a/coverage-7.15.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:af6c538498ce66c10d3fd541c2a8d5b03da5850355add34e6cba564210cb9e72", size = 254321, upload-time = "2026-08-06T13:47:49.757Z" }, + { url = "https://files.pythonhosted.org/packages/ff/4f/9c44447218435d5766b911534f9d798144a5560f85e9a54ebe5f3f5d19f9/coverage-7.15.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1d10025d96ea89fc2f73714dbc4cbd433fe012c1ac9e23f895d7728b238b6e52", size = 258390, upload-time = "2026-08-06T13:47:51.248Z" }, + { url = "https://files.pythonhosted.org/packages/de/36/c1e127616fb3fa18a9ff71e76c417f2fd7424332a4870015ac224ef4c039/coverage-7.15.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d802e1947603162ded419bff83ac7489820355d2b856dfb09206574e3a37ac0c", size = 253894, upload-time = "2026-08-06T13:47:52.816Z" }, + { url = "https://files.pythonhosted.org/packages/e9/b9/fdb92c8ae7a8bb9b850cc253b7b3b9c8526f68130002048b5671cd510d09/coverage-7.15.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c2de40895718f91951b86712b4c5b694acaf9a0a49be13874896f599a1eed3f4", size = 255763, upload-time = "2026-08-06T13:47:54.296Z" }, + { url = "https://files.pythonhosted.org/packages/6f/c0/a7d51b2587c7bdb76e71b0896d2565bf7d60436b5122fc83e511adb1f7cd/coverage-7.15.4-cp312-cp312-win32.whl", hash = "sha256:5c3431b2161279b7db5c2a1aa58ae02e5cb8c3c42d93a5094be3f5537bd5b11b", size = 224597, upload-time = "2026-08-06T13:47:56.074Z" }, + { url = "https://files.pythonhosted.org/packages/49/b9/5c5f80cc55f5acaaca6dee677626bfcec8c87204a7809b438b08e84f4571/coverage-7.15.4-cp312-cp312-win_amd64.whl", hash = "sha256:6befeab5fb2b51c958ca4ac6c5d141a1e8240f4f76e46350f1911963deda49cd", size = 225135, upload-time = "2026-08-06T13:47:57.52Z" }, + { url = "https://files.pythonhosted.org/packages/47/e4/2a4561f89ff6bf7c925c287d0f2cce8bdf139c3a33735c87e3203401cf94/coverage-7.15.4-cp312-cp312-win_arm64.whl", hash = "sha256:67bc345491ab55b837277d76f5775d057e8c7f1ac44d890d8c2c82adde258c6f", size = 224515, upload-time = "2026-08-06T13:47:58.977Z" }, + { url = "https://files.pythonhosted.org/packages/f1/84/651a9310859673aaa3b3203f1aa1641ca60fcf2494683e1c9474c7172780/coverage-7.15.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c705b28feb2775dc82a25f1d473a370bc37ff93f5177f4e29ce2425f560f6921", size = 222565, upload-time = "2026-08-06T13:48:00.796Z" }, + { url = "https://files.pythonhosted.org/packages/82/f9/4dcf700137e8af550670f4d74d1b63828ce93e1e2b05e5f10710eb2ea987/coverage-7.15.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3ff205ab5e3ecc670f6a4dd19d9cbf12ede53dd41cfc1e15716ec961ea6d314e", size = 222936, upload-time = "2026-08-06T13:48:02.391Z" }, + { url = "https://files.pythonhosted.org/packages/07/4a/612ff1e780b3fbfd637486f542f84adc5503873d8b5d279dec1ffeef9414/coverage-7.15.4-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5172326e861a38b48b48befca15e0f477a26b283337a33a739c8fed229934e36", size = 253926, upload-time = "2026-08-06T13:48:04.382Z" }, + { url = "https://files.pythonhosted.org/packages/b0/04/d1cff1c2ead4708a6a79c01d3736b6a25bd38a36678398f72a8dd33dfad9/coverage-7.15.4-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:12b59c90084e3234fb11184886bf4a40f4f16a8c8f867be2e087b81f8e8868d4", size = 256523, upload-time = "2026-08-06T13:48:05.996Z" }, + { url = "https://files.pythonhosted.org/packages/b9/80/d34e13fb4b293cbdb9665838cf5522077b8ad14ef947550631a4bced36a5/coverage-7.15.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:349062d66f00b40fa2c1c222438bad25fabf755631b5d82937fe985c8008615c", size = 257759, upload-time = "2026-08-06T13:48:08.036Z" }, + { url = "https://files.pythonhosted.org/packages/0f/e7/2c5fe7636fdb0732fe0f09f308a5b066864078b7fc61f6678e8478554f2e/coverage-7.15.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4256ced708e598e05209bc1a8ab4074e04a51dba4c62fb45926a229af675ace7", size = 259890, upload-time = "2026-08-06T13:48:09.834Z" }, + { url = "https://files.pythonhosted.org/packages/92/28/9689f0858dfff59c2ea688938ab9fa2925631235df67126a42b6c5c70ae1/coverage-7.15.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d80f974b20782d9612c8b4c9beeca867074c7cf4079d1419843fa25a26428b25", size = 254121, upload-time = "2026-08-06T13:48:11.459Z" }, + { url = "https://files.pythonhosted.org/packages/f9/e2/785077c230c157243eb5aa9a26c3be260ecd02001bead54a3cada3df8e03/coverage-7.15.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2e179f19bfe1d31f8eeeaa12990194d761c4f62f0759661000bca6cd8729f40b", size = 255891, upload-time = "2026-08-06T13:48:13.209Z" }, + { url = "https://files.pythonhosted.org/packages/d4/90/e20371b17b40f912f21305c2db2f30efa3de306f7320fc916804872c85a4/coverage-7.15.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8bc16bb47b7679670eceff71d78bfb7d6e5b143f6c2cd117487ec7c75e0d4b78", size = 253859, upload-time = "2026-08-06T13:48:14.736Z" }, + { url = "https://files.pythonhosted.org/packages/05/49/25371987ee459a5f67c0427fb75c74f9358e65f2c71fe75bf41c1b6c5fcb/coverage-7.15.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:1cd685005cd2c4200adfc14cf39a603b9320efab3f18a8f7f156d20c9cc3345f", size = 258011, upload-time = "2026-08-06T13:48:16.464Z" }, + { url = "https://files.pythonhosted.org/packages/30/6e/32e67467f6154bf4f1c4f63b05acc5097cba4237d45bbeeea446b52e8ac1/coverage-7.15.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:337399ad2c93b3acd2a937627dae8b3e86b66707cd3d3e856347999aadf1ef8d", size = 253676, upload-time = "2026-08-06T13:48:18.493Z" }, + { url = "https://files.pythonhosted.org/packages/03/c1/8b24192e89286399765155251f99ee9f070a9d637109018ac23d99b99f6f/coverage-7.15.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:96e257121228ec5cd2bb919276e94ac11074471bc37d68dbae0e8308cce15fff", size = 255453, upload-time = "2026-08-06T13:48:20.057Z" }, + { url = "https://files.pythonhosted.org/packages/16/6f/8b41ebdf67c87854e17c035336a90f1cfbad0c14c2a584301be6ff148718/coverage-7.15.4-cp313-cp313-win32.whl", hash = "sha256:c65a9e0dfc6143491879da4e13b5e30f8be192055de508d737fb14601edbd22c", size = 224605, upload-time = "2026-08-06T13:48:21.655Z" }, + { url = "https://files.pythonhosted.org/packages/e0/e2/2946c7f0b42b152ecb21ff1bdad72e3d301e790c0c487e4a86e8c9f69347/coverage-7.15.4-cp313-cp313-win_amd64.whl", hash = "sha256:2ff8f5e9b8f7a94f0c11c45631eee103dbcb7d63274edd12c56efe1be690b3b4", size = 225148, upload-time = "2026-08-06T13:48:23.376Z" }, + { url = "https://files.pythonhosted.org/packages/9e/83/3f4a69957f48ae7a0aba76c34743f88963d607b19e03f3f8e66f91cae0f9/coverage-7.15.4-cp313-cp313-win_arm64.whl", hash = "sha256:6e0a8a5083b096487d6cfced94cdd514d8f5db6f113610fb36c0620edb1028cf", size = 224536, upload-time = "2026-08-06T13:48:25.117Z" }, + { url = "https://files.pythonhosted.org/packages/ea/ac/748cf29eeb2d6be34a3176ce26a4f49e38085ee08e8935f05f6f26ed7e0f/coverage-7.15.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:770e9325ab5ea6d56f77e59b29ecfe0ac20b57a82a601876f90494a4dda0386f", size = 222608, upload-time = "2026-08-06T13:48:26.806Z" }, + { url = "https://files.pythonhosted.org/packages/0b/02/1abbf5c984677b0aa439cdacaccbf38d248939d8ef8fe1cc7a50d73edb77/coverage-7.15.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d12b33a3a50a1676b7784dc8d00a0c6d66a9f2add4b85a041c19b6a7e53ef23c", size = 222940, upload-time = "2026-08-06T13:48:28.432Z" }, + { url = "https://files.pythonhosted.org/packages/eb/e1/ff8f9f53d9fcf586125b55d0b1f04ec1c14955fee41e83d5814bee141bb5/coverage-7.15.4-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5669c8378ebde86f5def7a25d29586631b58acc27ffde04399f678f3dfc6e082", size = 253985, upload-time = "2026-08-06T13:48:29.995Z" }, + { url = "https://files.pythonhosted.org/packages/a1/26/595759762e514e81be1d7d01ed03444303bcd152226a6529998d253f9201/coverage-7.15.4-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ff97a14362eef486483ed44042ca2027ea257df6ff768e62358ee0c9776925ac", size = 256492, upload-time = "2026-08-06T13:48:31.634Z" }, + { url = "https://files.pythonhosted.org/packages/24/68/b79aabac54d482be23b5fcdd4f4662bff24a78edc4ee29201726929936d5/coverage-7.15.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5a325e815318638aed1655d9c06e6d7c2d3d46c09231ce988070428a8762d734", size = 257837, upload-time = "2026-08-06T13:48:33.186Z" }, + { url = "https://files.pythonhosted.org/packages/09/0f/bf7f297885a5bf6fd71e5782404e0ff059ca09e8711ceb3a08544abde45a/coverage-7.15.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:474223409d88eb20d2d6a0d37ea60e8647a65a90cc008dc1f0410af5f64f1e0d", size = 260152, upload-time = "2026-08-06T13:48:34.75Z" }, + { url = "https://files.pythonhosted.org/packages/fd/f1/296744e854ff8368542343457414380465e9ceefb9192342feb9d3bc461d/coverage-7.15.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7f2f62ae3cd189dd2e13aece758c57b3eecbd27be070dbd4cbd10936049e5dbf", size = 253978, upload-time = "2026-08-06T13:48:36.434Z" }, + { url = "https://files.pythonhosted.org/packages/55/b0/bbdb2e9057493e66220a2e149ca2d301ba0e3a58a83bd6b90de9826d16f3/coverage-7.15.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:39ece820e29e0a2ba34b3ecb3be83c27e997eed8926f2ba6fe7ce7a0bda5843b", size = 255846, upload-time = "2026-08-06T13:48:38.317Z" }, + { url = "https://files.pythonhosted.org/packages/96/e4/38015b2b6d21258713bd17e76b59d033b191efb5703589cffd037dfbca20/coverage-7.15.4-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:f21b56dcace11dfe013014201f577dcd592b2a9b72182d930361b47cf6f73f25", size = 253808, upload-time = "2026-08-06T13:48:39.993Z" }, + { url = "https://files.pythonhosted.org/packages/0b/64/0d515c1e60ee6fbfd1a0e79c07cd87d388a233b7adc37758735677203808/coverage-7.15.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:93a3a0b662abcc10c73a47cbc72cd60f63618d6989fb2d1286e50eacd974f303", size = 258081, upload-time = "2026-08-06T13:48:41.971Z" }, + { url = "https://files.pythonhosted.org/packages/91/71/04d9e7a3642146c6351338aef4ef85ab11dbbb54744c13245caba1aad1c0/coverage-7.15.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:141fae2cabf5569b782c10afc4c850ce10f618c13f8db54765cba99cc839da1f", size = 253624, upload-time = "2026-08-06T13:48:43.731Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a7/6c28b74c81ebff66987b0e2522ba5cffa3e90b0c33cb6a2eb264d4ee8cf1/coverage-7.15.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:81294c7e6ab30c5f74c0353b11b2fd6320e72d9bee6ac73b357caa8b916323a5", size = 255280, upload-time = "2026-08-06T13:48:45.58Z" }, + { url = "https://files.pythonhosted.org/packages/52/af/bc19996a7014b98d7bbb0f0939453c67074af65784a3aa16a789a07381fa/coverage-7.15.4-cp314-cp314-win32.whl", hash = "sha256:7bbd7d6418e0dab31a206af5203bd43ae36edb8e7fba1940b055d3e9249290d7", size = 224768, upload-time = "2026-08-06T13:48:47.525Z" }, + { url = "https://files.pythonhosted.org/packages/ee/90/219484e476d6e101ba0a444852579e05f5b75c37c611a42ed1190f73ef62/coverage-7.15.4-cp314-cp314-win_amd64.whl", hash = "sha256:f0204ed122758782970526057093f448051a39db9d810d4e344bb87a3546f425", size = 225259, upload-time = "2026-08-06T13:48:49.513Z" }, + { url = "https://files.pythonhosted.org/packages/b7/66/fa77daf4e383e5f776dac62c2409b6af81910ae6fe326bd5170dba74cc63/coverage-7.15.4-cp314-cp314-win_arm64.whl", hash = "sha256:9e71e7bc71c686a123347ae47a0de33a175e797a85bb57b791492adf4eec8ed8", size = 224684, upload-time = "2026-08-06T13:48:51.235Z" }, + { url = "https://files.pythonhosted.org/packages/58/5b/f03bf0ce362bbf3f785fa5219620d00778d4ac6fc9e407734828e9c672f6/coverage-7.15.4-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7c922735321eef3f87c280a3d39afff6b646723a2880b862cda4ac7a093b8aa8", size = 223338, upload-time = "2026-08-06T13:48:52.896Z" }, + { url = "https://files.pythonhosted.org/packages/0f/76/e77d0ae22501831cc9f92193e8a957a5caa1dd177f90a6d1d9b106242d92/coverage-7.15.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f41c17c4668a655ce96d090d8d5ffdc24ef64b5a02f9753884d08483e8a4a41a", size = 223609, upload-time = "2026-08-06T13:48:54.688Z" }, + { url = "https://files.pythonhosted.org/packages/82/1a/b1f089da8d38ac612fa2dd6dc7f4a1a7657d12f3e261d2996edd3a838d0b/coverage-7.15.4-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:46822e9b6ff1c6a72b518c162c44a8f45a61a1d609c51084bf5b16c023c5037b", size = 264970, upload-time = "2026-08-06T13:48:56.403Z" }, + { url = "https://files.pythonhosted.org/packages/bf/31/e66d98d6e9c7fcc88470f1e234eaf6b1950dc0dfbf797f7282c1c861da24/coverage-7.15.4-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3d6f4955b73b5445271379a59e3792b0d978f42d4a01e0cf7a67d9c33a3bb0a5", size = 267088, upload-time = "2026-08-06T13:48:58.41Z" }, + { url = "https://files.pythonhosted.org/packages/59/a1/ae94eb2c541add426378408379f233591e069040b1e2cdb33df9498a0682/coverage-7.15.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3fc9e047706fb4a9abb54f719d3aa643e80e5bb3818182c40aee01ac0f0247ba", size = 269508, upload-time = "2026-08-06T13:49:00.42Z" }, + { url = "https://files.pythonhosted.org/packages/9c/c7/88a10694a1c6a213569766aba9f25847b28155d4ac731b13226db216356d/coverage-7.15.4-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:05e491d4f3165d62d4f5c8fd48dfeabf2ae8f42cbbd484319af33ea851b78982", size = 270629, upload-time = "2026-08-06T13:49:02.234Z" }, + { url = "https://files.pythonhosted.org/packages/b3/34/d8b8232e5e55169933b59aabcef2fedfa4b9d8897361bb80fcbda146505f/coverage-7.15.4-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:226c66e80ec0598d3b9b4874123df167ccca342aca8714f77cac6829688ee09c", size = 264043, upload-time = "2026-08-06T13:49:04.102Z" }, + { url = "https://files.pythonhosted.org/packages/7e/35/58b009dbf8c471c7224716478b9fed4a7e1af15320e1ed41660978504663/coverage-7.15.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ac41cc14bebda0dbfb0628036b7f75706935c95bcc07fefe9a0f93614aa60a57", size = 266963, upload-time = "2026-08-06T13:49:05.821Z" }, + { url = "https://files.pythonhosted.org/packages/62/aa/57fbda1b42c892968273c56b6ee9dc0f1310850859230a507bc7873b1f65/coverage-7.15.4-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:8af623e5cd92080acddd02b38f2f406a2c3a0893c38950b211890361448fbf26", size = 264569, upload-time = "2026-08-06T13:49:07.706Z" }, + { url = "https://files.pythonhosted.org/packages/98/8a/360e6e7f24d477b7e889703af0afa878d15b6d4d8d2a822b2835c169a879/coverage-7.15.4-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:07545711d4f0f32852a18f18ad11f76f0109909d09e78b9008b4cfc67e829429", size = 268299, upload-time = "2026-08-06T13:49:09.587Z" }, + { url = "https://files.pythonhosted.org/packages/4e/89/6f701261aee21b6b5fa8f7872229406dc917e125069448292223bf213606/coverage-7.15.4-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a0865421cfdc53654b342d515e5a233187590882d20b95752150e53f65460017", size = 263413, upload-time = "2026-08-06T13:49:11.604Z" }, + { url = "https://files.pythonhosted.org/packages/3f/0f/6f04036edc260ed425af83e834f627fad48941ce97b50bfe6edd8b6fa623/coverage-7.15.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:460115e32ee40566476db5048f9bec1e842c127ad8e6f8be745aad3ac9cbc839", size = 265725, upload-time = "2026-08-06T13:49:13.38Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ce/d19b5d4d5c49a7bfb925fd74310fee7d28bc99520ac3367ccbc54e662518/coverage-7.15.4-cp314-cp314t-win32.whl", hash = "sha256:cbde877ef9dd7baf272b9bfef2b8a25edd45d9170fc326951dd20eb480335e85", size = 225079, upload-time = "2026-08-06T13:49:15.265Z" }, + { url = "https://files.pythonhosted.org/packages/26/bb/7aa1b3b173faee0679037ca950bbbe1247273656697994d8d13f80f8d4b4/coverage-7.15.4-cp314-cp314t-win_amd64.whl", hash = "sha256:3da9e92d1c551fd7563833e9ade686efb0c4b7363ab7681a94283958c950bf5e", size = 225911, upload-time = "2026-08-06T13:49:17.279Z" }, + { url = "https://files.pythonhosted.org/packages/81/1c/4ea9e47426d80038d9222db3c4534cb6021a74b237d3ff97ffd33b6600dd/coverage-7.15.4-cp314-cp314t-win_arm64.whl", hash = "sha256:3a54f5a0d85050c73a38f6793090ee83974531e67fe5e57a1da9bee11398aa5e", size = 225219, upload-time = "2026-08-06T13:49:19.293Z" }, + { url = "https://files.pythonhosted.org/packages/2b/c4/dc5d2ac8f9142e7ec7de66e7bf0591db29d78955a040bd915870d9c0e657/coverage-7.15.4-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:2c9872e4d9dc5d3cf616bf4b382f5a00359305a5be666a3dd0b5cdb4e49597f9", size = 222604, upload-time = "2026-08-06T13:49:21.279Z" }, + { url = "https://files.pythonhosted.org/packages/70/39/33e63df81fe2ee100897451841c821467635923e58e37c6bd4b46dd8106c/coverage-7.15.4-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:e101dbb4b9b72f0cddd8cdc8c9c5b47f456766f5e0ac82dbfb75e5c55409b78a", size = 222944, upload-time = "2026-08-06T13:49:23.187Z" }, + { url = "https://files.pythonhosted.org/packages/99/1f/ef3ffb5557febc75a0d97aa459d0266d7d741110265121cc6d8539343d44/coverage-7.15.4-cp315-cp315-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7d1abebdb047729e852b9c77a00497dfbeb11eb3a117e037d7dbc3ac8e5f5c54", size = 254050, upload-time = "2026-08-06T13:49:25.008Z" }, + { url = "https://files.pythonhosted.org/packages/6f/f5/1f0f6f77698c3601ca0ae7431e34b24c62ca2f06fecb23b73ed1f651d2be/coverage-7.15.4-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d28a4a899354d0ea6214cc59b4fa19eefbce1b9ff1688ab579acf49e894bd3fb", size = 256967, upload-time = "2026-08-06T13:49:26.896Z" }, + { url = "https://files.pythonhosted.org/packages/03/7a/2ed9bed79925f4367c83c77f66a89e5ca7229c288d2d19ad5f36d1ca0070/coverage-7.15.4-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ffb3c2aacea411cc7e1d27712490c11108e2de1d39019ae32915493a59a8b9ed", size = 258587, upload-time = "2026-08-06T13:49:28.692Z" }, + { url = "https://files.pythonhosted.org/packages/45/8c/fa34044f71b7cc4ecb6da9c2408770959b0591fa9b5fb6fb6bca38f94298/coverage-7.15.4-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a9447978a92f405d301123cfd39ff49895490efb769a758fe2734c7f631bf8ce", size = 260785, upload-time = "2026-08-06T13:49:30.472Z" }, + { url = "https://files.pythonhosted.org/packages/4f/54/d5727ce36b4524a7394ab9f5f1df378e1f23affcdab01037dc8655185cc7/coverage-7.15.4-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:050467a7983b8e2fe7dd41a78bb30c3e7f8c0b8cafda14b1c46f8b5e3cf2dd3c", size = 254545, upload-time = "2026-08-06T13:49:32.271Z" }, + { url = "https://files.pythonhosted.org/packages/dc/e6/6e3783e576719590194bdffb6dd6d85490801785b7c331e35a245d8cb8b5/coverage-7.15.4-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:d003b7a5708ddad5c206c79607a6b92abb6fc13c57d99d8a4468cc03a2941ced", size = 256682, upload-time = "2026-08-06T13:49:34.089Z" }, + { url = "https://files.pythonhosted.org/packages/dc/f2/bacdbde18b69ed2de424fcf64d9fb0a4913753d4f0eca8bae9daad69f4bd/coverage-7.15.4-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:c38efe30fd74e5c19e9433f11fb1f5dc9c6522770971b7c6145bbaa413dc8800", size = 254560, upload-time = "2026-08-06T13:49:36.052Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a3/1fb927196e3477c1b48831169ab58ba08f451ba87ae311ff1de68b26a616/coverage-7.15.4-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:1f4f826d70f772ab8b0c052329580d7fe8b8abd191e4ce0c8f81aec6614665d3", size = 258792, upload-time = "2026-08-06T13:49:38.01Z" }, + { url = "https://files.pythonhosted.org/packages/41/58/30d4c149c69053de0edfe325614c1d28d508f62b1783e0e4a234d2e49136/coverage-7.15.4-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:4a4bf917c9953f57c957be31c1cd504e3bd2f34d4a352b9d391a3025336f6768", size = 253968, upload-time = "2026-08-06T13:49:39.934Z" }, + { url = "https://files.pythonhosted.org/packages/89/e4/77f639371b918aad30dda4051f95404b43578f7f2e2f87ba73e02ed1ff37/coverage-7.15.4-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:1c9bf40ebef178a45192c75c4964760bb261b0e6ad725da5fc4c93f674f19753", size = 255893, upload-time = "2026-08-06T13:49:41.825Z" }, + { url = "https://files.pythonhosted.org/packages/5c/62/13be29b3ddab35f14c87967a4820a05106d2a3eccb4fa4ff550bf30b75e0/coverage-7.15.4-cp315-cp315-win32.whl", hash = "sha256:43619d04c3671792d2c4706ae8bf45e265dc87bbd4078189ef8b847ea1e74be2", size = 224768, upload-time = "2026-08-06T13:49:44.08Z" }, + { url = "https://files.pythonhosted.org/packages/a1/70/af0c6be0f964af6954f6b74bc109b0dbca02824696d2520fb17fe1ab06e3/coverage-7.15.4-cp315-cp315-win_amd64.whl", hash = "sha256:be619439dbcd31a2eab10b32de9fff62c26ed4bab69dc32b8363fdaaa0882809", size = 225242, upload-time = "2026-08-06T13:49:45.899Z" }, + { url = "https://files.pythonhosted.org/packages/4f/2d/f3bd3aab899fc9efc18b53133ee68f5f98574ef480649b23e12962226387/coverage-7.15.4-cp315-cp315-win_arm64.whl", hash = "sha256:def597967dafc2e8d97c9097ea453c464e0bb8ed38f193a43070f10dc623bb6d", size = 224674, upload-time = "2026-08-06T13:49:48.322Z" }, + { url = "https://files.pythonhosted.org/packages/f5/ca/f69251cd63eabc6438321aea22148754cce758a26bde07dd490e3fe7cfc5/coverage-7.15.4-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:c7dbc748ac8a1e3e59a2b28bea47675e6e778081dbbf081bde0d75def2fcbe1d", size = 223333, upload-time = "2026-08-06T13:49:50.293Z" }, + { url = "https://files.pythonhosted.org/packages/a7/a7/037b53b2885b0d8447064432491a4d5a1014cd9f97a594d53acd0c04541a/coverage-7.15.4-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:2413074a5ecbb61a01a7888fc72db0ca324d13588c5b38bc0dd8564cdcdfea26", size = 223630, upload-time = "2026-08-06T13:49:52.637Z" }, + { url = "https://files.pythonhosted.org/packages/80/4f/152b8a4779ae90da11bb24f7467df8a59f0be48a5c52acb856325ca48289/coverage-7.15.4-cp315-cp315t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4e6f6f632b7b2f714bf7a1346e8f97b650ee71f3c298aaad42a2ab60f0f07645", size = 264489, upload-time = "2026-08-06T13:49:54.52Z" }, + { url = "https://files.pythonhosted.org/packages/10/2d/84b4b9e0e1dd6528a51920ff7031f35b789382e467a28ec6a5a578cb8812/coverage-7.15.4-cp315-cp315t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8df457da2249d3c75ca2e5e835d59c725abfe92d27fdff6cd99eed85b51d5e9a", size = 267567, upload-time = "2026-08-06T13:49:56.721Z" }, + { url = "https://files.pythonhosted.org/packages/53/fc/ba01cc25299f9f8a2c8b02d3b28c53f3543d9fbfbe4e74fa2760b48f163e/coverage-7.15.4-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:050f66a08805acb5b8a23c6d4a517b1ecf82c08e81ed0e4bd727df065e5c6624", size = 270123, upload-time = "2026-08-06T13:49:58.736Z" }, + { url = "https://files.pythonhosted.org/packages/cf/d0/db2647cbf40b14f8c308f94ff7bf89c06d564e59f396906edf50086ec788/coverage-7.15.4-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1587fb771d1ccceef708fdde1e5af8c7ed24b486b61d13a321acb7d8145390aa", size = 271107, upload-time = "2026-08-06T13:50:00.811Z" }, + { url = "https://files.pythonhosted.org/packages/70/ff/4d2d17924552c458bb4f77dd631f0e3bc92fbbdf2d2d916cd4b33bbfd5b1/coverage-7.15.4-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8b4f1c3a69ca580f3fbd6b2046915f536d7f586874f25c1bb23add2a3c88d50f", size = 264955, upload-time = "2026-08-06T13:50:03.023Z" }, + { url = "https://files.pythonhosted.org/packages/ee/de/dc010c7a3691f396d93bbc26bfcafa1c2a3a351cd520470f15faf5795bd5/coverage-7.15.4-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:ffb58d7eff5b7f6ecc6fa21d6288ab7f968a212cb67d682c269c09b9eba3b66f", size = 267949, upload-time = "2026-08-06T13:50:05.557Z" }, + { url = "https://files.pythonhosted.org/packages/78/ea/dc96a11375e83c045c2f7c61fb6918277cfe9401db7c0f7b1d111a84b2e5/coverage-7.15.4-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:d9df165544774574ee004b953023d1bebada1894a80b1052a43d798b0f676e67", size = 264421, upload-time = "2026-08-06T13:50:07.612Z" }, + { url = "https://files.pythonhosted.org/packages/c8/86/b77131a0f9503ce461cd577076147d7a9040f0c5dda772686f729e2cc9cb/coverage-7.15.4-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:f9de0a24a4079b53e523b5c5e2c5945ec251ab486652659955187cf255a259bc", size = 269121, upload-time = "2026-08-06T13:50:09.58Z" }, + { url = "https://files.pythonhosted.org/packages/24/24/944bc35007862955e7ebf05754e645419dcf5d7526c52735cfa2715e8ebf/coverage-7.15.4-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:150089274bdc9f940628552cb92844e0223c987f1902ab8efe9f45a2ec758d88", size = 264565, upload-time = "2026-08-06T13:50:11.722Z" }, + { url = "https://files.pythonhosted.org/packages/c7/cc/a3bb9f93e7e740659163e2ea584f8196ddcd2c456a5dbe15f6c50105fec1/coverage-7.15.4-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:a58a94fed5da6997d258e8f7668c1e195fbd04a691d781b7558f1e468f9e68bc", size = 266522, upload-time = "2026-08-06T13:50:13.786Z" }, + { url = "https://files.pythonhosted.org/packages/49/dd/e0e40f3560d878d888c580698ff5ad1179f5e1c3ac949684ef66b41a3817/coverage-7.15.4-cp315-cp315t-win32.whl", hash = "sha256:ebd5a6d8466ff30836572f3ba2cae8a5e8f85029b1c6d5e2ed338dc472a5166a", size = 225068, upload-time = "2026-08-06T13:50:15.825Z" }, + { url = "https://files.pythonhosted.org/packages/c6/7e/37732ea80eebc30e976e4cdab15c190bc42d96959a42e38ddf6f8c60468f/coverage-7.15.4-cp315-cp315t-win_amd64.whl", hash = "sha256:288bde2a2d7ab6b6c2d7252fcde8b524387f2d970bdba9658fc6f8bbcaef0f9b", size = 225895, upload-time = "2026-08-06T13:50:17.928Z" }, + { url = "https://files.pythonhosted.org/packages/c6/08/1e00f7923eaaba45fb3d51dd794125fc766304b1df264f3a9c6557bfb30e/coverage-7.15.4-cp315-cp315t-win_arm64.whl", hash = "sha256:68be5e1de60ff13c9095bbec0e5a7fa45b33b101752215b91345ea1f61c4a278", size = 225213, upload-time = "2026-08-06T13:50:19.981Z" }, + { url = "https://files.pythonhosted.org/packages/b4/d9/e70c286c979378f061d8266e279b686ab0b0b688e1fe0af864684f23a77d/coverage-7.15.4-py3-none-any.whl", hash = "sha256:964730a1e9de9c0cf11be6a1a3c79ce419c34882842abd256086ba4698705e84", size = 214332, upload-time = "2026-08-06T13:50:22.192Z" }, ] [package.optional-dependencies] @@ -1146,7 +1175,7 @@ name = "exceptiongroup" version = "1.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" } wheels = [ @@ -1688,17 +1717,17 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "decorator" }, - { name = "exceptiongroup" }, - { name = "jedi" }, - { name = "matplotlib-inline" }, - { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit" }, - { name = "pygments" }, - { name = "stack-data" }, - { name = "traitlets" }, - { name = "typing-extensions" }, + { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version < '3.11'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "jedi", marker = "python_full_version < '3.11'" }, + { name = "matplotlib-inline", marker = "python_full_version < '3.11'" }, + { name = "pexpect", marker = "python_full_version < '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version < '3.11'" }, + { name = "pygments", marker = "python_full_version < '3.11'" }, + { name = "stack-data", marker = "python_full_version < '3.11'" }, + { name = "traitlets", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/85/31/10ac88f3357fc276dc8a64e8880c82e80e7459326ae1d0a211b40abf6665/ipython-8.37.0.tar.gz", hash = "sha256:ca815841e1a41a1e6b73a0b08f3038af9b2252564d01fc405356d34033012216", size = 5606088, upload-time = "2025-05-31T16:39:09.613Z" } wheels = [ @@ -1716,17 +1745,17 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "decorator" }, - { name = "ipython-pygments-lexers" }, - { name = "jedi" }, - { name = "matplotlib-inline" }, - { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit" }, - { name = "pygments" }, - { name = "stack-data" }, - { name = "traitlets" }, - { name = "typing-extensions", marker = "python_full_version < '3.12'" }, + { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version >= '3.11'" }, + { name = "ipython-pygments-lexers", marker = "python_full_version >= '3.11'" }, + { name = "jedi", marker = "python_full_version >= '3.11'" }, + { name = "matplotlib-inline", marker = "python_full_version >= '3.11'" }, + { name = "pexpect", marker = "python_full_version >= '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version >= '3.11'" }, + { name = "pygments", marker = "python_full_version >= '3.11'" }, + { name = "stack-data", marker = "python_full_version >= '3.11'" }, + { name = "traitlets", marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions", marker = "python_full_version == '3.11.*'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/2a/34/29b18c62e39ee2f7a6a3bba7efd952729d8aadd45ca17efc34453b717665/ipython-9.6.0.tar.gz", hash = "sha256:5603d6d5d356378be5043e69441a072b50a5b33b4503428c77b04cb8ce7bc731", size = 4396932, upload-time = "2025-09-29T10:55:53.948Z" } wheels = [ @@ -1747,7 +1776,7 @@ name = "ipython-pygments-lexers" version = "1.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pygments" }, + { name = "pygments", marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" } wheels = [ @@ -2501,7 +2530,7 @@ bigquery = [{ name = "sqlalchemy-bigquery", specifier = ">=1.9.0" }] dev = [ { name = "black", specifier = ">=24.0.0" }, { name = "chardet" }, - { name = "coverage", specifier = ">=6.4.1" }, + { name = "coverage", specifier = ">=7.15.4" }, { name = "duckdb", specifier = ">=1.5.5" }, { name = "gql", specifier = ">=4.0.0" }, { name = "ipykernel" }, @@ -2631,7 +2660,7 @@ provides-extras = ["dev"] [package.metadata.requires-dev] dev = [ - { name = "coverage", specifier = ">=6.2" }, + { name = "coverage", specifier = ">=7.15.4" }, { name = "requests-cache", specifier = ">=1.3.3" }, ] @@ -4936,23 +4965,23 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "alabaster" }, - { name = "babel" }, - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "docutils" }, - { name = "imagesize" }, - { name = "jinja2" }, - { name = "packaging" }, - { name = "pygments" }, - { name = "requests" }, - { name = "snowballstemmer" }, - { name = "sphinxcontrib-applehelp" }, - { name = "sphinxcontrib-devhelp" }, - { name = "sphinxcontrib-htmlhelp" }, - { name = "sphinxcontrib-jsmath" }, - { name = "sphinxcontrib-qthelp" }, - { name = "sphinxcontrib-serializinghtml" }, - { name = "tomli", version = "2.4.1", source = { registry = "https://pypi.org/simple" } }, + { name = "alabaster", marker = "python_full_version < '3.11'" }, + { name = "babel", marker = "python_full_version < '3.11'" }, + { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, + { name = "docutils", marker = "python_full_version < '3.11'" }, + { name = "imagesize", marker = "python_full_version < '3.11'" }, + { name = "jinja2", marker = "python_full_version < '3.11'" }, + { name = "packaging", marker = "python_full_version < '3.11'" }, + { name = "pygments", marker = "python_full_version < '3.11'" }, + { name = "requests", marker = "python_full_version < '3.11'" }, + { name = "snowballstemmer", marker = "python_full_version < '3.11'" }, + { name = "sphinxcontrib-applehelp", marker = "python_full_version < '3.11'" }, + { name = "sphinxcontrib-devhelp", marker = "python_full_version < '3.11'" }, + { name = "sphinxcontrib-htmlhelp", marker = "python_full_version < '3.11'" }, + { name = "sphinxcontrib-jsmath", marker = "python_full_version < '3.11'" }, + { name = "sphinxcontrib-qthelp", marker = "python_full_version < '3.11'" }, + { name = "sphinxcontrib-serializinghtml", marker = "python_full_version < '3.11'" }, + { name = "tomli", version = "2.4.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611, upload-time = "2024-10-13T20:27:13.93Z" } wheels = [ @@ -4970,23 +4999,23 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "alabaster" }, - { name = "babel" }, - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "docutils" }, - { name = "imagesize" }, - { name = "jinja2" }, - { name = "packaging" }, - { name = "pygments" }, - { name = "requests" }, - { name = "roman-numerals-py" }, - { name = "snowballstemmer" }, - { name = "sphinxcontrib-applehelp" }, - { name = "sphinxcontrib-devhelp" }, - { name = "sphinxcontrib-htmlhelp" }, - { name = "sphinxcontrib-jsmath" }, - { name = "sphinxcontrib-qthelp" }, - { name = "sphinxcontrib-serializinghtml" }, + { name = "alabaster", marker = "python_full_version >= '3.11'" }, + { name = "babel", marker = "python_full_version >= '3.11'" }, + { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, + { name = "docutils", marker = "python_full_version >= '3.11'" }, + { name = "imagesize", marker = "python_full_version >= '3.11'" }, + { name = "jinja2", marker = "python_full_version >= '3.11'" }, + { name = "packaging", marker = "python_full_version >= '3.11'" }, + { name = "pygments", marker = "python_full_version >= '3.11'" }, + { name = "requests", marker = "python_full_version >= '3.11'" }, + { name = "roman-numerals-py", marker = "python_full_version >= '3.11'" }, + { name = "snowballstemmer", marker = "python_full_version >= '3.11'" }, + { name = "sphinxcontrib-applehelp", marker = "python_full_version >= '3.11'" }, + { name = "sphinxcontrib-devhelp", marker = "python_full_version >= '3.11'" }, + { name = "sphinxcontrib-htmlhelp", marker = "python_full_version >= '3.11'" }, + { name = "sphinxcontrib-jsmath", marker = "python_full_version >= '3.11'" }, + { name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.11'" }, + { name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/38/ad/4360e50ed56cb483667b8e6dadf2d3fda62359593faabbe749a27c4eaca6/sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348", size = 8321876, upload-time = "2025-03-02T22:31:59.658Z" } wheels = [ From 2ef89c8ac0e5b847b515365d1ad01e7d93d97156 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Aug 2026 18:07:46 +0000 Subject: [PATCH 65/72] build(deps-dev): bump pandera from 0.26.1 to 0.32.1 (#3869) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/linkml/pyproject.toml | 2 +- uv.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/linkml/pyproject.toml b/packages/linkml/pyproject.toml index 93922feead..fd1370a907 100644 --- a/packages/linkml/pyproject.toml +++ b/packages/linkml/pyproject.toml @@ -103,7 +103,7 @@ dev = [ ] pandera = [ - "pandera >= 0.19.0", + "pandera>=0.32.1", "polars-lts-cpu >= 1.0.0", "pandas" ] diff --git a/uv.lock b/uv.lock index 9925ed9456..971e5de29b 100644 --- a/uv.lock +++ b/uv.lock @@ -2546,7 +2546,7 @@ dev = [ { name = "numpydantic", specifier = ">=1.10.0" }, { name = "openapi-spec-validator", specifier = ">=0.8.4" }, { name = "pandas" }, - { name = "pandera", specifier = ">=0.19.0" }, + { name = "pandera", specifier = ">=0.32.1" }, { name = "polars-lts-cpu", specifier = ">=1.0.0" }, { name = "pyshacl", specifier = ">=0.25.0" }, { name = "pytest", specifier = ">=7.4.0" }, @@ -2575,7 +2575,7 @@ docs = [ lint = [{ name = "black", specifier = ">=24.0.0" }] pandera = [ { name = "pandas" }, - { name = "pandera", specifier = ">=0.19.0" }, + { name = "pandera", specifier = ">=0.32.1" }, { name = "polars-lts-cpu", specifier = ">=1.0.0" }, ] shacl = [{ name = "pyshacl", specifier = ">=0.25.0" }] @@ -3502,7 +3502,7 @@ wheels = [ [[package]] name = "pandera" -version = "0.26.1" +version = "0.32.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging" }, @@ -3511,9 +3511,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspect" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ff/0b/bb312b98a92b00ff48e869e2769ce5ca6c7bc4ec793a429d450dc3c9bba2/pandera-0.26.1.tar.gz", hash = "sha256:81a55a6429770d31b3bf4c3e8e1096a38296bd3009f9eca5780fad3c3c17fd82", size = 560263, upload-time = "2025-08-26T17:06:30.907Z" } +sdist = { url = "https://files.pythonhosted.org/packages/98/74/7ef34611e49990b7e630dcf02c2225d76c2e328ec2804186c2b9c52e916b/pandera-0.32.1.tar.gz", hash = "sha256:72ecd74226847abf0f0437c05f7f10cc8368e306d88a2acc78fa93762c5a0a02", size = 875349, upload-time = "2026-06-29T16:01:48.72Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/3b/91622e08086a6be44d2c0f34947d94c5282b53d217003d3ba390ee2d174b/pandera-0.26.1-py3-none-any.whl", hash = "sha256:1ff5b70556ce2f85c6b27e8fbe835a1761972f4d05f6548b4686b0db26ecb73b", size = 292907, upload-time = "2025-08-26T17:06:29.193Z" }, + { url = "https://files.pythonhosted.org/packages/ca/d0/411c82285a7586e97326020f6b5ecbc2f2ffcbef72aa108c897de1b0a540/pandera-0.32.1-py3-none-any.whl", hash = "sha256:1a17a3ffa906174d19207715f4f082ec3db3709647927ad8c095c147d74d8454", size = 447840, upload-time = "2026-06-29T16:01:46.877Z" }, ] [[package]] From ea9989ea9d67ba548c137fa48a2c2bc819cce27a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Aug 2026 18:24:57 +0000 Subject: [PATCH 66/72] build(deps): bump the github-actions group with 3 updates (#3889) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker-build.yaml | 2 +- .github/workflows/pypi-publish.yaml | 2 +- .github/workflows/stale.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker-build.yaml b/.github/workflows/docker-build.yaml index 36df180ab6..ddc43adca5 100644 --- a/.github/workflows/docker-build.yaml +++ b/.github/workflows/docker-build.yaml @@ -55,7 +55,7 @@ jobs: - name: Login to DockerHub if: startsWith(github.ref, 'refs/tags/v') - uses: docker/login-action@v4.5.1 + uses: docker/login-action@v4.6.0 with: username: cjmungall password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} diff --git a/.github/workflows/pypi-publish.yaml b/.github/workflows/pypi-publish.yaml index 79fd9e0f0f..505ec747bd 100644 --- a/.github/workflows/pypi-publish.yaml +++ b/.github/workflows/pypi-publish.yaml @@ -56,6 +56,6 @@ jobs: - name: Publish package 📦 to PyPI if: github.event_name == 'release' - uses: pypa/gh-action-pypi-publish@v1.14.1 + uses: pypa/gh-action-pypi-publish@v1.14.2 with: verbose: true diff --git a/.github/workflows/stale.yaml b/.github/workflows/stale.yaml index ab395df594..bb806cd767 100644 --- a/.github/workflows/stale.yaml +++ b/.github/workflows/stale.yaml @@ -13,7 +13,7 @@ jobs: permissions: issues: write steps: - - uses: actions/stale@v10.4.0 + - uses: actions/stale@v11.0.0 with: # Timeframes from issue #3080 days-before-stale: 1080 # 3 years From 9036f5eb055c58791548f53bd4cc188a9946ee5c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Aug 2026 18:40:23 +0000 Subject: [PATCH 67/72] build(deps-dev): bump sphinxcontrib-programoutput from 0.18 to 0.20 Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/linkml/pyproject.toml | 2 +- uv.lock | 129 +++++++++++++++++---------------- 2 files changed, 66 insertions(+), 65 deletions(-) diff --git a/packages/linkml/pyproject.toml b/packages/linkml/pyproject.toml index fd1370a907..b01d11149f 100644 --- a/packages/linkml/pyproject.toml +++ b/packages/linkml/pyproject.toml @@ -139,7 +139,7 @@ docs = [ "myst-parser", "matplotlib >= 3.7", "sphinx-jinja >= 2.0.2", - "sphinxcontrib-programoutput >= 0.17", + "sphinxcontrib-programoutput>=0.20", ] [tool.uv.sources] diff --git a/uv.lock b/uv.lock index 971e5de29b..a5484df016 100644 --- a/uv.lock +++ b/uv.lock @@ -652,7 +652,7 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" } }, ] sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130, upload-time = "2025-04-15T17:47:53.79Z" } wheels = [ @@ -725,7 +725,7 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "numpy", version = "2.3.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.3.4", source = { registry = "https://pypi.org/simple" } }, ] sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } wheels = [ @@ -1175,7 +1175,7 @@ name = "exceptiongroup" version = "1.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" } wheels = [ @@ -1717,17 +1717,17 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, - { name = "decorator", marker = "python_full_version < '3.11'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, - { name = "jedi", marker = "python_full_version < '3.11'" }, - { name = "matplotlib-inline", marker = "python_full_version < '3.11'" }, - { name = "pexpect", marker = "python_full_version < '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit", marker = "python_full_version < '3.11'" }, - { name = "pygments", marker = "python_full_version < '3.11'" }, - { name = "stack-data", marker = "python_full_version < '3.11'" }, - { name = "traitlets", marker = "python_full_version < '3.11'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "decorator" }, + { name = "exceptiongroup" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/85/31/10ac88f3357fc276dc8a64e8880c82e80e7459326ae1d0a211b40abf6665/ipython-8.37.0.tar.gz", hash = "sha256:ca815841e1a41a1e6b73a0b08f3038af9b2252564d01fc405356d34033012216", size = 5606088, upload-time = "2025-05-31T16:39:09.613Z" } wheels = [ @@ -1745,17 +1745,17 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, - { name = "decorator", marker = "python_full_version >= '3.11'" }, - { name = "ipython-pygments-lexers", marker = "python_full_version >= '3.11'" }, - { name = "jedi", marker = "python_full_version >= '3.11'" }, - { name = "matplotlib-inline", marker = "python_full_version >= '3.11'" }, - { name = "pexpect", marker = "python_full_version >= '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit", marker = "python_full_version >= '3.11'" }, - { name = "pygments", marker = "python_full_version >= '3.11'" }, - { name = "stack-data", marker = "python_full_version >= '3.11'" }, - { name = "traitlets", marker = "python_full_version >= '3.11'" }, - { name = "typing-extensions", marker = "python_full_version == '3.11.*'" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "decorator" }, + { name = "ipython-pygments-lexers" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, + { name = "typing-extensions", marker = "python_full_version < '3.12'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/2a/34/29b18c62e39ee2f7a6a3bba7efd952729d8aadd45ca17efc34453b717665/ipython-9.6.0.tar.gz", hash = "sha256:5603d6d5d356378be5043e69441a072b50a5b33b4503428c77b04cb8ce7bc731", size = 4396932, upload-time = "2025-09-29T10:55:53.948Z" } wheels = [ @@ -1776,7 +1776,7 @@ name = "ipython-pygments-lexers" version = "1.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pygments", marker = "python_full_version >= '3.11'" }, + { name = "pygments" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" } wheels = [ @@ -2570,7 +2570,7 @@ docs = [ { name = "sphinx-jinja", specifier = ">=2.0.2" }, { name = "sphinx-rtd-theme" }, { name = "sphinxcontrib-mermaid", specifier = ">=2.0.3" }, - { name = "sphinxcontrib-programoutput", specifier = ">=0.17" }, + { name = "sphinxcontrib-programoutput", specifier = ">=0.20" }, ] lint = [{ name = "black", specifier = ">=24.0.0" }] pandera = [ @@ -4965,23 +4965,23 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "alabaster", marker = "python_full_version < '3.11'" }, - { name = "babel", marker = "python_full_version < '3.11'" }, - { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, - { name = "docutils", marker = "python_full_version < '3.11'" }, - { name = "imagesize", marker = "python_full_version < '3.11'" }, - { name = "jinja2", marker = "python_full_version < '3.11'" }, - { name = "packaging", marker = "python_full_version < '3.11'" }, - { name = "pygments", marker = "python_full_version < '3.11'" }, - { name = "requests", marker = "python_full_version < '3.11'" }, - { name = "snowballstemmer", marker = "python_full_version < '3.11'" }, - { name = "sphinxcontrib-applehelp", marker = "python_full_version < '3.11'" }, - { name = "sphinxcontrib-devhelp", marker = "python_full_version < '3.11'" }, - { name = "sphinxcontrib-htmlhelp", marker = "python_full_version < '3.11'" }, - { name = "sphinxcontrib-jsmath", marker = "python_full_version < '3.11'" }, - { name = "sphinxcontrib-qthelp", marker = "python_full_version < '3.11'" }, - { name = "sphinxcontrib-serializinghtml", marker = "python_full_version < '3.11'" }, - { name = "tomli", version = "2.4.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "alabaster" }, + { name = "babel" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "docutils" }, + { name = "imagesize" }, + { name = "jinja2" }, + { name = "packaging" }, + { name = "pygments" }, + { name = "requests" }, + { name = "snowballstemmer" }, + { name = "sphinxcontrib-applehelp" }, + { name = "sphinxcontrib-devhelp" }, + { name = "sphinxcontrib-htmlhelp" }, + { name = "sphinxcontrib-jsmath" }, + { name = "sphinxcontrib-qthelp" }, + { name = "sphinxcontrib-serializinghtml" }, + { name = "tomli", version = "2.4.1", source = { registry = "https://pypi.org/simple" } }, ] sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611, upload-time = "2024-10-13T20:27:13.93Z" } wheels = [ @@ -4999,23 +4999,23 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "alabaster", marker = "python_full_version >= '3.11'" }, - { name = "babel", marker = "python_full_version >= '3.11'" }, - { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, - { name = "docutils", marker = "python_full_version >= '3.11'" }, - { name = "imagesize", marker = "python_full_version >= '3.11'" }, - { name = "jinja2", marker = "python_full_version >= '3.11'" }, - { name = "packaging", marker = "python_full_version >= '3.11'" }, - { name = "pygments", marker = "python_full_version >= '3.11'" }, - { name = "requests", marker = "python_full_version >= '3.11'" }, - { name = "roman-numerals-py", marker = "python_full_version >= '3.11'" }, - { name = "snowballstemmer", marker = "python_full_version >= '3.11'" }, - { name = "sphinxcontrib-applehelp", marker = "python_full_version >= '3.11'" }, - { name = "sphinxcontrib-devhelp", marker = "python_full_version >= '3.11'" }, - { name = "sphinxcontrib-htmlhelp", marker = "python_full_version >= '3.11'" }, - { name = "sphinxcontrib-jsmath", marker = "python_full_version >= '3.11'" }, - { name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.11'" }, - { name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= '3.11'" }, + { name = "alabaster" }, + { name = "babel" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "docutils" }, + { name = "imagesize" }, + { name = "jinja2" }, + { name = "packaging" }, + { name = "pygments" }, + { name = "requests" }, + { name = "roman-numerals-py" }, + { name = "snowballstemmer" }, + { name = "sphinxcontrib-applehelp" }, + { name = "sphinxcontrib-devhelp" }, + { name = "sphinxcontrib-htmlhelp" }, + { name = "sphinxcontrib-jsmath" }, + { name = "sphinxcontrib-qthelp" }, + { name = "sphinxcontrib-serializinghtml" }, ] sdist = { url = "https://files.pythonhosted.org/packages/38/ad/4360e50ed56cb483667b8e6dadf2d3fda62359593faabbe749a27c4eaca6/sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348", size = 8321876, upload-time = "2025-03-02T22:31:59.658Z" } wheels = [ @@ -5159,15 +5159,16 @@ wheels = [ [[package]] name = "sphinxcontrib-programoutput" -version = "0.18" +version = "0.20" source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "docutils" }, { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3f/c0/834af2290f8477213ec0dd60e90104f5644aa0c37b1a0d6f0a2b5efe03c4/sphinxcontrib_programoutput-0.18.tar.gz", hash = "sha256:09e68b6411d937a80b6085f4fdeaa42e0dc5555480385938465f410589d2eed8", size = 26333, upload-time = "2024-12-06T20:38:36.959Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/e5/0549d81b4144a1cc8464d368bd2d7a3482fd185399d9430c548978f13036/sphinxcontrib_programoutput-0.20.tar.gz", hash = "sha256:5c4282c1c7fc9b5a23febe16ae038b6392d7ce068d186ad4870ba22e74db0711", size = 28235, upload-time = "2026-06-16T15:55:52.243Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/2c/7aec6e0580f666d4f61474a50c4995a98abfff27d827f0e7bc8c4fa528f5/sphinxcontrib_programoutput-0.18-py3-none-any.whl", hash = "sha256:8a651bc85de69a808a064ff0e48d06c12b9347da4fe5fdb1e94914b01e1b0c36", size = 20346, upload-time = "2024-12-06T20:38:22.406Z" }, + { url = "https://files.pythonhosted.org/packages/aa/02/bb155d4a570d7ceaf48e81f1412093ecf066437bfcb56f34c1407bf14f50/sphinxcontrib_programoutput-0.20-py3-none-any.whl", hash = "sha256:f473f9e7992879358efdeb9962fbec2103f6ba1cb6a738eb7f81dae554bc5ec7", size = 20722, upload-time = "2026-06-16T15:55:51.353Z" }, ] [[package]] From 1361cf1da9bb624169b342ed0f856c555a7a8a14 Mon Sep 17 00:00:00 2001 From: Nico Matentzoglu Date: Fri, 14 Aug 2026 09:02:19 +0300 Subject: [PATCH 68/72] Update Community-Meetings.md --- docs/get-involved/Community-Meetings.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/get-involved/Community-Meetings.md b/docs/get-involved/Community-Meetings.md index 85495e195e..6e47e9e654 100644 --- a/docs/get-involved/Community-Meetings.md +++ b/docs/get-involved/Community-Meetings.md @@ -27,9 +27,9 @@ Join the LinkML community for regular sessions featuring presentations on LinkML | Date | Presenter 1 | Topic 1 | Presenter 2 | Topic 2 | | :---: | :---: | :---: | :----: | :---: | -| November 19, 2026|Open slot!| Volunteers welcome| Open slot!| Volunteers welcome| -| October 15, 2026|Open slot!| Volunteers welcome| Open slot!| Volunteers welcome| -| September 17, 2026| Matt Gehring| Use of LinkML at [sniff.world](https://sniff.world/)| Open slot!| Volunteers welcome| +| November 19, 2026|Open slot!| Volunteers welcome| Open slot!| Volunteers welcome| +| October 15, 2026|Open slot!| Volunteers welcome| Open slot!| Volunteers welcome| +| September 17, 2026| Matt Gehring| Use of LinkML at [sniff.world](https://sniff.world/)| Open slot!| Volunteers welcome| | August 20, 2026| Patrick Golden| Use of LinkML in the [Zebrafish Toxicology Phenotype Atlas Project](https://zappfish.org/)|Alex Anderson| schema-to-schema mapping and data conversion at [PNNL](https://www.pnnl.gov/)| | [July 16, 2026](https://docs.google.com/presentation/d/1A05qfTbmI8RXyvoBSplpjSU9e4OP6BlIKJvQ1-eWhGw/edit?slide=id.g36e69bd970c_1_50#slide=id.g36e69bd970c_1_50)| Sierra Moxon | LinkML Microschemas |Stephan Heunis |[The ORINOCO project at Research Center Jülich - building self-hostable research information infrastructure](https://pool.psychoinformatics.de/ui/?sh%3ANodeShape=xyzri%3AXYZProject&pid=xyzrins%3Aprojects%2Forinoco) | | [June 18, 2026](https://docs.google.com/presentation/d/1mA3xBfPglJLtMPbDLXT8lJ7SAu6iDPNL_HBJs_DZuB0/edit?slide=id.g36e69bd970c_1_50#slide=id.g36e69bd970c_1_50) | Anh Nguyet Vu | Adopting LinkML at Sage: Workflows, Wins, and Works in Progress | Cory Levinson | OAE Data Protocol: Data standardization for carbon removal research and deployment with LinkML | From 137eb17ccad75ed837cc833d1e02991d940b5bbc Mon Sep 17 00:00:00 2001 From: Corey Cox <69321580+amc-corey-cox@users.noreply.github.com> Date: Fri, 14 Aug 2026 08:07:51 -0500 Subject: [PATCH 69/72] build(deps): check for updates daily instead of weekly (#3891) --- .github/dependabot.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 1121664382..a2a9792616 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -20,9 +20,10 @@ updates: - package-ecosystem: "uv" directory: "/" + # Daily refills the three open slots as they drain, rather than once a week. + # The limit below, not the interval, is what bounds concurrent CI load. schedule: - interval: "weekly" - day: "sunday" + interval: "daily" groups: # Individual pull requests for major/minor updates and grouped for patch updates patch-updates: From 5e1f36810f556eed69405a69a1e0d5357b5fa9a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Aug 2026 08:39:05 -0500 Subject: [PATCH 70/72] build(deps): bump the patch-updates group with 2 updates (#3892) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/linkml/pyproject.toml | 2 +- packages/linkml_runtime/pyproject.toml | 2 +- uv.lock | 84 +++++++++++++------------- 3 files changed, 44 insertions(+), 44 deletions(-) diff --git a/packages/linkml/pyproject.toml b/packages/linkml/pyproject.toml index b01d11149f..1ebf47d13a 100644 --- a/packages/linkml/pyproject.toml +++ b/packages/linkml/pyproject.toml @@ -81,7 +81,7 @@ tests = [ { include-group = "typing" }, { include-group = "shacl" }, "duckdb>=1.5.5", - "sqlalchemy-bigquery >= 1.9.0", + "sqlalchemy-bigquery>=1.17.2", ] dev = [ {include-group = "tests" }, diff --git a/packages/linkml_runtime/pyproject.toml b/packages/linkml_runtime/pyproject.toml index 5dfe3148a1..9d062e7a25 100644 --- a/packages/linkml_runtime/pyproject.toml +++ b/packages/linkml_runtime/pyproject.toml @@ -47,7 +47,7 @@ dependencies = [ "requests", "prefixmaps >=0.1.4", "curies>=0.14.6", - "pyoxigraph >=0.5.6", + "pyoxigraph>=0.5.9", "pydantic >=1.10.2, <3.0.0", "isodate >=0.7.2, <1.0.0; python_version < '3.11'", ] diff --git a/uv.lock b/uv.lock index a5484df016..87a3673b79 100644 --- a/uv.lock +++ b/uv.lock @@ -2556,7 +2556,7 @@ dev = [ { name = "requests-cache", specifier = ">=1.3.2" }, { name = "rich", specifier = ">=13.7.1" }, { name = "sphinx-design", specifier = ">=0.5.0" }, - { name = "sqlalchemy-bigquery", specifier = ">=1.9.0" }, + { name = "sqlalchemy-bigquery", specifier = ">=1.17.2" }, { name = "testcontainers", specifier = "==3.7.1" }, { name = "tox", specifier = ">=4" }, { name = "tox-uv" }, @@ -2584,7 +2584,7 @@ tests = [ { name = "duckdb", specifier = ">=1.5.5" }, { name = "numpydantic", specifier = ">=1.10.0" }, { name = "pyshacl", specifier = ">=0.25.0" }, - { name = "sqlalchemy-bigquery", specifier = ">=1.9.0" }, + { name = "sqlalchemy-bigquery", specifier = ">=1.17.2" }, ] tests-extra = [ { name = "jsonpatch", specifier = ">=1.33" }, @@ -2650,7 +2650,7 @@ requires-dist = [ { name = "prefixcommons", specifier = ">=0.1.12" }, { name = "prefixmaps", specifier = ">=0.1.4" }, { name = "pydantic", specifier = ">=1.10.2,<3.0.0" }, - { name = "pyoxigraph", specifier = ">=0.5.6" }, + { name = "pyoxigraph", specifier = ">=0.5.9" }, { name = "pyyaml" }, { name = "rdflib", specifier = ">=7.6.0" }, { name = "requests" }, @@ -4140,42 +4140,42 @@ wheels = [ [[package]] name = "pyoxigraph" -version = "0.5.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ce/fd/21f10f55194b527348005c54ea87612d1af795be63db19e0abe6530d9920/pyoxigraph-0.5.8.tar.gz", hash = "sha256:c9fd2e3537fdd96d3895af259aefdc6f40b86a3f969d68fd3fe3cbf9f707f462", size = 5305516, upload-time = "2026-04-28T20:43:18.665Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/14/6c/422277e8d788e0b706928f1b25aa582fd3581b7f1f052ef258d10f5099e0/pyoxigraph-0.5.8-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:a14fce7014892b2b85b0350903197cccdab9d4c8b889c77c6e748426a7cd5c5b", size = 7702836, upload-time = "2026-04-28T20:42:13.216Z" }, - { url = "https://files.pythonhosted.org/packages/59/d8/fad202f86e9bcd7ea2512d0d086405f5b77b47b634640a61e99ad5e755ad/pyoxigraph-0.5.8-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:3aecd4f5bde22c4cae03b398b0144411745940787e174e0d2690abbb486c4688", size = 8220927, upload-time = "2026-04-28T20:42:15.744Z" }, - { url = "https://files.pythonhosted.org/packages/e0/49/1cfb1cbbd60164b543547a5c538fe7ab46bce461764a2a19daeae33f404a/pyoxigraph-0.5.8-cp310-cp310-win_amd64.whl", hash = "sha256:14e34a8d83b2b3f1abb99de322bd31f158d1a59f690317201e7cf43b297523c3", size = 5446377, upload-time = "2026-04-28T20:42:17.329Z" }, - { url = "https://files.pythonhosted.org/packages/17/9f/b5eb3254b63661b9f7f7d12bded5e70148fb5d56bac0fae3b529ce2cdb16/pyoxigraph-0.5.8-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:164b9b41769cdc5ac93ff37f1dd418fe2970a839e6bb283a5f095224a10bae3f", size = 7702679, upload-time = "2026-04-28T20:42:19.24Z" }, - { url = "https://files.pythonhosted.org/packages/41/dd/8ad52b1ae147c948bd2f217fc9c71cd02211a5570dc9e43ecb04b19cf3fa/pyoxigraph-0.5.8-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d7aa10a7c3e00cfccae819bbf040cef396db5304d5ea9890317fd8031e844684", size = 8220803, upload-time = "2026-04-28T20:42:21.13Z" }, - { url = "https://files.pythonhosted.org/packages/1b/3e/1c2e36999ac1884fd4a335c6c6c7aa68e3cb0038599386f7acb75dd0374c/pyoxigraph-0.5.8-cp311-cp311-win_amd64.whl", hash = "sha256:b43865ffdbc86bf8a48d3184272a5e3b1097c5105d9a4f444a6dda1e76763f88", size = 5446937, upload-time = "2026-04-28T20:42:23.056Z" }, - { url = "https://files.pythonhosted.org/packages/f8/58/3bd1419d9264b6027dc758340007951a7b3842dcb7f420c53da62ded33af/pyoxigraph-0.5.8-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fa823ed87c34d21331f17c3ff6cd62b2ef188b945b70d741f0a7429d671aa3c9", size = 7704079, upload-time = "2026-04-28T20:42:25.362Z" }, - { url = "https://files.pythonhosted.org/packages/0d/d0/8ef9a7582373e106a4159a7ac59f908a92f6fa1ea776b8bd2289fdebd764/pyoxigraph-0.5.8-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:567618c3595c27caa64dff479a679592bc455af6b4afc3b24ca120fb2eed8327", size = 8224731, upload-time = "2026-04-28T20:42:27.323Z" }, - { url = "https://files.pythonhosted.org/packages/61/88/68ae76c58171bde3c66b6c019e5b6367f83783a9a44fc5a95bf6b2928f58/pyoxigraph-0.5.8-cp312-cp312-win_amd64.whl", hash = "sha256:7903f0168f6313cacbf0815221dbedbb54606f172a6a3c4623caba42ae64702c", size = 5449186, upload-time = "2026-04-28T20:42:29.498Z" }, - { url = "https://files.pythonhosted.org/packages/b9/02/1759261c7b20c4671a6837083de9ded8122ee6a4cd9b3e9efdbf2ce3dbab/pyoxigraph-0.5.8-cp312-cp312-win_arm64.whl", hash = "sha256:07153608e35514368a157f7427aef6d9be4fcb3b32a0b2edc0c849d85627d981", size = 5073598, upload-time = "2026-04-28T20:42:31.32Z" }, - { url = "https://files.pythonhosted.org/packages/11/90/6bc32bc00d49b86047cc42b0afbdd804da2e0f8d512c14c35d3eef1095c0/pyoxigraph-0.5.8-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:0bcaa1b7a4c5a2521f5f0fe4d837f29ddd40d3be1ad26e4220ac839eea657a52", size = 7705136, upload-time = "2026-04-28T20:42:32.893Z" }, - { url = "https://files.pythonhosted.org/packages/82/b2/98dc78bbe6c9fe407c04dcf92281eaa58e5b3a9d5a5d31a62b09d004d6b4/pyoxigraph-0.5.8-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:bd1cfedd6bc7ea0502bb86449881afa4b9b89015aae6608cedcb4e1fd0749924", size = 8225560, upload-time = "2026-04-28T20:42:34.856Z" }, - { url = "https://files.pythonhosted.org/packages/b6/23/562c411d1c55a1e08a645b569980c97f24b8b8effbbaec56a94702e08056/pyoxigraph-0.5.8-cp313-cp313-win_amd64.whl", hash = "sha256:5236e59f26ff1606eb05941df24b9d470a183d11bc904a5722aac23aa8dd1b01", size = 5449722, upload-time = "2026-04-28T20:42:37.186Z" }, - { url = "https://files.pythonhosted.org/packages/0a/18/50e3793b65965a8006f45b8c01839b6f280e3dbcc82098b62108a6d3510f/pyoxigraph-0.5.8-cp313-cp313-win_arm64.whl", hash = "sha256:d324d334379b361646952da7d82cfc0bfb1e411f0e8a1f25f78a301c3bf41137", size = 5074183, upload-time = "2026-04-28T20:42:38.722Z" }, - { url = "https://files.pythonhosted.org/packages/6e/c7/c13220b5e9e12dbcbb8f8c221ae892854e28e600658db7c69d1cfd5bdf1e/pyoxigraph-0.5.8-cp313-cp313t-win_amd64.whl", hash = "sha256:a40b7449d5406aa1c0f6a3511191c484b333f7debaac48e3fcfc804b529dcb84", size = 5447293, upload-time = "2026-04-28T20:42:40.675Z" }, - { url = "https://files.pythonhosted.org/packages/ba/19/640f52f219eda8fa7d40498eaad2b7392e913cea37c31d4389b74037509f/pyoxigraph-0.5.8-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:914355bdd92455e5538938aeeb15dedfe80ceb2bf7d576e67e00abc3c7a23ce1", size = 7701324, upload-time = "2026-04-28T20:42:42.329Z" }, - { url = "https://files.pythonhosted.org/packages/b1/80/9fa0bd17d17a73e2a14359ba9135fd1721d4d64fe3b38d8625e78a02a484/pyoxigraph-0.5.8-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:97f9589fdf8b02acd9342b71f118352740012ae97f559eed65c3452d2555ca26", size = 8220766, upload-time = "2026-04-28T20:42:44.07Z" }, - { url = "https://files.pythonhosted.org/packages/b7/f1/e865421c48252992105fda37b78ba82be50abeeee89096b1fb87f56325d0/pyoxigraph-0.5.8-cp314-cp314-win_amd64.whl", hash = "sha256:23d89e6aa3810084b3d9e405a13440e8196d55c3df5d747d4f0307331ee61f11", size = 5447875, upload-time = "2026-04-28T20:42:46.095Z" }, - { url = "https://files.pythonhosted.org/packages/cd/61/d21ed60790aa0a373d8e7761edb042cd494527a7f9ad9d9ff05a276fe8ed/pyoxigraph-0.5.8-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:598e409ddf0440734259ff5d30a9d20eb1867c635031188c1cc923e8773289ae", size = 7694353, upload-time = "2026-04-28T20:42:48.288Z" }, - { url = "https://files.pythonhosted.org/packages/83/3e/f41c3fda4b67d1edd534cbc75529071f7e64359404f54e70cb99f4591f1d/pyoxigraph-0.5.8-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:8a76d9473ccf0a866443ce2be384ac83b97113345a2929a520c7aab583ce7364", size = 8218478, upload-time = "2026-04-28T20:42:50.147Z" }, - { url = "https://files.pythonhosted.org/packages/57/dd/53be335381c373816e290f445325a7d444f1dbb1d98a00b15b5c93775128/pyoxigraph-0.5.8-cp314-cp314t-win_amd64.whl", hash = "sha256:9e81f6afebcc115c9f43d8b86869f5167f0d52eccb8ca3e5d359905e9a989fad", size = 5441788, upload-time = "2026-04-28T20:42:52.137Z" }, - { url = "https://files.pythonhosted.org/packages/ca/32/9e2dacd0ee4a88e6fb190ac97d7f4832829451e48f993027359fe32f3078/pyoxigraph-0.5.8-cp38-abi3-macosx_10_14_x86_64.whl", hash = "sha256:b925ab74ad7cecab359896964278448d45f777fde94b22df99808f2c52e18376", size = 6328777, upload-time = "2026-04-28T20:42:54.039Z" }, - { url = "https://files.pythonhosted.org/packages/3f/ec/14ec2530f6b96df3199afc0cf67fd79492106530d740d65517fb81d80ec8/pyoxigraph-0.5.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:88dac8561fbe1bcfe3c2193f5526bc297a3fd03545cd94da6581f7d12d788628", size = 5805509, upload-time = "2026-04-28T20:42:56.206Z" }, - { url = "https://files.pythonhosted.org/packages/83/fa/eab9c5729e31f5e64b7bc54f2be3a6581a446f01690c7c66e9bb9c5f598c/pyoxigraph-0.5.8-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:af7e42484d8e636ea9dfd12e39862b84067624b62be59f21c16c7e36fff74dfc", size = 7706347, upload-time = "2026-04-28T20:42:57.91Z" }, - { url = "https://files.pythonhosted.org/packages/12/71/7be1d3cfe9fa4e31eb5bea0286e099d24ded457bd2b63da192fe3af72ab8/pyoxigraph-0.5.8-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:108f6a8c7129ed678bdf12906328e9fea38a88c604b55677b5cb32a3f68daede", size = 8226169, upload-time = "2026-04-28T20:42:59.46Z" }, - { url = "https://files.pythonhosted.org/packages/74/5f/a7165e1d8b9d3797a51a78d190da0a6d3933eccb58f5b502e412ef4ed5ad/pyoxigraph-0.5.8-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:bc943aebf424e1cd4b00b46f732078d028c365edcb3fc097e802ace8a612fb75", size = 8889357, upload-time = "2026-04-28T20:43:01.206Z" }, - { url = "https://files.pythonhosted.org/packages/7a/46/782e87e77f1a41cba553823f3fb39c2ed77bfb4ae4a39ed68f946a373c48/pyoxigraph-0.5.8-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a6d1bc051ea2676495efc25931bd309efb830199150d72948c1c14e94624af8a", size = 9433564, upload-time = "2026-04-28T20:43:04.103Z" }, - { url = "https://files.pythonhosted.org/packages/40/79/3704d8b2013d8de7cc30ee3b12ad142d23e9c779523b0f821114e684aa04/pyoxigraph-0.5.8-cp38-abi3-win_amd64.whl", hash = "sha256:901e711f590945295214868c9ad01118ae89da610fabd4deeef2665e0ecda256", size = 5448135, upload-time = "2026-04-28T20:43:06.188Z" }, - { url = "https://files.pythonhosted.org/packages/c2/88/b881b7a8dc92ae6fb302bcb18f18b15c1782a3c86557a9c0e55bcdb9a146/pyoxigraph-0.5.8-cp38-abi3-win_arm64.whl", hash = "sha256:eb39a617dd0573f2e3a37a86614eaeac974caf77db1243d3fe7148841d0329c9", size = 5072423, upload-time = "2026-04-28T20:43:08.116Z" }, - { url = "https://files.pythonhosted.org/packages/60/f7/748e1229f933012905114cec4d484b1d799f374b6b94e06c209cd103aab1/pyoxigraph-0.5.8-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ede43c55336fe8bae1607cb2d1586ac3fe29dcf63761616d3aee45cb42395b22", size = 7703814, upload-time = "2026-04-28T20:43:13.253Z" }, - { url = "https://files.pythonhosted.org/packages/ad/0f/6e1bfb7c642c3d0a81e57cbc8b1b539cc7d2fb451eccd975705f5a0978ab/pyoxigraph-0.5.8-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d42dfd064be0a3f66c2301a0c8501d2079b570625d279e4aabba0e10a9102151", size = 8220892, upload-time = "2026-04-28T20:43:14.881Z" }, - { url = "https://files.pythonhosted.org/packages/fd/d6/69b9e9a9a1bd7124391cae5f71bf3063c30708ea563dad3674dfecb9db98/pyoxigraph-0.5.8-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:9676f2adad8468cdceb05a72a7b2bcc37683af3ddb37f595c370946f7d9f1543", size = 5446016, upload-time = "2026-04-28T20:43:17.016Z" }, +version = "0.5.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/30/a8/a06280358352a5fddf8c0753af7ec679a223008448e0602671209db0a390/pyoxigraph-0.5.9.tar.gz", hash = "sha256:fe2bea0f41f5284b6dad99ea718d7ff03600068cdf8736b63a9e6cd05f056b19", size = 5302359, upload-time = "2026-06-18T17:09:13.897Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/e8/858832a3dbe70c93a542693138cf72b0be72df402094562466c477bdf606/pyoxigraph-0.5.9-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:c711156407663e2182e4ea07c959f8e471f1b6ecaee1f00ce3accca7a53d9917", size = 7682544, upload-time = "2026-06-18T17:08:05.713Z" }, + { url = "https://files.pythonhosted.org/packages/f0/56/fb02b856e62854523ec60f2b79a21a7d647cbfd29be4bfb9323c167df7f0/pyoxigraph-0.5.9-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:70ac4792acee8c86f795b0db785b467afbb02daf58e2beb6e6ef3c3f43f4c222", size = 8200904, upload-time = "2026-06-18T17:08:08.041Z" }, + { url = "https://files.pythonhosted.org/packages/7c/66/b2921defaf7f157573bdff1ab708056b95e360ad955ff73608ad7093a9c8/pyoxigraph-0.5.9-cp310-cp310-win_amd64.whl", hash = "sha256:95347d64417299f91128ccfee486dcb14d2c6674a9b9a62e5c6978b651a2ccf2", size = 5384879, upload-time = "2026-06-18T17:08:10.132Z" }, + { url = "https://files.pythonhosted.org/packages/0a/17/dcf159e871c80d42c8a757e0a16850faf16b87c375d94c2623c2928b0df4/pyoxigraph-0.5.9-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:baffb41d914b761b06cde61eeb0a35dd5f0fa4808f71ae9902fdd1179e70e553", size = 7682234, upload-time = "2026-06-18T17:08:12.118Z" }, + { url = "https://files.pythonhosted.org/packages/ec/cd/441573ae6b5e7bb347ddf1889e137c99192ea19ea698320650295967802b/pyoxigraph-0.5.9-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:56b78aab5a5688ede88404372574785ba74e8d82b2cd1c0b0623a03b7069967f", size = 8200446, upload-time = "2026-06-18T17:08:14.102Z" }, + { url = "https://files.pythonhosted.org/packages/8e/cb/4d9122dc13626994197a1afa1620551b40e316e391bcf816d73d73673576/pyoxigraph-0.5.9-cp311-cp311-win_amd64.whl", hash = "sha256:eee3db30ecb6836fdc05ddcbc6aa79ed521afcbfa707a8561b7e5891c4fb4ff8", size = 5385125, upload-time = "2026-06-18T17:08:16.068Z" }, + { url = "https://files.pythonhosted.org/packages/d2/0f/3ae7a5cf9d4a2fab482ebe807316e18d55fea32cd52f0fff88fa6ece3f58/pyoxigraph-0.5.9-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:6ab699861035163e89bc512ce20aa6e91b654e4d33114c9f5facab08f0fe3d7e", size = 7684369, upload-time = "2026-06-18T17:08:17.867Z" }, + { url = "https://files.pythonhosted.org/packages/bf/08/ea04c09eb740bee7eeb57ea1769ec4088bfd55b24fc6f931bea317a65512/pyoxigraph-0.5.9-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:5a8a1b2debadb5fe79f8b89cbe1193e9c0e6fc1cf0c9431b6be706234beeabbe", size = 8202216, upload-time = "2026-06-18T17:08:19.95Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c1/f03ecc4fb5a09b4e6632218dece98073f3c4f0cdfc4823aedaea0186aa82/pyoxigraph-0.5.9-cp312-cp312-win_amd64.whl", hash = "sha256:d04806073905f448a48811b217115e71224be7f1d4075d1f5f5ec07a016f42ae", size = 5388427, upload-time = "2026-06-18T17:08:21.916Z" }, + { url = "https://files.pythonhosted.org/packages/cc/1e/497bd58a038ca83ec289a56d35fcad2183f4a180c787aa04268d2a88d4fd/pyoxigraph-0.5.9-cp312-cp312-win_arm64.whl", hash = "sha256:379bef7f8fc38f638f358b1e12bc5bdc908a0e7d47157f4399bf103c727a66da", size = 5044584, upload-time = "2026-06-18T17:08:23.644Z" }, + { url = "https://files.pythonhosted.org/packages/cd/05/ac08fccf52372f4a91bb97d07c0dba8e3644616aa6907a5864a6a26bb3ae/pyoxigraph-0.5.9-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:bcac65148bddcd0ae24ee1bf20a2e89cc225a926b9e9996eb64dcce60400d1a3", size = 7684737, upload-time = "2026-06-18T17:08:25.463Z" }, + { url = "https://files.pythonhosted.org/packages/65/b4/7493acbbbe18c9649782f1942d3877ab3f7ad08b5746153f2b4f4d62d2f7/pyoxigraph-0.5.9-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:57f3619c7860f4c95ddab077e4a3dedb7ca4cf191bd81096db835264d414ec5b", size = 8202316, upload-time = "2026-06-18T17:08:27.467Z" }, + { url = "https://files.pythonhosted.org/packages/3b/b4/55368af8a83e7811d25155cf2fc62a814b77594aadb98d3906086b203e1c/pyoxigraph-0.5.9-cp313-cp313-win_amd64.whl", hash = "sha256:4f8ff48b873157ab38e2595a56d6d2008471a45853f5fffc645658c6f69c07db", size = 5390781, upload-time = "2026-06-18T17:08:29.277Z" }, + { url = "https://files.pythonhosted.org/packages/47/0e/ef38dc2ee3b6f89f356f3016c7dd3cf9b4b5153f934a841aa32bfcc594ac/pyoxigraph-0.5.9-cp313-cp313-win_arm64.whl", hash = "sha256:b829233ea4445ccd1032d02e9189432a77e16888a79313498aa501b8731dc925", size = 5046172, upload-time = "2026-06-18T17:08:31.25Z" }, + { url = "https://files.pythonhosted.org/packages/51/f5/7a97cf8fc761d55057a029725dcffef561390ed565a5504f895a409034f7/pyoxigraph-0.5.9-cp313-cp313t-win_amd64.whl", hash = "sha256:e9ca7cd7666336fcbafd9a2ec7d598dd859b7bd2ca7b0838a0f7b92dd3828c28", size = 5387927, upload-time = "2026-06-18T17:08:33.075Z" }, + { url = "https://files.pythonhosted.org/packages/5b/c3/c9a7dfb5fc6f60488f67214e79696a6b5312d612ed4dcc57a62363632f49/pyoxigraph-0.5.9-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:f9154bea122c0bab11eda7604b27ceb424ab8ba1637250503008b8c6632ea405", size = 7682217, upload-time = "2026-06-18T17:08:34.851Z" }, + { url = "https://files.pythonhosted.org/packages/cb/23/f83d0af4504ac0f80bfe938eea04713c8801bf135f7b91bc52fff55b3e06/pyoxigraph-0.5.9-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:4558d430bbad6e6b4ba98e0e89a2e28402211069d38e6e9b00083ae2d9d2d175", size = 8200691, upload-time = "2026-06-18T17:08:36.649Z" }, + { url = "https://files.pythonhosted.org/packages/12/36/b82fa34b525c27a0262ff1007af014706be4485158c9d7bd49fec14b84e3/pyoxigraph-0.5.9-cp314-cp314-win_amd64.whl", hash = "sha256:79caf78136a8312e506beb607910cc5a93662a05a173aa9b560ce9d08801384f", size = 5386008, upload-time = "2026-06-18T17:08:38.345Z" }, + { url = "https://files.pythonhosted.org/packages/7a/ca/3c1a7fc7fa5641173d6f91dc58e3cea47e7571716a9aafb909039e1f885b/pyoxigraph-0.5.9-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:917d976dcb813d613d0ddd7da1c9dec6ad02ee815015f393c703cf0804946653", size = 7675486, upload-time = "2026-06-18T17:08:40.171Z" }, + { url = "https://files.pythonhosted.org/packages/89/aa/0c7e0c2c07e29676f78bfc38a5712b0c4e087d0dbde72b4c6b54b47f231d/pyoxigraph-0.5.9-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:68f8daf082ea4bf9583abd10b64e23cd2c4a3285338a5ec24254181d45e63083", size = 8197760, upload-time = "2026-06-18T17:08:42.069Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c5/c37b33219897bd1e016181644efc22f15abfa16fbf9ba6e3db7c7f55dc09/pyoxigraph-0.5.9-cp314-cp314t-win_amd64.whl", hash = "sha256:b8884b0ce3ccbac99ebc2c995614a13dc5f5d86b0adb847f36aeb1c713d12946", size = 5382226, upload-time = "2026-06-18T17:08:43.836Z" }, + { url = "https://files.pythonhosted.org/packages/27/d4/543c3a613f9b39ce06f0c052f36a0c5933157724176c04508e407e73fb98/pyoxigraph-0.5.9-cp38-abi3-macosx_10_14_x86_64.whl", hash = "sha256:8b998bc479a54a8905cdeaad621d0f7fed212abf9f1cbededfde4c51fc8e3bb8", size = 6306670, upload-time = "2026-06-18T17:08:45.616Z" }, + { url = "https://files.pythonhosted.org/packages/7e/28/080334bc7a4540a2102460f55557c04aadf9f2282c15896f4e9d998982d8/pyoxigraph-0.5.9-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:5c9f93db5e14a03ac1e3934cece3fb6f7c0a9f4bde33082c72c788c12bf65ba4", size = 5786471, upload-time = "2026-06-18T17:08:48.314Z" }, + { url = "https://files.pythonhosted.org/packages/76/4f/50fd2f11b733eeea8f0c6c7804fc22d1bcf7a43ef8d61a1ad8f18a1f9ce4/pyoxigraph-0.5.9-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:afe19bd1835a7245caad06cc9bb1a5c861882dc074fdfa24ba2626e3bbf9866a", size = 7683430, upload-time = "2026-06-18T17:08:50.397Z" }, + { url = "https://files.pythonhosted.org/packages/12/d7/80f6d4dd5aa7f02b6020e75216213460b84edd7e32d32155507523a04b2b/pyoxigraph-0.5.9-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3bd1925a8185320bcb8c549cccafbb423cc3957513890e6f420b8e355055052a", size = 8204009, upload-time = "2026-06-18T17:08:52.493Z" }, + { url = "https://files.pythonhosted.org/packages/82/94/da29a7d85340f119be878136507a8cbf4640ed5fe2b0dbc68fd67a1f807c/pyoxigraph-0.5.9-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f619aac7199b2ba91cade2fe69f64b4c73abb1e6b33735b0ff7205a753e609cd", size = 8865946, upload-time = "2026-06-18T17:08:54.477Z" }, + { url = "https://files.pythonhosted.org/packages/7a/42/222017d65d411f1993585d51b977b65680ecc0edbc28609f702a65107e65/pyoxigraph-0.5.9-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:09071f6c08b9489723dec96e2d96f64a15b9be2d165d3bbf67d40712884ba7a3", size = 9414073, upload-time = "2026-06-18T17:08:57.435Z" }, + { url = "https://files.pythonhosted.org/packages/f2/8a/7ba44c596afa3377a9c75f6ff76de91e8e45a18df72d17cb74efbb02db92/pyoxigraph-0.5.9-cp38-abi3-win_amd64.whl", hash = "sha256:efd3d03bd2a36f9b0bdf3ce70d76ce5278c481fe961d14c2bb6efcac10f57ae2", size = 5391422, upload-time = "2026-06-18T17:08:59.508Z" }, + { url = "https://files.pythonhosted.org/packages/c5/46/b092a22596c7ed11b0b26b3dade2dede638fc6a3e61ee7e5168aa3481948/pyoxigraph-0.5.9-cp38-abi3-win_arm64.whl", hash = "sha256:94c2a8b52c1ed6e445a235a4f89cd460eea936f399d28df5e9927826bf52f032", size = 5048182, upload-time = "2026-06-18T17:09:01.419Z" }, + { url = "https://files.pythonhosted.org/packages/ac/1e/99b6d12597f3dd59ac17b88925bde71b1b7667139b5c55d4376e1db3e409/pyoxigraph-0.5.9-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:f39a6175a80a55c837981d4d68f42380071bb1d45af124de488fcc8a61a81af3", size = 7682650, upload-time = "2026-06-18T17:09:07.653Z" }, + { url = "https://files.pythonhosted.org/packages/87/61/a51a916969d75d5ccb7d1476fbbb9f67cca369fbc2bdf46575a7a399590b/pyoxigraph-0.5.9-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:71dba053e5efc0002fbd4ace3119b9d3aec8a6c5b164ed7409a2429bf71171b8", size = 8200433, upload-time = "2026-06-18T17:09:09.683Z" }, + { url = "https://files.pythonhosted.org/packages/aa/0f/800013ea344187b8cd98d34af827f2ac56ef02fb66c2026c525a8015261e/pyoxigraph-0.5.9-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:70ffb46ae49f52b18a49c3fb63d906ae9c189de4fe4dbf5453279bda4d27af4e", size = 5386457, upload-time = "2026-06-18T17:09:11.769Z" }, ] [[package]] @@ -5246,7 +5246,7 @@ wheels = [ [[package]] name = "sqlalchemy-bigquery" -version = "1.17.0" +version = "1.17.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "google-api-core" }, @@ -5255,9 +5255,9 @@ dependencies = [ { name = "packaging" }, { name = "sqlalchemy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1d/94/6fd01b23a92a2372a71cd1670302a6c11b138ad80906914433e6ddbc1e1a/sqlalchemy_bigquery-1.17.0.tar.gz", hash = "sha256:472284546a0c79cbf99b1bb0f5f99c5131fa888ea25d2d53208e6863e5094e2f", size = 119746, upload-time = "2026-05-07T08:04:51.805Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7a/14/e0dc54b28640cc771a46038926f0c9334496d2799118e5bfd191c2e2c251/sqlalchemy_bigquery-1.17.2.tar.gz", hash = "sha256:32f7893c16546d5cc5dc939fb7cf74f51505766a16422f21dd2e7e78ea8ec849", size = 119920, upload-time = "2026-08-06T06:24:56.558Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/bf/64ae26c6b58665b76abee9f7e536cef0e886c37e1da0b18f75133ff2fa4d/sqlalchemy_bigquery-1.17.0-py3-none-any.whl", hash = "sha256:89c1d4fc9f045ce762c93bf4b73a6c51a203dcf0dbe2d9ade540c7c5e3ed01dd", size = 39802, upload-time = "2026-05-07T08:03:33.787Z" }, + { url = "https://files.pythonhosted.org/packages/b8/86/a8b324e078c3aec11f345ceab5346d39ff1819efde1199d9fbd5c3f49892/sqlalchemy_bigquery-1.17.2-py3-none-any.whl", hash = "sha256:3b5034178a594cb84b89a2ee4818eb472162fa95c98461d809616eb148b8e46c", size = 39762, upload-time = "2026-08-06T06:23:51.925Z" }, ] [[package]] From a6e010154ecce6f09bef6733824eea38e0a0393e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Aug 2026 13:54:39 +0000 Subject: [PATCH 71/72] build(deps-dev): bump sphinxcontrib-mermaid from 2.0.3 to 2.1.0 (#3894) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/linkml/pyproject.toml | 2 +- uv.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/linkml/pyproject.toml b/packages/linkml/pyproject.toml index 1ebf47d13a..348f8563f9 100644 --- a/packages/linkml/pyproject.toml +++ b/packages/linkml/pyproject.toml @@ -132,7 +132,7 @@ tests-extra = [ ] docs = [ "furo>=2025.12.19", - "sphinxcontrib-mermaid>=2.0.3", + "sphinxcontrib-mermaid>=2.1.0", "sphinx", "sphinx-click", "sphinx-rtd-theme", diff --git a/uv.lock b/uv.lock index 87a3673b79..aeb931aa1c 100644 --- a/uv.lock +++ b/uv.lock @@ -2569,7 +2569,7 @@ docs = [ { name = "sphinx-click" }, { name = "sphinx-jinja", specifier = ">=2.0.2" }, { name = "sphinx-rtd-theme" }, - { name = "sphinxcontrib-mermaid", specifier = ">=2.0.3" }, + { name = "sphinxcontrib-mermaid", specifier = ">=2.1.0" }, { name = "sphinxcontrib-programoutput", specifier = ">=0.20" }, ] lint = [{ name = "black", specifier = ">=24.0.0" }] @@ -5144,7 +5144,7 @@ wheels = [ [[package]] name = "sphinxcontrib-mermaid" -version = "2.0.3" +version = "2.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jinja2" }, @@ -5152,9 +5152,9 @@ dependencies = [ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/51/29/54cf1f7e03630ca4859caba25bc192698954d7c630377c62d1e264715c37/sphinxcontrib_mermaid-2.0.3.tar.gz", hash = "sha256:a6865ef6b65b225c5403a3170de63a04a07227cada11a4a71a6b87b4f9ed185a", size = 20764, upload-time = "2026-07-08T00:30:44.216Z" } +sdist = { url = "https://files.pythonhosted.org/packages/07/9d/bf3a48a657682c7e0445c71d916bca7ab8194454276cc22b16e7f974e502/sphinxcontrib_mermaid-2.1.0.tar.gz", hash = "sha256:13c5f9ac395cb6abf403eca34e228dc9fb3a30c9d960dbf3e40e9a8cef969549", size = 21695, upload-time = "2026-07-18T23:08:11.265Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1a/57/b39c7a69b70a3ce999732bdb57fcaac78fb3cc8e2843a3daf1c1f821bc9d/sphinxcontrib_mermaid-2.0.3-py3-none-any.whl", hash = "sha256:f001ed36a55c108f6221a2d656a441c487ee30651b54db72b7c752a20c7a66e8", size = 15401, upload-time = "2026-07-08T00:30:42.877Z" }, + { url = "https://files.pythonhosted.org/packages/f3/bd/d3348d62296e73a91420f0edf671450c9003ecd8704da40b1e3d9b868459/sphinxcontrib_mermaid-2.1.0-py3-none-any.whl", hash = "sha256:417cd144ec4b28852f46ba653f02ce8e538881c812111671a4c30344e87f2112", size = 16190, upload-time = "2026-07-18T23:08:10.098Z" }, ] [[package]] From 1f893504370dd39734b0653191ed5eff77804ea8 Mon Sep 17 00:00:00 2001 From: Carlo van Driesten Date: Fri, 14 Aug 2026 16:30:13 +0200 Subject: [PATCH 72/72] feat(gen-shacl): generate sh:sparql constraints from LinkML rules (#3451) Signed-off-by: Carlo van Driesten --- .../linkml/src/linkml/generators/shaclgen.py | 258 +++++- tests/linkml/test_generators/test_shaclgen.py | 877 ++++++++++++++++++ 2 files changed, 1134 insertions(+), 1 deletion(-) diff --git a/packages/linkml/src/linkml/generators/shaclgen.py b/packages/linkml/src/linkml/generators/shaclgen.py index afdd0cf953..1b8ba16994 100644 --- a/packages/linkml/src/linkml/generators/shaclgen.py +++ b/packages/linkml/src/linkml/generators/shaclgen.py @@ -16,7 +16,7 @@ from linkml.generators.shacl.shacl_ifabsent_processor import ShaclIfAbsentProcessor from linkml.utils.generator import Generator, shared_arguments from linkml.utils.language_tags import LanguageTagResolver -from linkml_runtime.linkml_model.meta import ClassDefinition, ElementName +from linkml_runtime.linkml_model.meta import ClassDefinition, ElementName, PresenceEnum from linkml_runtime.utils.formatutils import underscore from linkml_runtime.utils.rdf_canonicalize import canonicalize_rdf_graph from linkml_runtime.utils.yamlutils import TypedNode, extended_float, extended_int, extended_str @@ -142,6 +142,22 @@ class ShaclGenerator(Generator): ignores any per-slot ``in_language``. """ + emit_rules: bool = True + """Emit ``sh:sparql`` constraints from LinkML ``rules:`` blocks. + + When ``True`` (default), recognised rule patterns are translated into + SHACL-SPARQL constraints (``sh:SPARQLConstraint``) on the corresponding + ``sh:NodeShape``. Currently two patterns are recognised: + + * *Boolean guard* — a precondition with ``value_presence: PRESENT`` on a + value slot and a postcondition with ``equals_string: "true"`` on a + boolean flag slot. + * *Exclusive value* — a precondition with ``equals_string`` on a slot and + a postcondition with ``maximum_cardinality`` on the *same* slot. + + See `W3C SHACL §5 `_ + and `linkml/linkml#2464 `_. + """ generatorname = os.path.basename(__file__) generatorversion = "0.0.1" valid_formats = ["ttl"] @@ -389,10 +405,239 @@ def st_node_pv(p, v): if default_value: prop_pv(SH.defaultValue, default_value) + if self.emit_rules: + self._add_rules(g, class_uri_with_suffix, c) + return g LINKML_ANY_URI = "https://w3id.org/linkml/Any" + # ------------------------------------------------------------------- + # Rules → sh:sparql + # ------------------------------------------------------------------- + + def _add_rules(self, g: Graph, shape_uri: URIRef, cls: ClassDefinition) -> None: + """Emit ``sh:sparql`` constraints from LinkML ``rules:`` blocks. + + Each recognised rule is converted into an ``sh:SPARQLConstraint`` + attached to *shape_uri*. Unrecognised patterns are logged at + ``DEBUG`` level and silently skipped. + + Currently recognised patterns: + + * **Boolean guard** — a *precondition* with + ``value_presence: PRESENT`` on a value slot and a *postcondition* + with ``equals_string: "true"`` on a boolean flag slot. + + * **Exclusive value** — a *precondition* with ``equals_string`` on + a slot and a *postcondition* with ``maximum_cardinality`` on the + *same* slot. Enforces that when a specific value is present in a + multivalued slot, the total number of values must not exceed the + given cardinality (typically 1 for mutual exclusion). + + See `W3C SHACL §5 `_. + """ + if not cls.rules: + return + + sv = self.schemaview + for rule in cls.rules: + if getattr(rule, "deactivated", False): + continue + + if getattr(rule, "bidirectional", False): + logger.warning( + "Rule in class %r has bidirectional=true; " + "SHACL-SPARQL generation does not support bidirectional rules. " + "Skipping this rule entirely.", + cls.name, + ) + continue + + if getattr(rule, "open_world", False): + logger.warning( + "Rule in class %r has open_world=true; " + "SHACL operates under closed-world assumption. " + "The constraint is emitted but may not match open-world semantics.", + cls.name, + ) + + if getattr(rule, "elseconditions", None): + logger.warning( + "Rule in class %r has elseconditions; " + "only the forward (if/then) branch is emitted as sh:sparql. " + "The else branch cannot be represented in SHACL-SPARQL.", + cls.name, + ) + + sparql_query = self._rule_to_sparql(sv, cls, rule) + if sparql_query is None: + logger.debug( + "Skipping unsupported rule pattern in class %r: %s", + cls.name, + getattr(rule, "description", "(no description)"), + ) + continue + + constraint = BNode() + g.add((shape_uri, SH.sparql, constraint)) + g.add((constraint, RDF.type, SH.SPARQLConstraint)) + + message = getattr(rule, "description", None) + if message: + g.add((constraint, SH.message, Literal(message))) + + g.add((constraint, SH.select, Literal(sparql_query))) + + def _rule_to_sparql(self, sv, cls: ClassDefinition, rule) -> str | None: + """Convert a ``ClassRule`` to a SPARQL SELECT query string. + + Returns ``None`` when the rule does not match any supported pattern. + """ + pre = getattr(rule, "preconditions", None) + post = getattr(rule, "postconditions", None) + if not pre or not post: + return None + + pre_slots = getattr(pre, "slot_conditions", None) or {} + post_slots = getattr(post, "slot_conditions", None) or {} + + # Pattern: boolean guard + # preconditions: exactly one slot with value_presence PRESENT + # postconditions: exactly one slot with equals_string "true" + if len(pre_slots) == 1 and len(post_slots) == 1: + pre_slot_name = next(iter(pre_slots)) + post_slot_name = next(iter(post_slots)) + + pre_cond = pre_slots[pre_slot_name] + post_cond = post_slots[post_slot_name] + + # Note: PresenceEnum.PRESENT is a PermissibleValue, but parsed schemas + # return PresenceEnum instances — wrapping ensures type-compatible comparison. + is_value_present = getattr(pre_cond, "value_presence", None) == PresenceEnum(PresenceEnum.PRESENT) + is_flag_true = getattr(post_cond, "equals_string", None) == "true" + + if is_value_present and is_flag_true: + return self._build_boolean_guard_sparql(sv, cls, post_slot_name, pre_slot_name) + + # Pattern: exclusive value + # preconditions: slot X has equals_string (a specific enum value) + # postconditions: same slot X has maximum_cardinality N + # Semantics: "If value V is present in slot X, then X has at most N values." + pre_equals = getattr(pre_cond, "equals_string", None) + post_max_card = getattr(post_cond, "maximum_cardinality", None) + + if pre_equals is not None and post_max_card is not None and pre_slot_name == post_slot_name: + return self._build_exclusive_value_sparql(sv, cls, pre_slot_name, pre_equals, int(post_max_card)) + + return None + + def _build_boolean_guard_sparql(self, sv, cls: ClassDefinition, flag_slot_name: str, value_slot_name: str) -> str: + """Build a SPARQL SELECT query for the boolean-guard pattern. + + The query detects violations where the value property is present + but the boolean flag is absent or not ``true``. + + Conforms to `SHACL §5.3.1 + `_: + ``$this`` is pre-bound to each focus node. + """ + flag_uri = self._slot_uri(sv, flag_slot_name, cls) + value_uri = self._slot_uri(sv, value_slot_name, cls) + + return ( + f"SELECT $this WHERE {{\n" + f" OPTIONAL {{ $this <{flag_uri}> ?flag . }}\n" + f" OPTIONAL {{ $this <{value_uri}> ?value . }}\n" + f" FILTER (\n" + f' ( !BOUND(?flag) || str(?flag) != "true" ) &&\n' + f" BOUND(?value)\n" + f" )\n" + f"}}" + ) + + def _build_exclusive_value_sparql( + self, + sv, + cls: ClassDefinition, + slot_name: str, + value_name: str, + max_card: int, + ) -> str | None: + """Build a SPARQL SELECT query for the exclusive-value pattern. + + Detects violations where a specific value is present in a multivalued + slot but the total number of values exceeds *max_card*. + + For the common case ``max_card == 1``, the query checks whether the + exclusive value coexists with any other value (simple existence test). + For ``max_card > 1``, a subquery counts all values and checks against + the limit. + + The exclusive value is resolved to its full IRI via the slot's enum + ``meaning`` field. If the slot is not an enum or the value has no + ``meaning``, the value is compared as a plain literal. + + Conforms to `SHACL §5.3.1 + `_: + ``$this`` is pre-bound to each focus node. + """ + slot_uri = self._slot_uri(sv, slot_name, cls) + value_ref = self._resolve_enum_value_ref(sv, slot_name, value_name) + + if max_card == 1: + return ( + f"SELECT $this WHERE {{\n" + f" $this <{slot_uri}> {value_ref} .\n" + f" $this <{slot_uri}> ?other .\n" + f" FILTER (?other != {value_ref})\n" + f"}}" + ) + + return ( + f"SELECT $this WHERE {{\n" + f" $this <{slot_uri}> {value_ref} .\n" + f" {{\n" + f" SELECT $this (COUNT(?val) AS ?count)\n" + f" WHERE {{ $this <{slot_uri}> ?val . }}\n" + f" GROUP BY $this\n" + f" HAVING (?count > {max_card})\n" + f" }}\n" + f"}}" + ) + + def _resolve_enum_value_ref(self, sv, slot_name: str, value_name: str) -> str: + """Resolve an enum value name to a SPARQL term (IRI or literal). + + Looks up the slot's range as an enum, finds the permissible value + matching *value_name*, and returns its ``meaning`` as a full IRI + wrapped in angle brackets. Falls back to a quoted literal if the + slot is not an enum or the value lacks a ``meaning``. + """ + slot = sv.get_slot(slot_name) + if slot: + range_name = slot.range + if range_name and range_name in sv.all_enums(): + enum = sv.get_enum(range_name) + pv = enum.permissible_values.get(value_name) + if pv and pv.meaning: + iri = sv.expand_curie(pv.meaning) + return f"<{iri}>" + return f'"{value_name}"' + + def _slot_uri(self, sv, slot_name: str, cls: ClassDefinition) -> str: + """Resolve a slot name to a full IRI string for use in SPARQL queries. + + Mirrors the resolution logic used for ``sh:path`` in the main slot loop: + prefer ``sv.get_uri()`` for slots registered in the schema map, fall + back to ``default_prefix:underscored_name``. + """ + slot = sv.get_slot(slot_name) + if slot and slot_name in sv.element_by_schema_map(): + return sv.get_uri(slot, expand=True) + pfx = sv.schema.default_prefix + return sv.expand_curie(f"{pfx}:{underscore(slot_name)}") + def _add_class(self, func: Callable, r: ElementName) -> None: """Add an sh:class constraint for range class *r*. @@ -660,6 +905,17 @@ def add_simple_data_type(func: Callable, r: ElementName) -> None: 'Example: "{name} ({class}): {description} [{comments}]"' ), ) +@click.option( + "--emit-rules/--no-emit-rules", + default=True, + show_default=True, + help=( + "Emit sh:sparql constraints from LinkML rules: blocks. " + "When enabled (default), recognised rule patterns (e.g. boolean-guard) " + "are translated into SHACL-SPARQL constraints on the corresponding " + "sh:NodeShape. Use --no-emit-rules to suppress rule generation." + ), +) @click.version_option(__version__, "-V", "--version") def cli(yamlfile, **args): """Generate SHACL turtle from a LinkML model""" diff --git a/tests/linkml/test_generators/test_shaclgen.py b/tests/linkml/test_generators/test_shaclgen.py index 6b19cf24b1..7b9e425335 100644 --- a/tests/linkml/test_generators/test_shaclgen.py +++ b/tests/linkml/test_generators/test_shaclgen.py @@ -1250,6 +1250,10 @@ def _build_message_test_schema(): return sb.schema +# Helper functions +# --------------------------------------------------------------------------- + + def _parse_shacl(schema, **kwargs): shacl = ShaclGenerator(schema, mergeimports=False, **kwargs).serialize() g = rdflib.Graph() @@ -1744,3 +1748,876 @@ def test_message_template_ignores_per_slot_in_language(): # Contrast: sh:name DOES follow the slot's in_language ("de"). names = _get_prop_objects(g, vehicle_shape, EX.vehicle_name, SH.name) assert Literal("Name", lang="de") in names + + +# --------------------------------------------------------------------------- +# --emit-rules / sh:sparql tests +# --------------------------------------------------------------------------- + +_RULES_SCHEMA_YAML = """ +id: https://example.org/boolean-guards +name: boolean_guard_rules +prefixes: + linkml: https://w3id.org/linkml/ + ex: https://example.org/boolean-guards/ +imports: + - linkml:types +default_prefix: ex +default_range: string +slots: + WeatherWind: + range: boolean + slot_uri: ex:WeatherWind + weatherWindValue: + description: Wind speed value. + range: decimal + slot_uri: ex:weatherWindValue + WeatherRain: + range: boolean + slot_uri: ex:WeatherRain + weatherRainValue: + description: Rain intensity value. + range: decimal + slot_uri: ex:weatherRainValue + Temperature: + range: decimal + slot_uri: ex:Temperature +classes: + Environment: + class_uri: ex:Environment + slots: + - WeatherWind + - weatherWindValue + - WeatherRain + - weatherRainValue + - Temperature + rules: + - description: If weatherWindValue is provided, WeatherWind must be true. + preconditions: + slot_conditions: + weatherWindValue: + value_presence: PRESENT + postconditions: + slot_conditions: + WeatherWind: + equals_string: "true" + - description: If weatherRainValue is provided, WeatherRain must be true. + preconditions: + slot_conditions: + weatherRainValue: + value_presence: PRESENT + postconditions: + slot_conditions: + WeatherRain: + equals_string: "true" +""" + +EX_RULES = rdflib.Namespace("https://example.org/boolean-guards/") + + +def test_rule_boolean_guard_generates_sparql(): + """Boolean-guard rules produce sh:sparql constraints on the NodeShape.""" + g = _parse_shacl(_RULES_SCHEMA_YAML) + + shape = EX_RULES.Environment + sparql_nodes = list(g.objects(shape, SH.sparql)) + assert len(sparql_nodes) == 2, f"Expected 2 sh:sparql constraints, got {len(sparql_nodes)}" + + for node in sparql_nodes: + assert (node, RDF.type, SH.SPARQLConstraint) in g + selects = list(g.objects(node, SH.select)) + assert len(selects) == 1, "Each constraint must have exactly one sh:select" + query = str(selects[0]) + assert "$this" in query, "SPARQL must use $this pre-bound variable" + assert "OPTIONAL" in query, "SPARQL must use OPTIONAL for flag/value" + assert "FILTER" in query, "SPARQL must have a FILTER clause" + assert "BOUND" in query, "SPARQL must use BOUND()" + + +def test_rule_with_description_generates_message(): + """Rule description is emitted as sh:message on the SPARQLConstraint.""" + g = _parse_shacl(_RULES_SCHEMA_YAML) + + shape = EX_RULES.Environment + sparql_nodes = list(g.objects(shape, SH.sparql)) + + messages = set() + for node in sparql_nodes: + for msg in g.objects(node, SH.message): + messages.add(str(msg)) + + assert "If weatherWindValue is provided, WeatherWind must be true." in messages + assert "If weatherRainValue is provided, WeatherRain must be true." in messages + + +def test_rule_sparql_contains_correct_uris(): + """SPARQL queries reference the correct slot URIs.""" + g = _parse_shacl(_RULES_SCHEMA_YAML) + + shape = EX_RULES.Environment + sparql_nodes = list(g.objects(shape, SH.sparql)) + + queries = [str(list(g.objects(n, SH.select))[0]) for n in sparql_nodes] + all_sparql = "\n".join(queries) + + assert str(EX_RULES.WeatherWind) in all_sparql + assert str(EX_RULES.weatherWindValue) in all_sparql + assert str(EX_RULES.WeatherRain) in all_sparql + assert str(EX_RULES.weatherRainValue) in all_sparql + + +_DEACTIVATED_RULE_SCHEMA_YAML = """ +id: https://example.org/deactivated-test +name: deactivated_rule_test +prefixes: + linkml: https://w3id.org/linkml/ + ex: https://example.org/deactivated-test/ +imports: + - linkml:types +default_prefix: ex +default_range: string +slots: + Flag: + range: boolean + slot_uri: ex:Flag + flagValue: + range: decimal + slot_uri: ex:flagValue +classes: + TestClass: + class_uri: ex:TestClass + slots: + - Flag + - flagValue + rules: + - description: This rule is deactivated. + deactivated: true + preconditions: + slot_conditions: + flagValue: + value_presence: PRESENT + postconditions: + slot_conditions: + Flag: + equals_string: "true" +""" + + +def test_rule_deactivated_skipped(): + """Deactivated rules do not produce sh:sparql constraints.""" + g = _parse_shacl(_DEACTIVATED_RULE_SCHEMA_YAML) + + shape = URIRef("https://example.org/deactivated-test/TestClass") + sparql_nodes = list(g.objects(shape, SH.sparql)) + assert len(sparql_nodes) == 0, f"Deactivated rule should not emit sh:sparql, got {len(sparql_nodes)}" + + +_UNSUPPORTED_RULE_SCHEMA_YAML = """ +id: https://example.org/unsupported-test +name: unsupported_rule_test +prefixes: + linkml: https://w3id.org/linkml/ + ex: https://example.org/unsupported-test/ +imports: + - linkml:types +default_prefix: ex +default_range: string +slots: + slotA: + range: string + slot_uri: ex:slotA + slotB: + range: string + slot_uri: ex:slotB +classes: + TestClass: + class_uri: ex:TestClass + slots: + - slotA + - slotB + rules: + - description: Rule with no postconditions. + preconditions: + slot_conditions: + slotA: + value_presence: PRESENT +""" + + +def test_rule_unsupported_pattern_skipped(): + """Unrecognised rule patterns are silently skipped (no sh:sparql emitted).""" + g = _parse_shacl(_UNSUPPORTED_RULE_SCHEMA_YAML) + + shape = URIRef("https://example.org/unsupported-test/TestClass") + sparql_nodes = list(g.objects(shape, SH.sparql)) + assert len(sparql_nodes) == 0 + + +def test_rule_no_emit_rules_flag(): + """--no-emit-rules suppresses sh:sparql constraint generation.""" + g = _parse_shacl(_RULES_SCHEMA_YAML, emit_rules=False) + + shape = EX_RULES.Environment + sparql_nodes = list(g.objects(shape, SH.sparql)) + assert len(sparql_nodes) == 0, f"emit_rules=False should suppress rules, got {len(sparql_nodes)}" + + +_NO_RULES_SCHEMA_YAML = """ +id: https://example.org/no-rules +name: no_rules_test +prefixes: + linkml: https://w3id.org/linkml/ + ex: https://example.org/no-rules/ +imports: + - linkml:types +default_prefix: ex +default_range: string +slots: + name: + range: string + slot_uri: ex:name +classes: + SimpleClass: + class_uri: ex:SimpleClass + slots: + - name +""" + + +def test_rule_no_rules_no_sparql(): + """Classes without rules: blocks produce no sh:sparql constraints.""" + g = _parse_shacl(_NO_RULES_SCHEMA_YAML) + + shape = URIRef("https://example.org/no-rules/SimpleClass") + sparql_nodes = list(g.objects(shape, SH.sparql)) + assert len(sparql_nodes) == 0 + + +def test_rule_multiple_rules_per_class(): + """Multiple boolean-guard rules on one class produce multiple sh:sparql constraints.""" + g = _parse_shacl(_RULES_SCHEMA_YAML) + + shape = EX_RULES.Environment + sparql_nodes = list(g.objects(shape, SH.sparql)) + assert len(sparql_nodes) == 2 + + # Each constraint should reference different slot pairs + queries = [str(list(g.objects(n, SH.select))[0]) for n in sparql_nodes] + wind_query = [q for q in queries if "weatherWindValue" in q] + rain_query = [q for q in queries if "weatherRainValue" in q] + assert len(wind_query) == 1, "Expected exactly one wind query" + assert len(rain_query) == 1, "Expected exactly one rain query" + + +# --------------------------------------------------------------------------- +# Tests for URI resolution without explicit slot_uri +# --------------------------------------------------------------------------- + +_NO_SLOT_URI_SCHEMA_YAML = """ +id: https://example.org/no-slot-uri +name: no_slot_uri_test +prefixes: + linkml: https://w3id.org/linkml/ + ex: https://example.org/no-slot-uri/ +imports: + - linkml:types +default_prefix: ex +default_range: string +slots: + is_active: + range: boolean + measured_value: + range: decimal +classes: + Reading: + class_uri: ex:Reading + slots: + - is_active + - measured_value + rules: + - description: If measured_value is provided, is_active must be true. + preconditions: + slot_conditions: + measured_value: + value_presence: PRESENT + postconditions: + slot_conditions: + is_active: + equals_string: "true" +""" + + +def test_rule_no_explicit_slot_uri(): + """Slots without explicit slot_uri resolve via default_prefix + underscore(name).""" + g = _parse_shacl(_NO_SLOT_URI_SCHEMA_YAML) + + shape = URIRef("https://example.org/no-slot-uri/Reading") + sparql_nodes = list(g.objects(shape, SH.sparql)) + assert len(sparql_nodes) == 1 + + query = str(list(g.objects(sparql_nodes[0], SH.select))[0]) + # URIs should be default_prefix:underscore(name) + assert "https://example.org/no-slot-uri/is_active" in query + assert "https://example.org/no-slot-uri/measured_value" in query + + +# --------------------------------------------------------------------------- +# Tests for elseconditions rejection +# --------------------------------------------------------------------------- + +_ELSE_COND_SCHEMA_YAML = """ +id: https://example.org/else-test +name: else_cond_test +prefixes: + linkml: https://w3id.org/linkml/ + ex: https://example.org/else-test/ +imports: + - linkml:types +default_prefix: ex +default_range: string +slots: + Flag: + range: boolean + slot_uri: ex:Flag + flagValue: + range: decimal + slot_uri: ex:flagValue + fallbackValue: + range: string + slot_uri: ex:fallbackValue +classes: + TestClass: + class_uri: ex:TestClass + slots: + - Flag + - flagValue + - fallbackValue + rules: + - description: Rule with elseconditions should be skipped. + preconditions: + slot_conditions: + flagValue: + value_presence: PRESENT + postconditions: + slot_conditions: + Flag: + equals_string: "true" + elseconditions: + slot_conditions: + fallbackValue: + value_presence: PRESENT +""" + + +def test_rule_with_elseconditions_emitted(): + """Rules with elseconditions emit the forward (if/then) branch and warn.""" + + g = _parse_shacl(_ELSE_COND_SCHEMA_YAML) + + shape = URIRef("https://example.org/else-test/TestClass") + sparql_nodes = list(g.objects(shape, SH.sparql)) + assert len(sparql_nodes) >= 1, "Rule with elseconditions should emit sh:sparql for the forward branch" + + +def test_rule_with_elseconditions_warns(caplog): + """Rules with elseconditions emit a warning about the dropped else branch.""" + import logging + + with caplog.at_level(logging.WARNING): + _parse_shacl(_ELSE_COND_SCHEMA_YAML) + + assert any("elseconditions" in rec.message for rec in caplog.records), ( + "Expected a warning about elseconditions being dropped" + ) + + +_BIDIRECTIONAL_RULE_SCHEMA_YAML = """ +id: https://example.org/bidir-test +name: bidir_rule_test +prefixes: + linkml: https://w3id.org/linkml/ + ex: https://example.org/bidir-test/ +imports: + - linkml:types +default_prefix: ex +default_range: string +slots: + Flag: + range: boolean + slot_uri: ex:Flag + flagValue: + range: decimal + slot_uri: ex:flagValue +classes: + TestClass: + class_uri: ex:TestClass + slots: + - Flag + - flagValue + rules: + - description: Bidirectional rule should be skipped. + bidirectional: true + preconditions: + slot_conditions: + flagValue: + value_presence: PRESENT + postconditions: + slot_conditions: + Flag: + equals_string: "true" +""" + + +def test_rule_bidirectional_skipped(caplog): + """Rules with bidirectional=true are skipped entirely with a warning.""" + import logging + + with caplog.at_level(logging.WARNING): + g = _parse_shacl(_BIDIRECTIONAL_RULE_SCHEMA_YAML) + + shape = URIRef("https://example.org/bidir-test/TestClass") + sparql_nodes = list(g.objects(shape, SH.sparql)) + assert len(sparql_nodes) == 0, "Bidirectional rules should NOT emit sh:sparql" + assert any("bidirectional" in rec.message for rec in caplog.records), ( + "Expected a warning about bidirectional rules being skipped" + ) + + +# --------------------------------------------------------------------------- +# End-to-end pyshacl validation test +# --------------------------------------------------------------------------- + + +def test_rule_boolean_guard_pyshacl_end_to_end(): + """End-to-end: pyshacl flags a violation and passes a conforming instance.""" + import pyshacl + + shacl_ttl = ShaclGenerator(_RULES_SCHEMA_YAML, mergeimports=False, emit_rules=True).serialize() + + # Build a conforming RDF instance: weatherWindValue present AND WeatherWind = true + conforming_data = """ + @prefix ex: . + @prefix xsd: . + + ex:env1 a ex:Environment ; + ex:WeatherWind "true"^^xsd:boolean ; + ex:weatherWindValue "12.5"^^xsd:decimal . + """ + + # Build a violating RDF instance: weatherWindValue present but WeatherWind missing + violating_data = """ + @prefix ex: . + @prefix xsd: . + + ex:env2 a ex:Environment ; + ex:weatherWindValue "8.0"^^xsd:decimal . + """ + + # Conforming instance should pass + conforms, _, _ = pyshacl.validate( + data_graph=conforming_data, + shacl_graph=shacl_ttl, + data_graph_format="turtle", + shacl_graph_format="turtle", + advanced=True, + ) + assert conforms, "Conforming instance should pass SHACL validation" + + # Violating instance should fail + conforms, results_graph, results_text = pyshacl.validate( + data_graph=violating_data, + shacl_graph=shacl_ttl, + data_graph_format="turtle", + shacl_graph_format="turtle", + advanced=True, + ) + assert not conforms, f"Violating instance should fail SHACL validation:\n{results_text}" + + +# --------------------------------------------------------------------------- +# SPARQL syntax validation +# --------------------------------------------------------------------------- + + +def test_rule_sparql_syntax_valid(): + """Generated SPARQL queries must be syntactically valid.""" + from rdflib.plugins.sparql import prepareQuery + + g = _parse_shacl(_RULES_SCHEMA_YAML) + + shape = EX_RULES.Environment + sparql_nodes = list(g.objects(shape, SH.sparql)) + assert len(sparql_nodes) >= 1 + + for node in sparql_nodes: + query_text = str(list(g.objects(node, SH.select))[0]) + # prepareQuery validates SPARQL syntax; $this is a valid variable name + prepareQuery(query_text) + + +# =========================================================================== +# Exclusive-value pattern tests (SHACL §5 SPARQL constraints) +# =========================================================================== +# +# The "exclusive value" pattern translates a LinkML rule where: +# - preconditions: slot X has equals_string (a specific enum value name) +# - postconditions: same slot X has maximum_cardinality N +# +# Semantics: "If value V is present in multivalued slot X, then X has at most +# N values total." For N=1 this means V must be the sole value (mutual +# exclusion with other enum members). +# +# Generated SHACL: sh:SPARQLConstraint per W3C SHACL §5.3.1, using $this +# pre-bound to each focus node. +# +# References: +# - W3C SHACL §5 +# - W3C SHACL §5.3.1 +# - ISO 34503:2023, 9.3.6 (motivating use case: EdgeNone exclusivity) +# =========================================================================== + +_EXCLUSIVE_VALUE_SCHEMA_YAML = """ +id: https://example.org/exclusive-value +name: exclusive_value_rules +prefixes: + linkml: https://w3id.org/linkml/ + ex: https://example.org/exclusive-value/ +imports: + - linkml:types +default_prefix: ex +default_range: string + +enums: + EdgeTypeEnum: + permissible_values: + EdgeNone: + meaning: ex:EdgeNone + EdgeBarriers: + meaning: ex:EdgeBarriers + EdgeMarkers: + meaning: ex:EdgeMarkers + + PriorityEnum: + permissible_values: + High: + description: High priority (no meaning IRI). + Medium: + description: Medium priority (no meaning IRI). + Low: + description: Low priority (no meaning IRI). + +slots: + edgeType: + range: EdgeTypeEnum + multivalued: true + slot_uri: ex:edgeType + priority: + range: PriorityEnum + multivalued: true + slot_uri: ex:priority + otherSlot: + range: string + slot_uri: ex:otherSlot + +classes: + Road: + class_uri: ex:Road + slots: + - edgeType + - otherSlot + rules: + - description: >- + EdgeNone is mutually exclusive with other edge types. + preconditions: + slot_conditions: + edgeType: + equals_string: "EdgeNone" + postconditions: + slot_conditions: + edgeType: + maximum_cardinality: 1 + + Intersection: + class_uri: ex:Intersection + slots: + - edgeType + rules: + - description: >- + EdgeNone allows at most 2 total edge values. + preconditions: + slot_conditions: + edgeType: + equals_string: "EdgeNone" + postconditions: + slot_conditions: + edgeType: + maximum_cardinality: 2 + + Task: + class_uri: ex:Task + slots: + - priority + rules: + - description: >- + High priority is exclusive (literal fallback test). + preconditions: + slot_conditions: + priority: + equals_string: "High" + postconditions: + slot_conditions: + priority: + maximum_cardinality: 1 + + MismatchedSlots: + class_uri: ex:MismatchedSlots + slots: + - edgeType + - otherSlot + rules: + - description: >- + Different slots in pre/post — not an exclusive-value pattern. + preconditions: + slot_conditions: + edgeType: + equals_string: "EdgeNone" + postconditions: + slot_conditions: + otherSlot: + maximum_cardinality: 1 +""" + +EX_EXCL = rdflib.Namespace("https://example.org/exclusive-value/") + + +def test_exclusive_value_generates_sparql(): + """Exclusive-value rules produce sh:sparql constraints on the NodeShape.""" + g = _parse_shacl(_EXCLUSIVE_VALUE_SCHEMA_YAML) + + shape = EX_EXCL.Road + sparql_nodes = list(g.objects(shape, SH.sparql)) + assert len(sparql_nodes) == 1, f"Expected 1 sh:sparql constraint, got {len(sparql_nodes)}" + + node = sparql_nodes[0] + assert (node, RDF.type, SH.SPARQLConstraint) in g + selects = list(g.objects(node, SH.select)) + assert len(selects) == 1, "Constraint must have exactly one sh:select" + + +def test_exclusive_value_sparql_uses_enum_iri(): + """SPARQL references the enum value's meaning IRI, not a string literal. + + Per the enum definition, EdgeNone has meaning: ex:EdgeNone which expands + to . The generated SPARQL + must use this full IRI in angle brackets. + """ + g = _parse_shacl(_EXCLUSIVE_VALUE_SCHEMA_YAML) + + shape = EX_EXCL.Road + sparql_nodes = list(g.objects(shape, SH.sparql)) + query = str(list(g.objects(sparql_nodes[0], SH.select))[0]) + + edge_none_iri = str(EX_EXCL.EdgeNone) + assert f"<{edge_none_iri}>" in query, f"SPARQL must reference EdgeNone as full IRI <{edge_none_iri}>, got:\n{query}" + + +def test_exclusive_value_max_card_1_sparql_structure(): + """For maximum_cardinality: 1, SPARQL uses FILTER(?other != ). + + The query pattern for N=1 is: + SELECT $this WHERE { + $this . + $this ?other . + FILTER (?other != ) + } + + This is more efficient than the COUNT-based approach for the common + singleton exclusion case. + """ + g = _parse_shacl(_EXCLUSIVE_VALUE_SCHEMA_YAML) + + shape = EX_EXCL.Road + sparql_nodes = list(g.objects(shape, SH.sparql)) + query = str(list(g.objects(sparql_nodes[0], SH.select))[0]) + + assert "$this" in query, "SPARQL must use $this pre-bound variable (SHACL §5.3.1)" + assert "FILTER" in query, "N=1 pattern must use FILTER for exclusion check" + assert "?other" in query, "N=1 pattern must bind ?other for comparison" + # Must NOT use COUNT for the N=1 case (simpler pattern) + assert "COUNT" not in query, "N=1 pattern should use FILTER, not COUNT" + # The slot URI must appear (property path) + assert str(EX_EXCL.edgeType) in query, "SPARQL must reference the slot URI" + + +def test_exclusive_value_max_card_gt1_sparql_structure(): + """For maximum_cardinality > 1, SPARQL uses COUNT-based subquery. + + The query pattern for N>1 is: + SELECT $this WHERE { + $this . + { + SELECT $this (COUNT(?val) AS ?count) + WHERE { $this ?val . } + GROUP BY $this + HAVING (?count > N) + } + } + """ + g = _parse_shacl(_EXCLUSIVE_VALUE_SCHEMA_YAML) + + shape = EX_EXCL.Intersection + sparql_nodes = list(g.objects(shape, SH.sparql)) + assert len(sparql_nodes) == 1, f"Expected 1 sh:sparql constraint, got {len(sparql_nodes)}" + + query = str(list(g.objects(sparql_nodes[0], SH.select))[0]) + + assert "$this" in query, "SPARQL must use $this pre-bound variable" + assert "COUNT" in query, "N>1 pattern must use COUNT" + assert "GROUP BY" in query, "N>1 pattern must GROUP BY $this" + assert "HAVING" in query, "N>1 pattern must use HAVING for count check" + assert "> 2" in query, "HAVING must check count > maximum_cardinality (2)" + + +def test_exclusive_value_no_meaning_falls_back_to_literal(): + """When enum values lack a meaning IRI, the value is compared as a literal. + + PriorityEnum values have no meaning field, so 'High' is used as a + quoted string in the SPARQL rather than an IRI in angle brackets. + """ + g = _parse_shacl(_EXCLUSIVE_VALUE_SCHEMA_YAML) + + shape = EX_EXCL.Task + sparql_nodes = list(g.objects(shape, SH.sparql)) + assert len(sparql_nodes) == 1, f"Expected 1 sh:sparql constraint, got {len(sparql_nodes)}" + + query = str(list(g.objects(sparql_nodes[0], SH.select))[0]) + + # Should use quoted literal, not angle-bracket IRI + assert '"High"' in query, f"No-meaning enum should use literal '\"High\"', got:\n{query}" + assert "" not in query, "Should not emit as IRI when meaning is absent" + + +def test_exclusive_value_different_slots_not_recognised(): + """Rules where pre/post reference different slots are NOT exclusive-value. + + The pattern requires the SAME slot in both preconditions and + postconditions. When they differ, the rule is unrecognised and + silently skipped (no sh:sparql emitted). + """ + g = _parse_shacl(_EXCLUSIVE_VALUE_SCHEMA_YAML) + + shape = EX_EXCL.MismatchedSlots + sparql_nodes = list(g.objects(shape, SH.sparql)) + assert len(sparql_nodes) == 0, ( + f"Mismatched slots should not trigger exclusive-value pattern, got {len(sparql_nodes)}" + ) + + +def test_exclusive_value_message_from_description(): + """Rule description is emitted as sh:message on the SPARQLConstraint.""" + g = _parse_shacl(_EXCLUSIVE_VALUE_SCHEMA_YAML) + + shape = EX_EXCL.Road + sparql_nodes = list(g.objects(shape, SH.sparql)) + messages = [str(m) for node in sparql_nodes for m in g.objects(node, SH.message)] + + assert any("EdgeNone is mutually exclusive" in m for m in messages), ( + f"Expected message about EdgeNone exclusivity, got: {messages}" + ) + + +def test_exclusive_value_sparql_syntax_valid(): + """Generated SPARQL for exclusive-value rules must be syntactically valid. + + Uses rdflib's prepareQuery() which validates SPARQL syntax. + $this is a valid SPARQL variable name per the grammar. + """ + from rdflib.plugins.sparql import prepareQuery + + g = _parse_shacl(_EXCLUSIVE_VALUE_SCHEMA_YAML) + + for shape in (EX_EXCL.Road, EX_EXCL.Intersection, EX_EXCL.Task): + sparql_nodes = list(g.objects(shape, SH.sparql)) + for node in sparql_nodes: + query_text = str(list(g.objects(node, SH.select))[0]) + # prepareQuery validates SPARQL syntax + prepareQuery(query_text) + + +def test_exclusive_value_coexists_with_boolean_guard(): + """Exclusive-value and boolean-guard rules can coexist on the same class. + + When a class has both pattern types, both produce sh:sparql constraints. + """ + schema = """ +id: https://example.org/mixed-rules +name: mixed_rules +prefixes: + linkml: https://w3id.org/linkml/ + ex: https://example.org/mixed-rules/ +imports: + - linkml:types +default_prefix: ex +default_range: string + +enums: + StatusEnum: + permissible_values: + None: + meaning: ex:None + Active: + meaning: ex:Active + +slots: + status: + range: StatusEnum + multivalued: true + slot_uri: ex:status + Flag: + range: boolean + slot_uri: ex:Flag + flagValue: + range: decimal + slot_uri: ex:flagValue + +classes: + Widget: + class_uri: ex:Widget + slots: + - status + - Flag + - flagValue + rules: + - description: None is exclusive. + preconditions: + slot_conditions: + status: + equals_string: "None" + postconditions: + slot_conditions: + status: + maximum_cardinality: 1 + - description: If flagValue present, Flag must be true. + preconditions: + slot_conditions: + flagValue: + value_presence: PRESENT + postconditions: + slot_conditions: + Flag: + equals_string: "true" +""" + g = _parse_shacl(schema) + + shape = URIRef("https://example.org/mixed-rules/Widget") + sparql_nodes = list(g.objects(shape, SH.sparql)) + assert len(sparql_nodes) == 2, ( + f"Expected 2 sh:sparql constraints (1 exclusive + 1 boolean guard), got {len(sparql_nodes)}" + ) + + queries = [str(list(g.objects(n, SH.select))[0]) for n in sparql_nodes] + # One should have FILTER(?other != ...) pattern, the other BOUND pattern + has_exclusive = any("?other" in q for q in queries) + has_boolean = any("BOUND" in q for q in queries) + assert has_exclusive, "Expected one exclusive-value SPARQL constraint" + assert has_boolean, "Expected one boolean-guard SPARQL constraint"