Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,14 +1,31 @@
default_language_version:
python: python3

# Note: the `exclude` patterns below cover `make gen-project` outputs written
# into linkml_model/ which we do not control. Artefacts copied verbatim from the
# LinkML generators, which emit trailing whitespace and inconsistent final
# newlines (e.g. the bare "// " comment line in protobuf/meta.proto). Native
# sources stay covered: model/schema/, model/docs/, linkml_files.py, etc.
# Note: Keep the two exclude patterns in sync.

repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v6.0.0
hooks:
- id: end-of-file-fixer
exclude: |
(?x)^linkml_model/(
(excel|graphql|jsonld|jsonschema|owl|prefixmap|protobuf|rdf|shacl|shex|sqlddl|sqlschema)/
|(annotations|array|datasets|extensions|mappings|meta|types|units|validation)\.py$
)
- id: check-yaml
- id: check-toml
- id: trailing-whitespace
exclude: |
(?x)^linkml_model/(
(excel|graphql|jsonld|jsonschema|owl|prefixmap|protobuf|rdf|shacl|shex|sqlddl|sqlschema)/
|(annotations|array|datasets|extensions|mappings|meta|types|units|validation)\.py$
)

- repo: https://github.com/codespell-project/codespell
rev: v2.4.1
Expand Down
5 changes: 3 additions & 2 deletions linkml_model/annotations.py
Original file line number Diff line number Diff line change
@@ -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-07-27T16:30:13
# Schema: annotations
#
# id: https://w3id.org/linkml/annotations
Expand Down Expand Up @@ -55,7 +55,7 @@
from .types import Uriorcurie
from linkml_runtime.utils.metamodelcore import URIorCURIE

metamodel_version = "1.7.0"
metamodel_version = "1.11.0"
version = "2.0.0"

# Namespaces
Expand Down Expand Up @@ -126,3 +126,4 @@ class slots:

slots.annotations = Slot(uri=LINKML.annotations, name="annotations", curie=LINKML.curie('annotations'),
model_uri=LINKML.annotations, domain=None, range=Optional[Union[dict[Union[str, AnnotationTag], Union[dict, "Annotation"]], list[Union[dict, "Annotation"]]]])

5 changes: 3 additions & 2 deletions linkml_model/array.py
Original file line number Diff line number Diff line change
@@ -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-07-27T16:30:14
# Schema: arrays
#
# id: https://w3id.org/linkml/lib/arrays
Expand Down Expand Up @@ -55,7 +55,7 @@

from .types import Integer, String

metamodel_version = "1.7.0"
metamodel_version = "1.11.0"
version = None

# Namespaces
Expand Down Expand Up @@ -282,3 +282,4 @@ class slots:

slots.RowOrderedArray_array_linearization_order = Slot(uri=LINKML.array_linearization_order, name="RowOrderedArray_array_linearization_order", curie=LINKML.curie('array_linearization_order'),
model_uri=LINKML.RowOrderedArray_array_linearization_order, domain=None, range=Optional[Union[str, "ArrayLinearizationOrderOptions"]])

5 changes: 3 additions & 2 deletions linkml_model/datasets.py
Original file line number Diff line number Diff line change
@@ -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-07-27T16:30:15
# Schema: datasets
#
# id: https://w3id.org/linkml/datasets
Expand Down Expand Up @@ -54,7 +54,7 @@
from .types import Datetime, Integer, String, Uri, Uriorcurie
from linkml_runtime.utils.metamodelcore import URI, URIorCURIE, XSDDateTime

metamodel_version = "1.7.0"
metamodel_version = "1.11.0"
version = None

# Namespaces
Expand Down Expand Up @@ -570,3 +570,4 @@ class slots:

slots.formatDialect__quote_char = Slot(uri=DATASETS.quote_char, name="formatDialect__quote_char", curie=DATASETS.curie('quote_char'),
model_uri=DATASETS.formatDialect__quote_char, domain=None, range=Optional[str])

Binary file modified linkml_model/excel/meta.xlsx
Binary file not shown.
5 changes: 3 additions & 2 deletions linkml_model/extensions.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Auto generated from extensions.yaml by pythongen.py version: 0.0.1
# Generation date: 2026-05-05T18:49:11
# Generation date: 2026-07-27T16:30:16
# Schema: extensions
#
# id: https://w3id.org/linkml/extensions
Expand Down Expand Up @@ -54,7 +54,7 @@
from .types import Uriorcurie
from linkml_runtime.utils.metamodelcore import URIorCURIE

metamodel_version = "1.7.0"
metamodel_version = "1.11.0"
version = "2.0.0"

# Namespaces
Expand Down Expand Up @@ -133,3 +133,4 @@ class slots:

slots.extension_value = Slot(uri=LINKML.value, name="extension_value", curie=LINKML.curie('value'),
model_uri=LINKML.extension_value, domain=Extension, range=Union[dict, AnyValue])

3 changes: 3 additions & 0 deletions linkml_model/graphql/meta.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ type AnonymousEnumExpression implements EnumExpression
codeSetVersion: String
pvFormula: PvFormulaOptions
permissibleValues: [PermissibleValue]
isOpen: Boolean
include: [AnonymousEnumExpression]
minus: [AnonymousEnumExpression]
inherits: [EnumDefinition]
Expand Down Expand Up @@ -708,6 +709,7 @@ type EnumDefinition implements EnumExpression
codeSetVersion: String
pvFormula: PvFormulaOptions
permissibleValues: [PermissibleValue]
isOpen: Boolean
include: [AnonymousEnumExpression]
minus: [AnonymousEnumExpression]
inherits: [EnumDefinition]
Expand All @@ -723,6 +725,7 @@ type EnumExpression
codeSetVersion: String
pvFormula: PvFormulaOptions
permissibleValues: [PermissibleValue]
isOpen: Boolean
include: [AnonymousEnumExpression]
minus: [AnonymousEnumExpression]
inherits: [EnumDefinition]
Expand Down
4 changes: 4 additions & 0 deletions linkml_model/jsonld/meta.context.jsonld
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,10 @@
"@type": "xsd:boolean",
"@id": "is_grouping_slot"
},
"is_open": {
"@type": "xsd:boolean",
"@id": "is_open"
},
"is_usage_slot": {
"@type": "xsd:boolean",
"@id": "is_usage_slot"
Expand Down
87 changes: 68 additions & 19 deletions linkml_model/jsonld/meta.jsonld
Original file line number Diff line number Diff line change
Expand Up @@ -1625,6 +1625,33 @@
"inlined": true,
"@type": "SlotDefinition"
},
{
"name": "is_open",
"definition_uri": "https://w3id.org/linkml/is_open",
"description": "Whether the enumeration is open, meaning that values outside of the set of permissible values are allowed. If true, the enumeration is open and data values that are not in the set of permissible values are permitted (though they SHOULD be drawn from the permissible values if available). If false (runtime default), the enumeration is closed and data values MUST be drawn from the set of permissible values.",
"comments": [
"An open enumeration is analogous to the `allow-other=\"yes\"` construct in the OSCAL Metamodel.",
"When an enum is open, the permissible value set is not exhaustive - they document the advised, recommended, or expected values but allow values outside the permissible set."
],
"in_subset": [
"SpecificationSubset"
],
"from_schema": "https://w3id.org/linkml/meta",
"see_also": [
"https://pages.nist.gov/metaschema/specification/syntax/constraints/#allow-other",
"https://github.com/linkml/linkml/issues/127",
"https://github.com/linkml/linkml/pull/3712"
],
"status": "testing",
"domain": "EnumExpression",
"slot_uri": "https://w3id.org/linkml/is_open",
"owner": "EnumExpression",
"domain_of": [
"EnumExpression"
],
"range": "boolean",
"@type": "SlotDefinition"
},
{
"name": "enum_uri",
"definition_uri": "https://w3id.org/linkml/enum_uri",
Expand Down Expand Up @@ -2955,15 +2982,20 @@
{
"name": "unique_keys",
"definition_uri": "https://w3id.org/linkml/unique_keys",
"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.\n"
],
"in_subset": [
"SpecificationSubset",
"BasicSubset",
"RelationalModelProfile"
],
"from_schema": "https://w3id.org/linkml/meta",
"see_also": [
"https://linkml.io/linkml/schemas/constraints.html#unique-key"
"https://linkml.io/linkml/schemas/constraints.html#unique-keys",
"linkml:key",
"linkml:identifier"
],
"exact_mappings": [
"http://www.w3.org/2002/07/owl#hasKey"
Expand Down Expand Up @@ -3941,12 +3973,12 @@
{
"name": "key",
"definition_uri": "https://w3id.org/linkml/key",
"description": "True means that the key slot(s) uniquely identify the elements within a single container",
"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.",
"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",
Expand All @@ -3955,7 +3987,10 @@
],
"from_schema": "https://w3id.org/linkml/meta",
"see_also": [
"linkml:unique_keys"
"https://linkml.io/linkml/schemas/constraints.html#singular-unique-keys",
"https://linkml.io/linkml/schemas/inlining.html",
"linkml:unique_keys",
"linkml:identifier"
],
"domain": "SlotDefinition",
"slot_uri": "https://w3id.org/linkml/key",
Expand All @@ -3970,12 +4005,13 @@
{
"name": "identifier",
"definition_uri": "https://w3id.org/linkml/identifier",
"description": "True means that the key slot(s) uniquely identifies the elements. There can be at most one identifier or key per container",
"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.",
"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"
"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."
],
"in_subset": [
"SpecificationSubset",
Expand All @@ -3986,7 +4022,10 @@
"from_schema": "https://w3id.org/linkml/meta",
"see_also": [
"https://en.wikipedia.org/wiki/Identifier",
"linkml:unique_keys"
"https://linkml.io/linkml/schemas/constraints.html#unique-keys",
"https://linkml.io/linkml/schemas/inlining.html",
"linkml:unique_keys",
"linkml:key"
],
"aliases": [
"primary key",
Expand Down Expand Up @@ -5504,6 +5543,13 @@
{
"name": "extension_value",
"definition_uri": "https://w3id.org/linkml/extension_value",
"annotations": [
{
"tag": "simple_dict_value",
"value": true,
"@type": "Annotation"
}
],
"description": "the actual annotation",
"from_schema": "https://w3id.org/linkml/extensions",
"imported_from": "linkml:extensions",
Expand Down Expand Up @@ -5649,7 +5695,7 @@
{
"name": "abbreviation",
"definition_uri": "https://w3id.org/linkml/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)",
"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)",
"from_schema": "https://w3id.org/linkml/units",
"imported_from": "linkml:units",
"mappings": [
Expand Down Expand Up @@ -7243,6 +7289,7 @@
"code_set_version",
"pv_formula",
"permissible_values",
"is_open",
"include",
"minus",
"inherits",
Expand All @@ -7268,6 +7315,7 @@
"code_set_version",
"pv_formula",
"permissible_values",
"is_open",
"include",
"minus",
"inherits",
Expand Down Expand Up @@ -7373,6 +7421,7 @@
"code_set_version",
"pv_formula",
"permissible_values",
"is_open",
"include",
"minus",
"inherits",
Expand Down Expand Up @@ -8777,7 +8826,7 @@
{
"name": "UnitOfMeasure",
"definition_uri": "https://w3id.org/linkml/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).",
"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).",
"from_schema": "https://w3id.org/linkml/units",
"imported_from": "linkml:units",
"mappings": [
Expand Down Expand Up @@ -8842,9 +8891,9 @@
],
"metamodel_version": "1.11.0",
"source_file": "meta.yaml",
"source_file_date": "2026-05-05T16:16:44",
"source_file_size": 99888,
"generation_date": "2026-05-05T18:49:57",
"source_file_date": "2026-07-27T16:17:57",
"source_file_size": 102848,
"generation_date": "2026-07-27T16:31:11",
"@type": "SchemaDefinition",
"@context": [
"staging/jsonld/meta.context.jsonld",
Expand Down
Loading
Loading