nmdc-schema 11.12.0rc1__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/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-09-25T19:35:29
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.0rc1"
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, TextValue], list[Union[dict, TextValue]]]] = empty_list()
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, TextValue) else TextValue(**as_dict(v)) for v in self.misc_param]
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
 
@@ -6989,6 +7067,9 @@ class UnitEnum(EnumDefinitionImpl):
6989
7067
  atm = PermissibleValue(
6990
7068
  text="atm",
6991
7069
  description="The Unified Code for Units of Measure (UCUM) representation of atmosphere.")
7070
+ V = PermissibleValue(
7071
+ text="V",
7072
+ description="The Unified Code for Units of Measure (UCUM) representation of volt.")
6992
7073
  mV = PermissibleValue(
6993
7074
  text="mV",
6994
7075
  description="The Unified Code for Units of Measure (UCUM) representation of millivolt.")
@@ -8292,6 +8373,46 @@ class FailureWhereEnum(EnumDefinitionImpl):
8292
8373
  description="""The permitted values for describing where in the process, either a lab or analysis workflow step, the failure occurred.""",
8293
8374
  )
8294
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
+
8295
8416
  class ArchStrucEnum(EnumDefinitionImpl):
8296
8417
 
8297
8418
  building = PermissibleValue(text="building")
@@ -10932,7 +11053,7 @@ slots.has_raw_value = Slot(uri=NMDC['attribute_values/has_raw_value'], name="has
10932
11053
  model_uri=NMDC.has_raw_value, domain=None, range=Optional[str])
10933
11054
 
10934
11055
  slots.has_unit = Slot(uri=NMDC['attribute_values/has_unit'], name="has_unit", curie=NMDC.curie('attribute_values/has_unit'),
10935
- model_uri=NMDC.has_unit, domain=None, range=Union[str, "UnitEnum"], mappings = [QUD["unit"], SCHEMA["unitCode"]])
11056
+ model_uri=NMDC.has_unit, domain=None, range=Optional[str], mappings = [QUD["unit"], SCHEMA["unitCode"]])
10936
11057
 
10937
11058
  slots.type = Slot(uri=RDF.type, name="type", curie=RDF.curie('type'),
10938
11059
  model_uri=NMDC.type, domain=None, range=Union[str, URIorCURIE])
@@ -10959,6 +11080,21 @@ slots.websites = Slot(uri=NMDC['attribute_values/websites'], name="websites", cu
10959
11080
  model_uri=NMDC.websites, domain=None, range=Optional[Union[str, list[str]]],
10960
11081
  pattern=re.compile(r'^[Hh][Tt][Tt][Pp][Ss]?:\/\/(?!.*[Dd][Oo][Ii]\.[Oo][Rr][Gg]).*$'))
10961
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
+
10962
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'),
10963
11099
  model_uri=NMDC.processing_institution_workflow_metadata, domain=None, range=Optional[str], mappings = [NCIT["C165211"]])
10964
11100
 
@@ -11210,6 +11346,9 @@ slots.qc_failure_where = Slot(uri=NMDC['basic_classes/qc_failure_where'], name="
11210
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'),
11211
11347
  model_uri=NMDC.qc_failure_what, domain=None, range=Optional[Union[str, "FailureWhatEnum"]])
11212
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
+
11213
11352
  slots.emsl_store_temp = Slot(uri=NMDC.emsl_store_temp, name="emsl_store_temp", curie=NMDC.curie('emsl_store_temp'),
11214
11353
  model_uri=NMDC.emsl_store_temp, domain=None, range=Optional[str])
11215
11354
 
@@ -12143,7 +12282,7 @@ slots.mineral_nutr_regm = Slot(uri=MIXS['0000570'], name="mineral_nutr_regm", cu
12143
12282
  model_uri=NMDC.mineral_nutr_regm, domain=None, range=Optional[Union[Union[dict, TextValue], list[Union[dict, TextValue]]]])
12144
12283
 
12145
12284
  slots.misc_param = Slot(uri=MIXS['0000752'], name="misc_param", curie=MIXS.curie('0000752'),
12146
- model_uri=NMDC.misc_param, domain=None, range=Optional[Union[Union[dict, TextValue], list[Union[dict, TextValue]]]])
12285
+ model_uri=NMDC.misc_param, domain=None, range=Optional[Union[Union[dict, PropertyAssertion], list[Union[dict, PropertyAssertion]]]])
12147
12286
 
12148
12287
  slots.n_alkanes = Slot(uri=MIXS['0000503'], name="n_alkanes", curie=MIXS.curie('0000503'),
12149
12288
  model_uri=NMDC.n_alkanes, domain=None, range=Optional[Union[Union[dict, TextValue], list[Union[dict, TextValue]]]])
@@ -13318,9 +13457,6 @@ slots.Biosample_al_sat = Slot(uri=MIXS['0000607'], name="Biosample_al_sat", curi
13318
13457
  slots.Biosample_al_sat_meth = Slot(uri=MIXS['0000324'], name="Biosample_al_sat_meth", curie=MIXS.curie('0000324'),
13319
13458
  model_uri=NMDC.Biosample_al_sat_meth, domain=Biosample, range=Optional[Union[dict, TextValue]])
13320
13459
 
13321
- slots.Biosample_annual_precpt = Slot(uri=MIXS['0000644'], name="Biosample_annual_precpt", curie=MIXS.curie('0000644'),
13322
- model_uri=NMDC.Biosample_annual_precpt, domain=Biosample, range=Optional[Union[dict, QuantityValue]])
13323
-
13324
13460
  slots.Biosample_cur_vegetation = Slot(uri=MIXS['0000312'], name="Biosample_cur_vegetation", curie=MIXS.curie('0000312'),
13325
13461
  model_uri=NMDC.Biosample_cur_vegetation, domain=Biosample, range=Optional[Union[dict, TextValue]])
13326
13462
 
@@ -13351,9 +13487,6 @@ slots.Biosample_tot_carb = Slot(uri=MIXS['0000525'], name="Biosample_tot_carb",
13351
13487
  slots.Biosample_tot_nitro_cont_meth = Slot(uri=MIXS['0000338'], name="Biosample_tot_nitro_cont_meth", curie=MIXS.curie('0000338'),
13352
13488
  model_uri=NMDC.Biosample_tot_nitro_cont_meth, domain=Biosample, range=Optional[str])
13353
13489
 
13354
- slots.Biosample_tot_nitro_content = Slot(uri=MIXS['0000530'], name="Biosample_tot_nitro_content", curie=MIXS.curie('0000530'),
13355
- model_uri=NMDC.Biosample_tot_nitro_content, domain=Biosample, range=Optional[Union[dict, QuantityValue]])
13356
-
13357
13490
  slots.Biosample_tot_org_c_meth = Slot(uri=MIXS['0000337'], name="Biosample_tot_org_c_meth", curie=MIXS.curie('0000337'),
13358
13491
  model_uri=NMDC.Biosample_tot_org_c_meth, domain=Biosample, range=Optional[Union[dict, TextValue]])
13359
13492
 
@@ -13421,6 +13554,12 @@ slots.GeolocationValue_latitude = Slot(uri=WGS84.lat, name="GeolocationValue_lat
13421
13554
  slots.GeolocationValue_longitude = Slot(uri=WGS84.long, name="GeolocationValue_longitude", curie=WGS84.curie('long'),
13422
13555
  model_uri=NMDC.GeolocationValue_longitude, domain=GeolocationValue, range=float, mappings = [SCHEMA["longitude"]])
13423
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
+
13424
13563
  slots.OntologyClass_id = Slot(uri=NMDC.id, name="OntologyClass_id", curie=NMDC.curie('id'),
13425
13564
  model_uri=NMDC.OntologyClass_id, domain=OntologyClass, range=Union[str, OntologyClassId],
13426
13565
  pattern=re.compile(r'^[a-zA-Z0-9][a-zA-Z0-9_\.]+:[a-zA-Z0-9_][a-zA-Z0-9_\-\/\.,]*$'))
@@ -2647,9 +2647,9 @@
2647
2647
  ]
2648
2648
  },
2649
2649
  "misc_param": {
2650
- "description": "Any other measurement performed or parameter collected, that is not listed here",
2650
+ "description": "Structured miscellaneous property assertions for this Biosample. Use when a value cannot cleanly fit an existing, policy-governed slot.",
2651
2651
  "items": {
2652
- "$ref": "#/$defs/TextValue"
2652
+ "$ref": "#/$defs/PropertyAssertion"
2653
2653
  },
2654
2654
  "type": [
2655
2655
  "array",
@@ -8515,7 +8515,7 @@
8515
8515
  },
8516
8516
  "Instrument": {
8517
8517
  "additionalProperties": false,
8518
- "description": "A material entity that is designed to perform a function in a scientific investigation, but is not a reagent.",
8518
+ "description": "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.",
8519
8519
  "properties": {
8520
8520
  "alternative_identifiers": {
8521
8521
  "description": "A list of alternative identifiers for the entity.",
@@ -13128,10 +13128,113 @@
13128
13128
  "title": "ProfilePositionEnum",
13129
13129
  "type": "string"
13130
13130
  },
13131
+ "PropertyAssertion": {
13132
+ "additionalProperties": false,
13133
+ "description": "A structured record of data that doesn't fit nicely within the constraints of other NMDC AttributeValues. Uses primitive ranges only.",
13134
+ "properties": {
13135
+ "has_attribute_id": {
13136
+ "description": "CURIE or IRI for the property (MIxS slot, NMDC slot, ENVO/OBI term, etc.).",
13137
+ "type": [
13138
+ "string",
13139
+ "null"
13140
+ ]
13141
+ },
13142
+ "has_attribute_label": {
13143
+ "description": "Human-readable label for the property (e.g., MIxS label, ENVO term label).",
13144
+ "type": [
13145
+ "string",
13146
+ "null"
13147
+ ]
13148
+ },
13149
+ "has_boolean_value": {
13150
+ "description": "Links a quantity value to a boolean",
13151
+ "type": [
13152
+ "boolean",
13153
+ "null"
13154
+ ]
13155
+ },
13156
+ "has_datetime_value": {
13157
+ "description": "Date-time value for the property in ISO-8601 format.",
13158
+ "type": [
13159
+ "string",
13160
+ "null"
13161
+ ]
13162
+ },
13163
+ "has_maximum_numeric_value": {
13164
+ "description": "The maximum value part, expressed as number, of the quantity value when the value covers a range.",
13165
+ "type": [
13166
+ "number",
13167
+ "null"
13168
+ ]
13169
+ },
13170
+ "has_minimum_numeric_value": {
13171
+ "description": "The minimum value part, expressed as number, of the quantity value when the value covers a range.",
13172
+ "type": [
13173
+ "number",
13174
+ "null"
13175
+ ]
13176
+ },
13177
+ "has_numeric_value": {
13178
+ "description": "Links a quantity value to a number",
13179
+ "type": [
13180
+ "number",
13181
+ "null"
13182
+ ]
13183
+ },
13184
+ "has_quantity_kind_id": {
13185
+ "description": "Optional CURIE or IRI for the physical quantity kind (e.g., qudt:QuantityKind).",
13186
+ "type": [
13187
+ "string",
13188
+ "null"
13189
+ ]
13190
+ },
13191
+ "has_raw_value": {
13192
+ "description": "Original contributor string representation (unparsed)",
13193
+ "type": "string"
13194
+ },
13195
+ "has_unit": {
13196
+ "description": "UCUM unit code (required only when numeric value is present)",
13197
+ "type": [
13198
+ "string",
13199
+ "null"
13200
+ ]
13201
+ },
13202
+ "has_value_term_id": {
13203
+ "description": "CURIE or IRI for categorical values (ENVO, PATO, METPO, etc.).",
13204
+ "type": [
13205
+ "string",
13206
+ "null"
13207
+ ]
13208
+ },
13209
+ "type": {
13210
+ "description": "the class_uri of the class that has been instantiated",
13211
+ "enum": [
13212
+ "nmdc:PropertyAssertion"
13213
+ ],
13214
+ "type": "string"
13215
+ }
13216
+ },
13217
+ "required": [
13218
+ "has_raw_value",
13219
+ "type"
13220
+ ],
13221
+ "title": "PropertyAssertion",
13222
+ "type": "object"
13223
+ },
13131
13224
  "Protocol": {
13132
13225
  "additionalProperties": false,
13133
13226
  "description": "",
13134
13227
  "properties": {
13228
+ "analysis_type": {
13229
+ "description": "Select all the data types associated or available for this biosample",
13230
+ "items": {
13231
+ "$ref": "#/$defs/AnalysisTypeEnum"
13232
+ },
13233
+ "type": [
13234
+ "array",
13235
+ "null"
13236
+ ]
13237
+ },
13135
13238
  "description": {
13136
13239
  "description": "a human-readable description of a thing",
13137
13240
  "type": [
@@ -13146,6 +13249,10 @@
13146
13249
  "null"
13147
13250
  ]
13148
13251
  },
13252
+ "protocol_for": {
13253
+ "$ref": "#/$defs/ProtocolForEnum",
13254
+ "description": "The type of planned process that the protocol describes."
13255
+ },
13149
13256
  "type": {
13150
13257
  "description": "the class_uri of the class that has been instantiated",
13151
13258
  "enum": [
@@ -13184,6 +13291,43 @@
13184
13291
  "title": "ProtocolCategoryEnum",
13185
13292
  "type": "string"
13186
13293
  },
13294
+ "ProtocolForEnum": {
13295
+ "description": "The permitted values for describing the type of planned process that a protocol describes.",
13296
+ "enum": [
13297
+ "AnnotatingWorkflow",
13298
+ "ChemicalConversionProcess",
13299
+ "ChromatographicSeparationProcess",
13300
+ "CollectingBiosamplesFromSite",
13301
+ "DataEmitterProcess",
13302
+ "DataGeneration",
13303
+ "DissolvingProcess",
13304
+ "Extraction",
13305
+ "FiltrationProcess",
13306
+ "LibraryPreparation",
13307
+ "MagsAnalysis",
13308
+ "MassSpectrometry",
13309
+ "MaterialProcessing",
13310
+ "MetabolomicsAnalysis",
13311
+ "MetagenomeAnnotation",
13312
+ "MetagenomeAssembly",
13313
+ "MetaproteomicsAnalysis",
13314
+ "MetatranscriptomeAnnotation",
13315
+ "MetatranscriptomeAssembly",
13316
+ "MetatranscriptomeExpressionAnalysis",
13317
+ "MixingProcess",
13318
+ "NomAnalysis",
13319
+ "NucleotideSequencing",
13320
+ "PlannedProcess",
13321
+ "Pooling",
13322
+ "ReadBasedTaxonomyAnalysis",
13323
+ "ReadQcAnalysis",
13324
+ "StorageProcess",
13325
+ "SubSamplingProcess",
13326
+ "WorkflowExecution"
13327
+ ],
13328
+ "title": "ProtocolForEnum",
13329
+ "type": "string"
13330
+ },
13187
13331
  "QuadPosEnum": {
13188
13332
  "description": "",
13189
13333
  "enum": [
@@ -15022,6 +15166,7 @@
15022
15166
  "g/m3",
15023
15167
  "m2",
15024
15168
  "atm",
15169
+ "V",
15025
15170
  "mV",
15026
15171
  "L",
15027
15172
  "um",
@@ -15578,5 +15723,5 @@
15578
15723
  },
15579
15724
  "title": "NMDC",
15580
15725
  "type": "object",
15581
- "version": "11.12.0rc1"
15726
+ "version": "11.12.1"
15582
15727
  }