nmdc-schema 11.12.0rc2__py3-none-any.whl → 11.12.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- nmdc_schema/__init__.py +1 -0
- nmdc_schema/migration_recursion.py +2 -0
- nmdc_schema/migrators/cli/run_migrator.py +10 -14
- nmdc_schema/migrators/helpers.py +24 -0
- nmdc_schema/migrators/migrator_from_11_11_0_to_11_12_0.py +35 -0
- nmdc_schema/migrators/partials/migrator_from_11_11_0_to_11_12_0/__init__.py +28 -0
- nmdc_schema/migrators/partials/migrator_from_11_11_0_to_11_12_0/migrator_from_11_11_0_to_11_12_0_part_1.py +187 -0
- nmdc_schema/migrators/partials/migrator_from_11_11_0_to_11_12_0/migrator_from_11_11_0_to_11_12_0_part_2.py +113 -0
- nmdc_schema/nmdc-pydantic.py +194 -12
- nmdc_schema/nmdc.py +149 -7
- nmdc_schema/nmdc.schema.json +148 -4
- nmdc_schema/nmdc_materialized_patterns.json +291 -51
- nmdc_schema/nmdc_materialized_patterns.schema.json +148 -4
- nmdc_schema/nmdc_materialized_patterns.yaml +243 -41
- nmdc_schema/nmdc_schema_validation_plugin.py +103 -0
- {nmdc_schema-11.12.0rc2.dist-info → nmdc_schema-11.12.1.dist-info}/METADATA +1 -1
- {nmdc_schema-11.12.0rc2.dist-info → nmdc_schema-11.12.1.dist-info}/RECORD +20 -15
- {nmdc_schema-11.12.0rc2.dist-info → nmdc_schema-11.12.1.dist-info}/entry_points.txt +0 -1
- {nmdc_schema-11.12.0rc2.dist-info → nmdc_schema-11.12.1.dist-info}/WHEEL +0 -0
- {nmdc_schema-11.12.0rc2.dist-info → nmdc_schema-11.12.1.dist-info}/licenses/LICENSE +0 -0
nmdc_schema/nmdc-pydantic.py
CHANGED
|
@@ -27,7 +27,7 @@ from pydantic import (
|
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
metamodel_version = "None"
|
|
30
|
-
version = "11.12.
|
|
30
|
+
version = "11.12.1"
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
class ConfiguredBaseModel(BaseModel):
|
|
@@ -3330,6 +3330,42 @@ class FailureWhereEnum(str, Enum):
|
|
|
3330
3330
|
"""
|
|
3331
3331
|
|
|
3332
3332
|
|
|
3333
|
+
class ProtocolForEnum(str, Enum):
|
|
3334
|
+
"""
|
|
3335
|
+
The permitted values for describing the type of planned process that a protocol describes.
|
|
3336
|
+
"""
|
|
3337
|
+
AnnotatingWorkflow = "AnnotatingWorkflow"
|
|
3338
|
+
ChemicalConversionProcess = "ChemicalConversionProcess"
|
|
3339
|
+
ChromatographicSeparationProcess = "ChromatographicSeparationProcess"
|
|
3340
|
+
CollectingBiosamplesFromSite = "CollectingBiosamplesFromSite"
|
|
3341
|
+
DataEmitterProcess = "DataEmitterProcess"
|
|
3342
|
+
DataGeneration = "DataGeneration"
|
|
3343
|
+
DissolvingProcess = "DissolvingProcess"
|
|
3344
|
+
Extraction = "Extraction"
|
|
3345
|
+
FiltrationProcess = "FiltrationProcess"
|
|
3346
|
+
LibraryPreparation = "LibraryPreparation"
|
|
3347
|
+
MagsAnalysis = "MagsAnalysis"
|
|
3348
|
+
MassSpectrometry = "MassSpectrometry"
|
|
3349
|
+
MaterialProcessing = "MaterialProcessing"
|
|
3350
|
+
MetabolomicsAnalysis = "MetabolomicsAnalysis"
|
|
3351
|
+
MetagenomeAnnotation = "MetagenomeAnnotation"
|
|
3352
|
+
MetagenomeAssembly = "MetagenomeAssembly"
|
|
3353
|
+
MetaproteomicsAnalysis = "MetaproteomicsAnalysis"
|
|
3354
|
+
MetatranscriptomeAnnotation = "MetatranscriptomeAnnotation"
|
|
3355
|
+
MetatranscriptomeAssembly = "MetatranscriptomeAssembly"
|
|
3356
|
+
MetatranscriptomeExpressionAnalysis = "MetatranscriptomeExpressionAnalysis"
|
|
3357
|
+
MixingProcess = "MixingProcess"
|
|
3358
|
+
NomAnalysis = "NomAnalysis"
|
|
3359
|
+
NucleotideSequencing = "NucleotideSequencing"
|
|
3360
|
+
PlannedProcess = "PlannedProcess"
|
|
3361
|
+
Pooling = "Pooling"
|
|
3362
|
+
ReadBasedTaxonomyAnalysis = "ReadBasedTaxonomyAnalysis"
|
|
3363
|
+
ReadQcAnalysis = "ReadQcAnalysis"
|
|
3364
|
+
StorageProcess = "StorageProcess"
|
|
3365
|
+
SubSamplingProcess = "SubSamplingProcess"
|
|
3366
|
+
WorkflowExecution = "WorkflowExecution"
|
|
3367
|
+
|
|
3368
|
+
|
|
3333
3369
|
class SampleTypeEnum(str, Enum):
|
|
3334
3370
|
soil = "soil"
|
|
3335
3371
|
soil___water_extract = "soil - water extract"
|
|
@@ -3711,7 +3747,7 @@ class PortionOfSubstance(ConfiguredBaseModel):
|
|
|
3711
3747
|
|
|
3712
3748
|
final_concentration: Optional[QuantityValue] = Field(default=None, description="""When solutions A (containing substance X) and B are combined together, this slot captures the concentration of X in the combination""", json_schema_extra = { "linkml_meta": {'alias': 'final_concentration',
|
|
3713
3749
|
'annotations': {'storage_units': {'tag': 'storage_units',
|
|
3714
|
-
'value': '%|mmol/L|umol/L'}},
|
|
3750
|
+
'value': '%|mmol/L|umol/L|mg/L|g/L'}},
|
|
3715
3751
|
'domain_of': ['PortionOfSubstance'],
|
|
3716
3752
|
'is_a': 'concentration'} })
|
|
3717
3753
|
mass: Optional[QuantityValue] = Field(default=None, title="mass", description="""A physical quality that inheres in a bearer by virtue of the proportion of the bearer's amount of matter.""", json_schema_extra = { "linkml_meta": {'alias': 'mass',
|
|
@@ -4122,20 +4158,22 @@ class QuantityValue(AttributeValue):
|
|
|
4122
4158
|
'syntax {number} {unit}',
|
|
4123
4159
|
'name': 'has_raw_value'},
|
|
4124
4160
|
'has_unit': {'description': 'The unit of the quantity',
|
|
4125
|
-
'name': 'has_unit'
|
|
4161
|
+
'name': 'has_unit',
|
|
4162
|
+
'range': 'UnitEnum',
|
|
4163
|
+
'required': True}}})
|
|
4126
4164
|
|
|
4127
4165
|
has_maximum_numeric_value: Optional[Decimal] = Field(default=None, description="""The maximum value part, expressed as number, of the quantity value when the value covers a range.""", json_schema_extra = { "linkml_meta": {'alias': 'has_maximum_numeric_value',
|
|
4128
|
-
'domain_of': ['QuantityValue'],
|
|
4166
|
+
'domain_of': ['QuantityValue', 'PropertyAssertion'],
|
|
4129
4167
|
'is_a': 'has_numeric_value'} })
|
|
4130
4168
|
has_minimum_numeric_value: Optional[Decimal] = Field(default=None, description="""The minimum value part, expressed as number, of the quantity value when the value covers a range.""", json_schema_extra = { "linkml_meta": {'alias': 'has_minimum_numeric_value',
|
|
4131
|
-
'domain_of': ['QuantityValue'],
|
|
4169
|
+
'domain_of': ['QuantityValue', 'PropertyAssertion'],
|
|
4132
4170
|
'is_a': 'has_numeric_value'} })
|
|
4133
4171
|
has_numeric_value: Optional[Decimal] = Field(default=None, description="""The number part of the quantity""", json_schema_extra = { "linkml_meta": {'alias': 'has_numeric_value',
|
|
4134
|
-
'domain_of': ['QuantityValue'],
|
|
4172
|
+
'domain_of': ['QuantityValue', 'PropertyAssertion'],
|
|
4135
4173
|
'mappings': ['qud:quantityValue', 'schema:value']} })
|
|
4136
4174
|
has_unit: UnitEnum = Field(default=..., description="""The unit of the quantity""", json_schema_extra = { "linkml_meta": {'alias': 'has_unit',
|
|
4137
4175
|
'aliases': ['scale'],
|
|
4138
|
-
'domain_of': ['QuantityValue'],
|
|
4176
|
+
'domain_of': ['QuantityValue', 'PropertyAssertion'],
|
|
4139
4177
|
'mappings': ['qud:unit', 'schema:unitCode']} })
|
|
4140
4178
|
has_raw_value: Optional[str] = Field(default=None, description="""Unnormalized atomic string representation, should in syntax {number} {unit}""", json_schema_extra = { "linkml_meta": {'alias': 'has_raw_value', 'domain_of': ['AttributeValue']} })
|
|
4141
4179
|
type: Literal["https://w3id.org/nmdc/QuantityValue","nmdc:QuantityValue"] = Field(default="nmdc:QuantityValue", description="""the class_uri of the class that has been instantiated""", json_schema_extra = { "linkml_meta": {'alias': 'type',
|
|
@@ -4543,6 +4581,135 @@ class GeolocationValue(AttributeValue):
|
|
|
4543
4581
|
'predicate': 'NARROW_SYNONYM'}}} })
|
|
4544
4582
|
|
|
4545
4583
|
|
|
4584
|
+
class PropertyAssertion(AttributeValue):
|
|
4585
|
+
"""
|
|
4586
|
+
A structured record of data that doesn't fit nicely within the constraints of other NMDC AttributeValues. Uses primitive ranges only.
|
|
4587
|
+
"""
|
|
4588
|
+
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'class_uri': 'nmdc:PropertyAssertion',
|
|
4589
|
+
'comments': ['This class enables flexible metadata capture for properties '
|
|
4590
|
+
"that don't align with existing, policy-governed slots in NMDC "
|
|
4591
|
+
'schema.',
|
|
4592
|
+
'Interoperability note: This approach is aligned with the '
|
|
4593
|
+
"BERtron schema's 'properties' slot pattern (see "
|
|
4594
|
+
'https://github.com/ber-data/bertron-schema), which uses any_of '
|
|
4595
|
+
"to support both TextValue and QuantityValue ranges. NMDC's "
|
|
4596
|
+
'PropertyAssertion provides a more granular approach by using '
|
|
4597
|
+
'primitive types with optional semantic annotations, enabling '
|
|
4598
|
+
'better validation while maintaining flexibility for diverse '
|
|
4599
|
+
'metadata types.',
|
|
4600
|
+
'PropertyAssertion supports both categorical values (via '
|
|
4601
|
+
'has_value_term_id) and numeric values (via has_numeric_value '
|
|
4602
|
+
'with optional min/max ranges), along with temporal '
|
|
4603
|
+
'(has_datetime_value) and boolean (has_boolean_value) data '
|
|
4604
|
+
'types.'],
|
|
4605
|
+
'examples': [{'description': "Data provided from submission that doesn't "
|
|
4606
|
+
'conform to required abs_air_humidity units',
|
|
4607
|
+
'object': {'has_attribute_id': 'MIXS:0000122',
|
|
4608
|
+
'has_attribute_label': 'absolute air humidity',
|
|
4609
|
+
'has_numeric_value': 50,
|
|
4610
|
+
'has_raw_value': '50 kPa',
|
|
4611
|
+
'has_unit': 'kPa',
|
|
4612
|
+
'type': 'nmdc:PropertyAssertion'}},
|
|
4613
|
+
{'description': "Data provided from submission that doesn't "
|
|
4614
|
+
'conform to required UCUM unit',
|
|
4615
|
+
'object': {'has_attribute_id': 'MIXS:0000119',
|
|
4616
|
+
'has_attribute_label': 'dissolved oxygen',
|
|
4617
|
+
'has_numeric_value': 5.5,
|
|
4618
|
+
'has_raw_value': '5.5 mL/L',
|
|
4619
|
+
'has_unit': 'mL/L',
|
|
4620
|
+
'type': 'nmdc:PropertyAssertion'}},
|
|
4621
|
+
{'description': 'Unit provided is invalid for UCUM and standard',
|
|
4622
|
+
'object': {'has_attribute_id': 'MIXS:0000112',
|
|
4623
|
+
'has_attribute_label': 'solar irradiance',
|
|
4624
|
+
'has_numeric_value': 250,
|
|
4625
|
+
'has_raw_value': '250 W/m2',
|
|
4626
|
+
'has_unit': 'W/m2',
|
|
4627
|
+
'type': 'nmdc:PropertyAssertion'}}],
|
|
4628
|
+
'from_schema': 'https://w3id.org/nmdc/nmdc',
|
|
4629
|
+
'slot_usage': {'has_raw_value': {'description': 'Original contributor string '
|
|
4630
|
+
'representation (unparsed)',
|
|
4631
|
+
'name': 'has_raw_value',
|
|
4632
|
+
'required': True},
|
|
4633
|
+
'has_unit': {'description': 'UCUM unit code (required only '
|
|
4634
|
+
'when numeric value is present)',
|
|
4635
|
+
'name': 'has_unit',
|
|
4636
|
+
'required': False}}})
|
|
4637
|
+
|
|
4638
|
+
has_attribute_label: Optional[str] = Field(default=None, description="""Human-readable label for the property (e.g., MIxS label, ENVO term label).""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute_label',
|
|
4639
|
+
'comments': ['This provides a human-friendly name for the asserted property. '
|
|
4640
|
+
'For example, "bicarbonate ion concentration" or "total '
|
|
4641
|
+
'phosphorus". The label helps with readability and data '
|
|
4642
|
+
'discovery.'],
|
|
4643
|
+
'domain_of': ['PropertyAssertion']} })
|
|
4644
|
+
has_attribute_id: Optional[str] = Field(default=None, description="""CURIE or IRI for the property (MIxS slot, NMDC slot, ENVO/OBI term, etc.).""", json_schema_extra = { "linkml_meta": {'alias': 'has_attribute_id',
|
|
4645
|
+
'comments': ['This provides a resolvable identifier for the property being '
|
|
4646
|
+
'asserted. Examples include MIXS:0000117 for total phosphorus, '
|
|
4647
|
+
'or ENVO:01001357 for bicarbonate ion concentration.',
|
|
4648
|
+
'Prefer using standard ontology terms (ENVO, PATO, OBI, etc.) or '
|
|
4649
|
+
'MIxS identifiers when available to enhance interoperability.'],
|
|
4650
|
+
'domain_of': ['PropertyAssertion']} })
|
|
4651
|
+
has_quantity_kind_id: Optional[str] = Field(default=None, description="""Optional CURIE or IRI for the physical quantity kind (e.g., qudt:QuantityKind).""", json_schema_extra = { "linkml_meta": {'alias': 'has_quantity_kind_id',
|
|
4652
|
+
'comments': ['This slot enables precise semantic description of what physical '
|
|
4653
|
+
'quantity is being measured, independent of the specific units '
|
|
4654
|
+
'used. For example, qudt:MassConcentration or qudt:Temperature.',
|
|
4655
|
+
'Using quantity kind identifiers from QUDT or similar '
|
|
4656
|
+
'vocabularies improves data integration and enables automated '
|
|
4657
|
+
'unit conversion.'],
|
|
4658
|
+
'domain_of': ['PropertyAssertion']} })
|
|
4659
|
+
has_value_term_id: Optional[str] = Field(default=None, description="""CURIE or IRI for categorical values (ENVO, PATO, METPO, etc.).""", json_schema_extra = { "linkml_meta": {'alias': 'has_value_term_id',
|
|
4660
|
+
'comments': ['Use this slot when the value of the property is a controlled '
|
|
4661
|
+
'vocabulary term rather than a numeric or free-text value. For '
|
|
4662
|
+
'example, ENVO:00002297 for "desert ecosystem" or PATO:0001199 '
|
|
4663
|
+
'for "dry".'],
|
|
4664
|
+
'domain_of': ['PropertyAssertion']} })
|
|
4665
|
+
has_boolean_value: Optional[bool] = Field(default=None, description="""Links a quantity value to a boolean""", json_schema_extra = { "linkml_meta": {'alias': 'has_boolean_value', 'domain_of': ['PropertyAssertion']} })
|
|
4666
|
+
has_datetime_value: Optional[str] = Field(default=None, description="""Date-time value for the property in ISO-8601 format.""", json_schema_extra = { "linkml_meta": {'alias': 'has_datetime_value',
|
|
4667
|
+
'comments': ['Use this slot for temporal properties. The value should follow '
|
|
4668
|
+
'ISO-8601 format (e.g., "2025-06-12T14:30:00Z").'],
|
|
4669
|
+
'domain_of': ['PropertyAssertion']} })
|
|
4670
|
+
has_numeric_value: Optional[Decimal] = Field(default=None, description="""Links a quantity value to a number""", json_schema_extra = { "linkml_meta": {'alias': 'has_numeric_value',
|
|
4671
|
+
'domain_of': ['QuantityValue', 'PropertyAssertion'],
|
|
4672
|
+
'mappings': ['qud:quantityValue', 'schema:value']} })
|
|
4673
|
+
has_minimum_numeric_value: Optional[Decimal] = Field(default=None, description="""The minimum value part, expressed as number, of the quantity value when the value covers a range.""", json_schema_extra = { "linkml_meta": {'alias': 'has_minimum_numeric_value',
|
|
4674
|
+
'domain_of': ['QuantityValue', 'PropertyAssertion'],
|
|
4675
|
+
'is_a': 'has_numeric_value'} })
|
|
4676
|
+
has_maximum_numeric_value: Optional[Decimal] = Field(default=None, description="""The maximum value part, expressed as number, of the quantity value when the value covers a range.""", json_schema_extra = { "linkml_meta": {'alias': 'has_maximum_numeric_value',
|
|
4677
|
+
'domain_of': ['QuantityValue', 'PropertyAssertion'],
|
|
4678
|
+
'is_a': 'has_numeric_value'} })
|
|
4679
|
+
has_unit: Optional[str] = Field(default=None, description="""UCUM unit code (required only when numeric value is present)""", json_schema_extra = { "linkml_meta": {'alias': 'has_unit',
|
|
4680
|
+
'aliases': ['scale'],
|
|
4681
|
+
'domain_of': ['QuantityValue', 'PropertyAssertion'],
|
|
4682
|
+
'mappings': ['qud:unit', 'schema:unitCode']} })
|
|
4683
|
+
has_raw_value: str = Field(default=..., description="""Original contributor string representation (unparsed)""", json_schema_extra = { "linkml_meta": {'alias': 'has_raw_value', 'domain_of': ['AttributeValue']} })
|
|
4684
|
+
type: Literal["https://w3id.org/nmdc/PropertyAssertion","nmdc:PropertyAssertion"] = Field(default="nmdc:PropertyAssertion", description="""the class_uri of the class that has been instantiated""", json_schema_extra = { "linkml_meta": {'alias': 'type',
|
|
4685
|
+
'designates_type': True,
|
|
4686
|
+
'domain_of': ['EukEval',
|
|
4687
|
+
'FunctionalAnnotationAggMember',
|
|
4688
|
+
'MobilePhaseSegment',
|
|
4689
|
+
'PortionOfSubstance',
|
|
4690
|
+
'MagBin',
|
|
4691
|
+
'MetaboliteIdentification',
|
|
4692
|
+
'GenomeFeature',
|
|
4693
|
+
'FunctionalAnnotation',
|
|
4694
|
+
'AttributeValue',
|
|
4695
|
+
'NamedThing',
|
|
4696
|
+
'OntologyRelation',
|
|
4697
|
+
'FailureCategorization',
|
|
4698
|
+
'Protocol',
|
|
4699
|
+
'CreditAssociation',
|
|
4700
|
+
'Doi'],
|
|
4701
|
+
'examples': [{'value': 'nmdc:Biosample'}, {'value': 'nmdc:Study'}],
|
|
4702
|
+
'notes': ['makes it easier to read example data files',
|
|
4703
|
+
'required for polymorphic MongoDB collections'],
|
|
4704
|
+
'see_also': ['https://github.com/microbiomedata/nmdc-schema/issues/1048',
|
|
4705
|
+
'https://github.com/microbiomedata/nmdc-schema/issues/1233',
|
|
4706
|
+
'https://github.com/microbiomedata/nmdc-schema/issues/248'],
|
|
4707
|
+
'slot_uri': 'rdf:type',
|
|
4708
|
+
'structured_aliases': {'workflow_execution_class': {'contexts': ['https://bitbucket.org/berkeleylab/jgi-jat/macros/nmdc_metadata.yaml'],
|
|
4709
|
+
'literal_form': 'workflow_execution_class',
|
|
4710
|
+
'predicate': 'NARROW_SYNONYM'}}} })
|
|
4711
|
+
|
|
4712
|
+
|
|
4546
4713
|
class NamedThing(ConfiguredBaseModel):
|
|
4547
4714
|
"""
|
|
4548
4715
|
a databased entity or concept/class
|
|
@@ -8777,7 +8944,7 @@ class Biosample(Sample):
|
|
|
8777
8944
|
'slot_uri': 'MIXS:0000570',
|
|
8778
8945
|
'string_serialization': '{text};{float} '
|
|
8779
8946
|
'{unit};{Rn/start_time/end_time/duration}'} })
|
|
8780
|
-
misc_param: Optional[list[
|
|
8947
|
+
misc_param: Optional[list[PropertyAssertion]] = Field(default=None, title="miscellaneous parameter", description="""Structured miscellaneous property assertions for this Biosample. Use when a value cannot cleanly fit an existing, policy-governed slot.""", json_schema_extra = { "linkml_meta": {'alias': 'misc_param',
|
|
8781
8948
|
'aliases': ['miscellaneous parameter'],
|
|
8782
8949
|
'annotations': {'expected_value': {'tag': 'expected_value',
|
|
8783
8950
|
'value': 'parameter name;measurement '
|
|
@@ -8788,7 +8955,8 @@ class Biosample(Sample):
|
|
|
8788
8955
|
'kilogram'}],
|
|
8789
8956
|
'is_a': 'core field',
|
|
8790
8957
|
'slot_uri': 'MIXS:0000752',
|
|
8791
|
-
'string_serialization': '{text};{float} {unit}'
|
|
8958
|
+
'string_serialization': '{text};{float} {unit}',
|
|
8959
|
+
'todos': ['This slot should not be available in the submission portal.']} })
|
|
8792
8960
|
n_alkanes: Optional[list[TextValue]] = Field(default=None, title="n-alkanes", description="""Concentration of n-alkanes; can include multiple n-alkanes""", json_schema_extra = { "linkml_meta": {'alias': 'n_alkanes',
|
|
8793
8961
|
'aliases': ['n-alkanes'],
|
|
8794
8962
|
'annotations': {'expected_value': {'tag': 'expected_value',
|
|
@@ -11848,7 +12016,7 @@ class Biosample(Sample):
|
|
|
11848
12016
|
analysis_type: Optional[list[AnalysisTypeEnum]] = Field(default=None, title="analysis/data type", description="""Select all the data types associated or available for this biosample""", json_schema_extra = { "linkml_meta": {'alias': 'analysis_type',
|
|
11849
12017
|
'comments': ['MIxS:investigation_type was included as a `see_also` but that '
|
|
11850
12018
|
"term doesn't resolve any more"],
|
|
11851
|
-
'domain_of': ['Biosample'],
|
|
12019
|
+
'domain_of': ['Biosample', 'Protocol'],
|
|
11852
12020
|
'examples': [{'value': 'metagenomics; metabolomics; metaproteomics'}],
|
|
11853
12021
|
'rank': 3,
|
|
11854
12022
|
'recommended': True,
|
|
@@ -12596,7 +12764,7 @@ class FieldResearchSite(Site):
|
|
|
12596
12764
|
|
|
12597
12765
|
class Instrument(MaterialEntity):
|
|
12598
12766
|
"""
|
|
12599
|
-
A material entity that is designed to perform a function in a scientific investigation, but is not a reagent.
|
|
12767
|
+
A material entity that is designed to perform a function in a scientific investigation, but is not a reagent. This class models the make and model of the instrument, not the specific instance of the instrument.
|
|
12600
12768
|
"""
|
|
12601
12769
|
linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'aliases': ['device'],
|
|
12602
12770
|
'class_uri': 'nmdc:Instrument',
|
|
@@ -12605,7 +12773,11 @@ class Instrument(MaterialEntity):
|
|
|
12605
12773
|
'slot_usage': {'id': {'name': 'id',
|
|
12606
12774
|
'pattern': '^(nmdc):inst-([0-9][a-z]{0,6}[0-9])-([A-Za-z0-9]{1,})$',
|
|
12607
12775
|
'structured_pattern': {'interpolated': True,
|
|
12608
|
-
'syntax': '{id_nmdc_prefix}:inst-{id_shoulder}-{id_blade}$'}}}
|
|
12776
|
+
'syntax': '{id_nmdc_prefix}:inst-{id_shoulder}-{id_blade}$'}}},
|
|
12777
|
+
'unique_keys': {'main': {'description': 'A unique instrument is defined by '
|
|
12778
|
+
'its vendor and model.',
|
|
12779
|
+
'unique_key_name': 'main',
|
|
12780
|
+
'unique_key_slots': ['vendor', 'model']}}})
|
|
12609
12781
|
|
|
12610
12782
|
vendor: Optional[InstrumentVendorEnum] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'vendor', 'domain_of': ['Instrument']} })
|
|
12611
12783
|
model: Optional[InstrumentModelEnum] = Field(default=None, json_schema_extra = { "linkml_meta": {'alias': 'model', 'domain_of': ['Instrument']} })
|
|
@@ -15209,6 +15381,15 @@ class Protocol(ConfiguredBaseModel):
|
|
|
15209
15381
|
description: Optional[str] = Field(default=None, description="""a human-readable description of a thing""", json_schema_extra = { "linkml_meta": {'alias': 'description',
|
|
15210
15382
|
'domain_of': ['ImageValue', 'NamedThing', 'Protocol'],
|
|
15211
15383
|
'slot_uri': 'dcterms:description'} })
|
|
15384
|
+
protocol_for: Optional[ProtocolForEnum] = Field(default=None, description="""The type of planned process that the protocol describes.""", json_schema_extra = { "linkml_meta": {'alias': 'protocol_for', 'domain_of': ['Protocol']} })
|
|
15385
|
+
analysis_type: Optional[list[AnalysisTypeEnum]] = Field(default=None, title="analysis/data type", description="""Select all the data types associated or available for this biosample""", json_schema_extra = { "linkml_meta": {'alias': 'analysis_type',
|
|
15386
|
+
'comments': ['MIxS:investigation_type was included as a `see_also` but that '
|
|
15387
|
+
"term doesn't resolve any more"],
|
|
15388
|
+
'domain_of': ['Biosample', 'Protocol'],
|
|
15389
|
+
'examples': [{'value': 'metagenomics; metabolomics; metaproteomics'}],
|
|
15390
|
+
'rank': 3,
|
|
15391
|
+
'recommended': True,
|
|
15392
|
+
'slot_group': 'Sample ID'} })
|
|
15212
15393
|
|
|
15213
15394
|
|
|
15214
15395
|
class CreditAssociation(ConfiguredBaseModel):
|
|
@@ -21054,6 +21235,7 @@ TimestampValue.model_rebuild()
|
|
|
21054
21235
|
ControlledTermValue.model_rebuild()
|
|
21055
21236
|
ControlledIdentifiedTermValue.model_rebuild()
|
|
21056
21237
|
GeolocationValue.model_rebuild()
|
|
21238
|
+
PropertyAssertion.model_rebuild()
|
|
21057
21239
|
NamedThing.model_rebuild()
|
|
21058
21240
|
GeneProduct.model_rebuild()
|
|
21059
21241
|
OntologyClass.model_rebuild()
|
nmdc_schema/nmdc.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Auto generated from nmdc.yaml by pythongen.py version: 0.0.1
|
|
2
|
-
# Generation date: 2025-10-
|
|
2
|
+
# Generation date: 2025-10-09T18:05:09
|
|
3
3
|
# Schema: NMDC
|
|
4
4
|
#
|
|
5
5
|
# id: https://w3id.org/nmdc/nmdc
|
|
@@ -60,7 +60,7 @@ from linkml_runtime.linkml_model.types import Boolean, Decimal, Double, Float, I
|
|
|
60
60
|
from linkml_runtime.utils.metamodelcore import Bool, Decimal, URIorCURIE
|
|
61
61
|
|
|
62
62
|
metamodel_version = "1.7.0"
|
|
63
|
-
version = "11.12.
|
|
63
|
+
version = "11.12.1"
|
|
64
64
|
|
|
65
65
|
# Namespaces
|
|
66
66
|
BFO = CurieNamespace('BFO', 'http://purl.obolibrary.org/obo/BFO_')
|
|
@@ -1194,6 +1194,74 @@ class GeolocationValue(AttributeValue):
|
|
|
1194
1194
|
self.type = str(self.class_class_curie)
|
|
1195
1195
|
|
|
1196
1196
|
|
|
1197
|
+
@dataclass(repr=False)
|
|
1198
|
+
class PropertyAssertion(AttributeValue):
|
|
1199
|
+
"""
|
|
1200
|
+
A structured record of data that doesn't fit nicely within the constraints of other NMDC AttributeValues. Uses
|
|
1201
|
+
primitive ranges only.
|
|
1202
|
+
"""
|
|
1203
|
+
_inherited_slots: ClassVar[list[str]] = []
|
|
1204
|
+
|
|
1205
|
+
class_class_uri: ClassVar[URIRef] = NMDC["PropertyAssertion"]
|
|
1206
|
+
class_class_curie: ClassVar[str] = "nmdc:PropertyAssertion"
|
|
1207
|
+
class_name: ClassVar[str] = "PropertyAssertion"
|
|
1208
|
+
class_model_uri: ClassVar[URIRef] = NMDC.PropertyAssertion
|
|
1209
|
+
|
|
1210
|
+
type: Union[str, URIorCURIE] = None
|
|
1211
|
+
has_raw_value: str = None
|
|
1212
|
+
has_attribute_label: Optional[str] = None
|
|
1213
|
+
has_attribute_id: Optional[Union[str, URIorCURIE]] = None
|
|
1214
|
+
has_quantity_kind_id: Optional[Union[str, URIorCURIE]] = None
|
|
1215
|
+
has_value_term_id: Optional[Union[str, URIorCURIE]] = None
|
|
1216
|
+
has_boolean_value: Optional[Union[bool, Bool]] = None
|
|
1217
|
+
has_datetime_value: Optional[str] = None
|
|
1218
|
+
has_numeric_value: Optional[Decimal] = None
|
|
1219
|
+
has_minimum_numeric_value: Optional[Decimal] = None
|
|
1220
|
+
has_maximum_numeric_value: Optional[Decimal] = None
|
|
1221
|
+
has_unit: Optional[str] = None
|
|
1222
|
+
|
|
1223
|
+
def __post_init__(self, *_: str, **kwargs: Any):
|
|
1224
|
+
if self._is_empty(self.has_raw_value):
|
|
1225
|
+
self.MissingRequiredField("has_raw_value")
|
|
1226
|
+
if not isinstance(self.has_raw_value, str):
|
|
1227
|
+
self.has_raw_value = str(self.has_raw_value)
|
|
1228
|
+
|
|
1229
|
+
if self.has_attribute_label is not None and not isinstance(self.has_attribute_label, str):
|
|
1230
|
+
self.has_attribute_label = str(self.has_attribute_label)
|
|
1231
|
+
|
|
1232
|
+
if self.has_attribute_id is not None and not isinstance(self.has_attribute_id, URIorCURIE):
|
|
1233
|
+
self.has_attribute_id = URIorCURIE(self.has_attribute_id)
|
|
1234
|
+
|
|
1235
|
+
if self.has_quantity_kind_id is not None and not isinstance(self.has_quantity_kind_id, URIorCURIE):
|
|
1236
|
+
self.has_quantity_kind_id = URIorCURIE(self.has_quantity_kind_id)
|
|
1237
|
+
|
|
1238
|
+
if self.has_value_term_id is not None and not isinstance(self.has_value_term_id, URIorCURIE):
|
|
1239
|
+
self.has_value_term_id = URIorCURIE(self.has_value_term_id)
|
|
1240
|
+
|
|
1241
|
+
if self.has_boolean_value is not None and not isinstance(self.has_boolean_value, Bool):
|
|
1242
|
+
self.has_boolean_value = Bool(self.has_boolean_value)
|
|
1243
|
+
|
|
1244
|
+
if self.has_datetime_value is not None and not isinstance(self.has_datetime_value, str):
|
|
1245
|
+
self.has_datetime_value = str(self.has_datetime_value)
|
|
1246
|
+
|
|
1247
|
+
if self.has_numeric_value is not None and not isinstance(self.has_numeric_value, Decimal):
|
|
1248
|
+
self.has_numeric_value = Decimal(self.has_numeric_value)
|
|
1249
|
+
|
|
1250
|
+
if self.has_minimum_numeric_value is not None and not isinstance(self.has_minimum_numeric_value, Decimal):
|
|
1251
|
+
self.has_minimum_numeric_value = Decimal(self.has_minimum_numeric_value)
|
|
1252
|
+
|
|
1253
|
+
if self.has_maximum_numeric_value is not None and not isinstance(self.has_maximum_numeric_value, Decimal):
|
|
1254
|
+
self.has_maximum_numeric_value = Decimal(self.has_maximum_numeric_value)
|
|
1255
|
+
|
|
1256
|
+
if self.has_unit is not None and not isinstance(self.has_unit, str):
|
|
1257
|
+
self.has_unit = str(self.has_unit)
|
|
1258
|
+
|
|
1259
|
+
super().__post_init__(**kwargs)
|
|
1260
|
+
if self._is_empty(self.type):
|
|
1261
|
+
self.MissingRequiredField("type")
|
|
1262
|
+
self.type = str(self.class_class_curie)
|
|
1263
|
+
|
|
1264
|
+
|
|
1197
1265
|
@dataclass(repr=False)
|
|
1198
1266
|
class NamedThing(YAMLRoot):
|
|
1199
1267
|
"""
|
|
@@ -1848,7 +1916,7 @@ class Biosample(Sample):
|
|
|
1848
1916
|
micro_biomass_meth: Optional[str] = None
|
|
1849
1917
|
microbial_biomass: Optional[Union[dict, QuantityValue]] = None
|
|
1850
1918
|
mineral_nutr_regm: Optional[Union[Union[dict, TextValue], list[Union[dict, TextValue]]]] = empty_list()
|
|
1851
|
-
misc_param: Optional[Union[Union[dict,
|
|
1919
|
+
misc_param: Optional[Union[Union[dict, PropertyAssertion], list[Union[dict, PropertyAssertion]]]] = empty_list()
|
|
1852
1920
|
n_alkanes: Optional[Union[Union[dict, TextValue], list[Union[dict, TextValue]]]] = empty_list()
|
|
1853
1921
|
nitrate: Optional[Union[dict, QuantityValue]] = None
|
|
1854
1922
|
nitrite: Optional[Union[dict, QuantityValue]] = None
|
|
@@ -2949,7 +3017,7 @@ class Biosample(Sample):
|
|
|
2949
3017
|
|
|
2950
3018
|
if not isinstance(self.misc_param, list):
|
|
2951
3019
|
self.misc_param = [self.misc_param] if self.misc_param is not None else []
|
|
2952
|
-
self.misc_param = [v if isinstance(v,
|
|
3020
|
+
self.misc_param = [v if isinstance(v, PropertyAssertion) else PropertyAssertion(**as_dict(v)) for v in self.misc_param]
|
|
2953
3021
|
|
|
2954
3022
|
if not isinstance(self.n_alkanes, list):
|
|
2955
3023
|
self.n_alkanes = [self.n_alkanes] if self.n_alkanes is not None else []
|
|
@@ -4008,7 +4076,8 @@ class FieldResearchSite(Site):
|
|
|
4008
4076
|
@dataclass(repr=False)
|
|
4009
4077
|
class Instrument(MaterialEntity):
|
|
4010
4078
|
"""
|
|
4011
|
-
A material entity that is designed to perform a function in a scientific investigation, but is not a reagent.
|
|
4079
|
+
A material entity that is designed to perform a function in a scientific investigation, but is not a reagent. This
|
|
4080
|
+
class models the make and model of the instrument, not the specific instance of the instrument.
|
|
4012
4081
|
"""
|
|
4013
4082
|
_inherited_slots: ClassVar[list[str]] = []
|
|
4014
4083
|
|
|
@@ -4736,6 +4805,8 @@ class Protocol(YAMLRoot):
|
|
|
4736
4805
|
url: Optional[str] = None
|
|
4737
4806
|
name: Optional[str] = None
|
|
4738
4807
|
description: Optional[str] = None
|
|
4808
|
+
protocol_for: Optional[Union[str, "ProtocolForEnum"]] = None
|
|
4809
|
+
analysis_type: Optional[Union[Union[str, "AnalysisTypeEnum"], list[Union[str, "AnalysisTypeEnum"]]]] = empty_list()
|
|
4739
4810
|
|
|
4740
4811
|
def __post_init__(self, *_: str, **kwargs: Any):
|
|
4741
4812
|
if self._is_empty(self.type):
|
|
@@ -4751,6 +4822,13 @@ class Protocol(YAMLRoot):
|
|
|
4751
4822
|
if self.description is not None and not isinstance(self.description, str):
|
|
4752
4823
|
self.description = str(self.description)
|
|
4753
4824
|
|
|
4825
|
+
if self.protocol_for is not None and not isinstance(self.protocol_for, ProtocolForEnum):
|
|
4826
|
+
self.protocol_for = ProtocolForEnum(self.protocol_for)
|
|
4827
|
+
|
|
4828
|
+
if not isinstance(self.analysis_type, list):
|
|
4829
|
+
self.analysis_type = [self.analysis_type] if self.analysis_type is not None else []
|
|
4830
|
+
self.analysis_type = [v if isinstance(v, AnalysisTypeEnum) else AnalysisTypeEnum(v) for v in self.analysis_type]
|
|
4831
|
+
|
|
4754
4832
|
super().__post_init__(**kwargs)
|
|
4755
4833
|
|
|
4756
4834
|
|
|
@@ -8295,6 +8373,46 @@ class FailureWhereEnum(EnumDefinitionImpl):
|
|
|
8295
8373
|
description="""The permitted values for describing where in the process, either a lab or analysis workflow step, the failure occurred.""",
|
|
8296
8374
|
)
|
|
8297
8375
|
|
|
8376
|
+
class ProtocolForEnum(EnumDefinitionImpl):
|
|
8377
|
+
"""
|
|
8378
|
+
The permitted values for describing the type of planned process that a protocol describes.
|
|
8379
|
+
"""
|
|
8380
|
+
AnnotatingWorkflow = PermissibleValue(text="AnnotatingWorkflow")
|
|
8381
|
+
ChemicalConversionProcess = PermissibleValue(text="ChemicalConversionProcess")
|
|
8382
|
+
ChromatographicSeparationProcess = PermissibleValue(text="ChromatographicSeparationProcess")
|
|
8383
|
+
CollectingBiosamplesFromSite = PermissibleValue(text="CollectingBiosamplesFromSite")
|
|
8384
|
+
DataEmitterProcess = PermissibleValue(text="DataEmitterProcess")
|
|
8385
|
+
DataGeneration = PermissibleValue(text="DataGeneration")
|
|
8386
|
+
DissolvingProcess = PermissibleValue(text="DissolvingProcess")
|
|
8387
|
+
Extraction = PermissibleValue(text="Extraction")
|
|
8388
|
+
FiltrationProcess = PermissibleValue(text="FiltrationProcess")
|
|
8389
|
+
LibraryPreparation = PermissibleValue(text="LibraryPreparation")
|
|
8390
|
+
MagsAnalysis = PermissibleValue(text="MagsAnalysis")
|
|
8391
|
+
MassSpectrometry = PermissibleValue(text="MassSpectrometry")
|
|
8392
|
+
MaterialProcessing = PermissibleValue(text="MaterialProcessing")
|
|
8393
|
+
MetabolomicsAnalysis = PermissibleValue(text="MetabolomicsAnalysis")
|
|
8394
|
+
MetagenomeAnnotation = PermissibleValue(text="MetagenomeAnnotation")
|
|
8395
|
+
MetagenomeAssembly = PermissibleValue(text="MetagenomeAssembly")
|
|
8396
|
+
MetaproteomicsAnalysis = PermissibleValue(text="MetaproteomicsAnalysis")
|
|
8397
|
+
MetatranscriptomeAnnotation = PermissibleValue(text="MetatranscriptomeAnnotation")
|
|
8398
|
+
MetatranscriptomeAssembly = PermissibleValue(text="MetatranscriptomeAssembly")
|
|
8399
|
+
MetatranscriptomeExpressionAnalysis = PermissibleValue(text="MetatranscriptomeExpressionAnalysis")
|
|
8400
|
+
MixingProcess = PermissibleValue(text="MixingProcess")
|
|
8401
|
+
NomAnalysis = PermissibleValue(text="NomAnalysis")
|
|
8402
|
+
NucleotideSequencing = PermissibleValue(text="NucleotideSequencing")
|
|
8403
|
+
PlannedProcess = PermissibleValue(text="PlannedProcess")
|
|
8404
|
+
Pooling = PermissibleValue(text="Pooling")
|
|
8405
|
+
ReadBasedTaxonomyAnalysis = PermissibleValue(text="ReadBasedTaxonomyAnalysis")
|
|
8406
|
+
ReadQcAnalysis = PermissibleValue(text="ReadQcAnalysis")
|
|
8407
|
+
StorageProcess = PermissibleValue(text="StorageProcess")
|
|
8408
|
+
SubSamplingProcess = PermissibleValue(text="SubSamplingProcess")
|
|
8409
|
+
WorkflowExecution = PermissibleValue(text="WorkflowExecution")
|
|
8410
|
+
|
|
8411
|
+
_defn = EnumDefinition(
|
|
8412
|
+
name="ProtocolForEnum",
|
|
8413
|
+
description="The permitted values for describing the type of planned process that a protocol describes.",
|
|
8414
|
+
)
|
|
8415
|
+
|
|
8298
8416
|
class ArchStrucEnum(EnumDefinitionImpl):
|
|
8299
8417
|
|
|
8300
8418
|
building = PermissibleValue(text="building")
|
|
@@ -10935,7 +11053,7 @@ slots.has_raw_value = Slot(uri=NMDC['attribute_values/has_raw_value'], name="has
|
|
|
10935
11053
|
model_uri=NMDC.has_raw_value, domain=None, range=Optional[str])
|
|
10936
11054
|
|
|
10937
11055
|
slots.has_unit = Slot(uri=NMDC['attribute_values/has_unit'], name="has_unit", curie=NMDC.curie('attribute_values/has_unit'),
|
|
10938
|
-
model_uri=NMDC.has_unit, domain=None, range=
|
|
11056
|
+
model_uri=NMDC.has_unit, domain=None, range=Optional[str], mappings = [QUD["unit"], SCHEMA["unitCode"]])
|
|
10939
11057
|
|
|
10940
11058
|
slots.type = Slot(uri=RDF.type, name="type", curie=RDF.curie('type'),
|
|
10941
11059
|
model_uri=NMDC.type, domain=None, range=Union[str, URIorCURIE])
|
|
@@ -10962,6 +11080,21 @@ slots.websites = Slot(uri=NMDC['attribute_values/websites'], name="websites", cu
|
|
|
10962
11080
|
model_uri=NMDC.websites, domain=None, range=Optional[Union[str, list[str]]],
|
|
10963
11081
|
pattern=re.compile(r'^[Hh][Tt][Tt][Pp][Ss]?:\/\/(?!.*[Dd][Oo][Ii]\.[Oo][Rr][Gg]).*$'))
|
|
10964
11082
|
|
|
11083
|
+
slots.has_attribute_label = Slot(uri=NMDC['attribute_values/has_attribute_label'], name="has_attribute_label", curie=NMDC.curie('attribute_values/has_attribute_label'),
|
|
11084
|
+
model_uri=NMDC.has_attribute_label, domain=None, range=Optional[str])
|
|
11085
|
+
|
|
11086
|
+
slots.has_attribute_id = Slot(uri=NMDC['attribute_values/has_attribute_id'], name="has_attribute_id", curie=NMDC.curie('attribute_values/has_attribute_id'),
|
|
11087
|
+
model_uri=NMDC.has_attribute_id, domain=None, range=Optional[Union[str, URIorCURIE]])
|
|
11088
|
+
|
|
11089
|
+
slots.has_quantity_kind_id = Slot(uri=NMDC['attribute_values/has_quantity_kind_id'], name="has_quantity_kind_id", curie=NMDC.curie('attribute_values/has_quantity_kind_id'),
|
|
11090
|
+
model_uri=NMDC.has_quantity_kind_id, domain=None, range=Optional[Union[str, URIorCURIE]])
|
|
11091
|
+
|
|
11092
|
+
slots.has_value_term_id = Slot(uri=NMDC['attribute_values/has_value_term_id'], name="has_value_term_id", curie=NMDC.curie('attribute_values/has_value_term_id'),
|
|
11093
|
+
model_uri=NMDC.has_value_term_id, domain=None, range=Optional[Union[str, URIorCURIE]])
|
|
11094
|
+
|
|
11095
|
+
slots.has_datetime_value = Slot(uri=NMDC['attribute_values/has_datetime_value'], name="has_datetime_value", curie=NMDC.curie('attribute_values/has_datetime_value'),
|
|
11096
|
+
model_uri=NMDC.has_datetime_value, domain=None, range=Optional[str])
|
|
11097
|
+
|
|
10965
11098
|
slots.processing_institution_workflow_metadata = Slot(uri=NMDC.processing_institution_workflow_metadata, name="processing_institution_workflow_metadata", curie=NMDC.curie('processing_institution_workflow_metadata'),
|
|
10966
11099
|
model_uri=NMDC.processing_institution_workflow_metadata, domain=None, range=Optional[str], mappings = [NCIT["C165211"]])
|
|
10967
11100
|
|
|
@@ -11213,6 +11346,9 @@ slots.qc_failure_where = Slot(uri=NMDC['basic_classes/qc_failure_where'], name="
|
|
|
11213
11346
|
slots.qc_failure_what = Slot(uri=NMDC['basic_classes/qc_failure_what'], name="qc_failure_what", curie=NMDC.curie('basic_classes/qc_failure_what'),
|
|
11214
11347
|
model_uri=NMDC.qc_failure_what, domain=None, range=Optional[Union[str, "FailureWhatEnum"]])
|
|
11215
11348
|
|
|
11349
|
+
slots.protocol_for = Slot(uri=NMDC['basic_classes/protocol_for'], name="protocol_for", curie=NMDC.curie('basic_classes/protocol_for'),
|
|
11350
|
+
model_uri=NMDC.protocol_for, domain=None, range=Optional[Union[str, "ProtocolForEnum"]])
|
|
11351
|
+
|
|
11216
11352
|
slots.emsl_store_temp = Slot(uri=NMDC.emsl_store_temp, name="emsl_store_temp", curie=NMDC.curie('emsl_store_temp'),
|
|
11217
11353
|
model_uri=NMDC.emsl_store_temp, domain=None, range=Optional[str])
|
|
11218
11354
|
|
|
@@ -12146,7 +12282,7 @@ slots.mineral_nutr_regm = Slot(uri=MIXS['0000570'], name="mineral_nutr_regm", cu
|
|
|
12146
12282
|
model_uri=NMDC.mineral_nutr_regm, domain=None, range=Optional[Union[Union[dict, TextValue], list[Union[dict, TextValue]]]])
|
|
12147
12283
|
|
|
12148
12284
|
slots.misc_param = Slot(uri=MIXS['0000752'], name="misc_param", curie=MIXS.curie('0000752'),
|
|
12149
|
-
model_uri=NMDC.misc_param, domain=None, range=Optional[Union[Union[dict,
|
|
12285
|
+
model_uri=NMDC.misc_param, domain=None, range=Optional[Union[Union[dict, PropertyAssertion], list[Union[dict, PropertyAssertion]]]])
|
|
12150
12286
|
|
|
12151
12287
|
slots.n_alkanes = Slot(uri=MIXS['0000503'], name="n_alkanes", curie=MIXS.curie('0000503'),
|
|
12152
12288
|
model_uri=NMDC.n_alkanes, domain=None, range=Optional[Union[Union[dict, TextValue], list[Union[dict, TextValue]]]])
|
|
@@ -13418,6 +13554,12 @@ slots.GeolocationValue_latitude = Slot(uri=WGS84.lat, name="GeolocationValue_lat
|
|
|
13418
13554
|
slots.GeolocationValue_longitude = Slot(uri=WGS84.long, name="GeolocationValue_longitude", curie=WGS84.curie('long'),
|
|
13419
13555
|
model_uri=NMDC.GeolocationValue_longitude, domain=GeolocationValue, range=float, mappings = [SCHEMA["longitude"]])
|
|
13420
13556
|
|
|
13557
|
+
slots.PropertyAssertion_has_raw_value = Slot(uri=NMDC['attribute_values/has_raw_value'], name="PropertyAssertion_has_raw_value", curie=NMDC.curie('attribute_values/has_raw_value'),
|
|
13558
|
+
model_uri=NMDC.PropertyAssertion_has_raw_value, domain=PropertyAssertion, range=str)
|
|
13559
|
+
|
|
13560
|
+
slots.PropertyAssertion_has_unit = Slot(uri=NMDC['attribute_values/has_unit'], name="PropertyAssertion_has_unit", curie=NMDC.curie('attribute_values/has_unit'),
|
|
13561
|
+
model_uri=NMDC.PropertyAssertion_has_unit, domain=PropertyAssertion, range=Optional[str], mappings = [QUD["unit"], SCHEMA["unitCode"]])
|
|
13562
|
+
|
|
13421
13563
|
slots.OntologyClass_id = Slot(uri=NMDC.id, name="OntologyClass_id", curie=NMDC.curie('id'),
|
|
13422
13564
|
model_uri=NMDC.OntologyClass_id, domain=OntologyClass, range=Union[str, OntologyClassId],
|
|
13423
13565
|
pattern=re.compile(r'^[a-zA-Z0-9][a-zA-Z0-9_\.]+:[a-zA-Z0-9_][a-zA-Z0-9_\-\/\.,]*$'))
|