MIxS schema diff: mixs6.0.0 (2022-03-24) to main / 7.0.0-rc1 (2026-07-28)
Source: assets/diff_results/v6.0.0_to_v7.0.0-rc1/schema_comparison_results.yaml
(old commit 74744ee, new commit 1591e32).
Four years of change. The raw counts (409 new slots, 553 range changes, 287 class renames) overstate the amount of new content and understate a few things that will actually break consumers. What follows sorts them.
The five changes that explain most of the diff
- Every class and enum was renamed to CamelCase. 287 of 287 classes and 125
of 125 enums are renamed, not removed.
MIGS bacteria->MigsBa,soil MIMS->MimsSoil,assembly_qual_enum->AssemblyQualEnum. Nothing about the content of those classes is in this diff (see Caveats). - The
quantity valueclass was deleted and replaced by string plus regex. 173 slots moved fromrange: quantity valuetorange: string, and 178 of them gained the same numeric structured pattern (^{scientific_float}( *- *{scientific_float})? *{text}$). 6 more went tofloat. This, plus similar work elsewhere, accounts for 296 of the 301 pattern changes and all 33 newsettingsentries (scientific_float,unit,termID,text, and so on) that the structured patterns interpolate. - 344 of the 409 "new" slots are generated container slots, not new terms.
Everything ending in
_data(mims_soil_data,migs_ba_air_data, ...) is a slot on the newMixsCompliantDataclass, one per non-abstract class. Only 65 genuinely new terms were added. - "Package" became "Extension". Old subsets
checklistandpackageare gone, replaced by abstract classesChecklistandExtension; thechecklist_package_combinationsubset becamecombination_classes; and the 253 combination-class descriptions were rewritten from "Combinatorial checklist X with environmental package Y" to "MIxS Data that comply with the X checklist and the Y Extension". - Two new checklists (MISIP variants) and one new extension (Ancient). The
60 new classes are: 4 structural (
Checklist,Extension,Ancient,MixsCompliantData),MimarksCMisipplus its 23 extension combinations,MimsMisipplus its 23, and 8Mims*Ancientcombinations. Ancient only combines with MIMS, and only for 8 extensions (host-associated, human-associated, human gut/oral/skin, plant-associated, sediment, soil).
Things that will break or silently change consumers
The term URI base changed. The MIXS prefix went from
https://w3id.org/mixs/terms/ to https://w3id.org/mixs/, and the schema id
from http://w3id.org/mixs to https://w3id.org/mixs. Every slot_uri in the
schema resolves to a different IRI than it did in v6.0.0. This is one line in the
diff and the highest-impact item in it.
Two v6.0.0 checklist descriptions were simply wrong and are now fixed. These are class identity corrections, not wording changes:
| class | v6.0.0 description | v7 description |
|---|---|---|
MIGS plant -> MigsPl |
Minimal Information about a Genome Sequence: plant | ...: plasmid |
MIGS org -> MigsOrg |
...: org | ...: organelle |
MIGS virus -> MigsVi |
...: cultured bacteria/archaea | ...: virus |
MIMARKS specimen -> MimarksC |
Minimal Information about a Marker Specimen | ...Marker Sequence |
MIMARKS survey -> MimarksS |
Minimal Information about a Marker Specimen | ...Marker Sequence |
Anyone who read "MIGS plant" as the plant-genome checklist (rather than plasmid) was using it incorrectly under v6.0.0.
Two slot descriptions reverse the meaning of the field. Both are size fractionation, both flipped which side of the threshold is excluded:
size_frac_low: "Materials larger than the size threshold are excluded" -> "Materials smaller than the size threshold are excluded"size_frac_up: "Refers to the mesh/pore size used to retain the sample. Materials smaller than the threshold are excluded" -> "Mesh or pore size of the device used to retain the sample. Materials larger than the threshold are excluded"
Data recorded against the v6.0.0 wording of these two slots means the opposite of what v7 says it means.
Added
Classes (60) and subsets (4: environment, investigation,
nucleic acid sequence source, sequencing) are described above. The four new
subsets replace four of the six removed grouping slots (environment field,
investigation field, nucleic acid sequence source field, sequencing field).
Slots: 65 new terms (excluding the 344 *_data containers). They cluster
into a small number of themes rather than being scattered:
- Stable isotope probing / isotopolog (14):
isotope,isotopolog,isotopolog_approach,isotopolog_atom_frac,isotopolog_atom_pos,isotopolog_dose,isotopolog_incu_time,isotopolog_label,nucleobase_atom_frac,internal_standard,sip_method, plus the density gradient triogradient_position,gradient_pos_density,gradient_pos_rel_am. - Ancient DNA / palaeo (14):
chrono_age_protocol,chrono_age_remarks,earliest_chrono_age,earliest_chrono_sys,latest_chrono_age,latest_chrono_sys,geological_epoch,cultural_era,stratigraph_context,past_env_broad,past_env_local,palaeopath_status,damage_treatment,host_preserv_state. Matches the newAncientextension. - Permits and provenance (11):
permit_authority,permit_date,permit_id,permit_scope,biocultural_label,prev_pubs,orig_site_name,orig_site_loc,orig_site_lat,orig_site_lon,context_retrieval_date. This is new territory for MIxS: legal and ethical provenance rather than sample measurement. - Library prep / capture detail (11):
lib_gener_technique,lib_mid_desc,lib_polymerase,lib_strandedness,library_name,capt_pcr_cyc_tot,capt_probe_desc,capt_probe_src_taxid,reamp_pcr_cyc_tot,sop_lib_preparation,sop_experimental. - Sample handling identifiers (8):
batch_ids,samp_alt_lab_ids,samp_category,samp_decont_pretreat,samp_dna_conc,samp_preserv_treatm,nucl_acid_extr_date,nucleic_acid_elution_vol. - Remainder (7):
estimated_genome_size,marker_gene_recov,marker_gene_recov_sw,reads_removed,data_preproc_desc,nose_mouth_teeth_throat_disord,urobiom_sex.
Enums (27 new): AeroStrucEnum, BioCulturalLabelEnum, BuiltStrucSetEnum,
CeilStrucEnum, ChronoAgeProtocolEnum, ChronoAgeSysEnum,
DamageTreatmentEnum, FireplaceTypeEnum, GeolEpochEnum,
HostDependenceEnum, InsdcMissingValueEnum, IsotopeEnum,
IsotopologApproachEnum, IsotopologLabelEnum, LibStrandEnum, LibTypeEnum,
MoldVisibilityEnum, SampCategoryEnum, SeasonEnum, SeqQualityCheckEnum,
ShadingDeviceLocEnum, SpaceTypStateEnum, SymLifeCycleTypeEnum,
UrineCollectMethEnum, UrobiomSexEnum, WgaAmpApprEnum, WindowStatusEnum.
InsdcMissingValueEnum is worth noting: it brings the INSDC missing-value
vocabulary into the schema itself.
Prefixes (7 new): NCIT, SO, chrono, dc, schema, shex, xsd.
Settings (33 new): all of them structured-pattern building blocks
(DOI, PMID, URL, scientific_float, unit, termID, termLabel,
text, timestamp, duration, software, lat, lon, ...).
Removed
Classes (2): core and quantity value. Both were structural. core was
the abstract parent holding the field-grouping slots; quantity value was the
value/unit wrapper now replaced by string plus pattern.
Slots (18). Split by why:
- Grouping slots from the deleted
coreclass (6):core field,environment field,investigation field,mixs extension field,nucleic acid sequence source field,sequencing field. Four became subsets;core fieldandmixs extension fieldhave no successor. - Slots of the deleted
quantity valueclass (3):has numeric value,has raw value,has unit. - Genuine term removals (9):
estimated_size,salinity_meth,samp_salinity,soil_depth,soil_text_measure,texture_meth,tot_n_meth,tot_phos,url. See "Possible missed renames" below; several of these look like renames rather than deletions.
Enums (27). Only 3 were folded into a surviving enum
(door_loc_enum, wall_loc_enum, window_loc_enum -> CompassDirections8Enum,
visible only through the slot range changes, not through the rename map). The
other 18 dropped enums became unconstrained text, listed under
"Cardinality and range changes". The remaining 6 (add_recov_method_enum,
assembly_software_enum, compl_score_enum, food_quality_date_enum,
pres_animal_insect_enum, samp_purpose_enum) were not referenced as a slot
range in v6.0.0 and simply disappear.
Prefixes (2): MIGS, mixs.vocab.
Subsets (2): checklist, package (now classes).
Imports (25): every per-package module (agriculture, air, ... water).
v7 is a single schema file.
Renamed
Classes: all 287, mechanically. Package-prefix word order flipped and
CamelCased: soil MIGS bacteria -> MigsBaSoil, hydrocarbon resources-cores
MIUVIG -> MiuvigHydrocarbonResourcesCores. Checklist abbreviations
regularized: MIMARKS specimen -> MimarksC, MIMARKS survey -> MimarksS,
MIGS bacteria -> MigsBa.
Enums: all 125, of which 108 are pure snake_case_enum ->
CamelCaseEnum. The other 17 are real consolidations or retitles:
| collapsed into | from |
|---|---|
DamagedEnum |
ceil_cond_enum, floor_cond_enum, int_wall_cond_enum |
DamagedRupturedEnum |
door_cond_enum, shading_device_cond_enum, window_cond_enum |
CompassDirections8Enum |
ext_wall_orient_enum, ext_window_orient_enum |
GeolAgeEnum |
hcr_geol_age_enum, sr_geol_age_enum |
SoilHorizonEnum |
horizon_enum, soil_horizon_enum |
CeilingWallTextureEnum |
ceil_texture_enum, wall_texture_enum |
plus four retitles: contam_screen_param_enum -> ContamScreenInputEnum,
pred_genome_type_enum -> ViralGenomeTypeEnum (and it gained a description,
"Types of viral genomes based on Baltimore classification"),
single_cell_lysis_appr_enum -> ScLysisApproachEnum, heat_deliv_loc_enum ->
HeatSysDelivMethEnum (questionable, see Notes). Net: 125 old enums to 117 new
names.
Slots: 26 mappings, but only 10 are renames. The other 16 are merges of near-duplicate slots that both existed in v6.0.0. This is the most useful thing in the slot rename map and it does not read as a merge anywhere else in the diff:
| v6.0.0 had both | v7 keeps |
|---|---|
sample_name + samp_name |
samp_name |
samp_collec_method + sample_collec_method + samp_collect_method |
samp_collect_method |
samp_collec_device + samp_collect_device |
samp_collect_device |
samp_stor_dur + samp_store_dur |
samp_store_dur |
samp_stor_loc + samp_store_loc |
samp_store_loc |
samp_stor_temp + samp_store_temp |
samp_store_temp |
assembly_quality + assembly_qual |
assembly_qual |
air particulate matter concentration + air_PM_concen |
air_PM_concen |
Food_Product_type + food_product_type |
food_product_type |
Food_source + food_source |
food_source |
horizon + soil_horizon |
soil_horizon |
microbial_biomass_meth + micro_biomass_meth |
micro_biomass_meth |
non_mineral_nutr_regm + non_min_nutr_regm |
non_min_nutr_regm |
previous_land_use_meth + prev_land_use_meth |
prev_land_use_meth |
tot_car + tot_carb |
tot_carb |
host_family_relation + host_family_relationship |
host_fam_rel |
True renames (10), all abbreviation tightening or prefix fixes:
associated resource -> associated_resource,
host_infra_specific_name -> host_infra_spec_name,
host_infra_specific_rank -> host_infra_spec_rank,
single_cell_lysis_appr -> sc_lysis_approach,
single_cell_lysis_prot -> sc_lysis_method,
texture -> soil_texture,
x_16s_recover -> x16s_recover,
x_16s_recover_software -> x16s_recover_software.
Subsets (1): checklist_package_combination -> combination_classes.
Possible missed renames
This diff shape has no rename_candidates block, so the following are my own
nearest-name matches against the surviving slot set. A maintainer should confirm
each and promote the real ones into the tool's rename map, because right now they
are reported as removals:
| removed | likely successor | confidence |
|---|---|---|
estimated_size |
estimated_genome_size (new) |
high |
texture_meth |
soil_texture_meth (existing) |
high |
soil_text_measure |
soil_texture_meth or soil_texture_class (existing) |
medium |
tot_n_meth |
tot_nitro_cont_meth (existing) |
medium |
tot_phos |
tot_phosp or tot_phosphate (both existing) |
medium |
samp_salinity |
salinity (existing) |
medium |
salinity_meth |
no clear successor | low |
soil_depth |
depth (existing) |
low |
url |
no successor found | low |
Of the removed enums, none has a CamelCase counterpart in the new schema, which
supports reading them as genuine removals rather than missed renames. The three
*_loc_enum cases are the exception: they are real consolidations into
CompassDirections8Enum that the rename map does not record.
Cardinality and range changes
Gained required: true (35 slots), where v6.0.0 had none at the slot level:
abs_air_humidity, add_recov_method, api, basin, build_occup_type,
building_setting, coll_site_geo_feat, collection_date, env_broad_scale,
env_local_scale, env_medium, filter_type, geo_loc_name, hc_produced,
hcr, heat_cool_type, IFSAC_category, indoor_space, iwf, lat_lon,
light_type, occup_density_samp, occup_samp, project_name,
rel_air_humidity, samp_collect_point, samp_name, samp_taxon_id,
samp_type, seq_meth, space_typ_state, sym_life_cycle_type,
typ_occup_density, water_cut. (samp_name is required both under its own
name and as the target of the sample_name merge.)
Became multivalued (11): biotic_regm, env_medium, experimental_factor,
food_dis_point_city, host_spec_range, solar_irradiance, sop,
source_mat_id, ventilation_type, associated_resource (from
associated resource), host_fam_rel (from host_family_relationship).
Stopped being multivalued (5): soil_temp, food_clean_proc,
farm_water_source, food_product_type, photosynt_activ. These narrow what
was previously valid.
Range changes (553 total):
| change | count | note |
|---|---|---|
| enum renamed | 123 | naming only; permissible values not compared |
quantity value -> string |
173 | class deleted; 178 slots gained the numeric pattern |
quantity value -> float |
6 | iwf, animal_am_freq, carb_nitro_ratio, season_humidity, surf_humidity, rel_air_humidity |
string -> absent |
158 | no effect; default_range: string is now declared schema-wide |
date -> datetime |
17 | collection_date, cult_isol_date, date_extr_weath, date_last_rain, douche, extreme_event, fertilizer_date, fire, flooding, hrt, iw_bt_date_well, last_clean, menarche, menopause, pregnancy, prod_start_date, cons_purch_date |
double -> float |
9 | all pH slots plus occupancy density |
integer -> string |
8 | number_resident, max_occup, freq_cook, room_occup, exp_pipe, host_occupation, number_plants, number_pets (loosens) |
integer/double/quantity value -> absent |
5 | loosens to string |
integer -> float, double -> string |
2 | occup_samp, timepoint |
string -> boolean |
6 | hysterectomy, twin_sibling, smoker, reassembly_bin, medic_hist_perform, x16s_recover (tightens) |
string -> new enum |
21 | tightens; assembly_qual, contam_screen_input, heat_sys_deliv_meth, season, aero_struc, urine_collect_meth, host_dependence, fireplace_type, built_struc_set, seq_quality_check, shading_device_loc, window_status, ceil_struc, wga_amp_appr, sym_life_cycle_type, space_typ_state, and the 5 *_water_mold slots (ceil, door, shad_dev, wall, window) |
string -> float |
3 | tightens |
*_loc_enum -> CompassDirections8Enum |
4 | door_loc, wall_loc, window_loc, heat_deliv_loc; a consolidation the rename map does not record |
| enum -> absent (free text) | 18 | loosens; listed below |
The 18 slots that lost their enumeration and are now unconstrained text:
cur_land_use, decontam_software, door_type_wood, drug_usage,
floor_finish_mat, host_sex, microb_start_count, organism_count,
plant_growth_med, room_type, samp_md, source_uvig, special_diet,
spikein_count, vis_media, water_source_shared, plus samp_floor and
study_complt_stat, which at least gained a regex in exchange. Spot-checking
organism_count in the v7 source confirms it now carries only an advisory
string_serialization, no range and no pattern. Sixteen previously
enumerated fields becoming free text is the largest validation loosening in this
release and is not visible in any headline count.
Pattern changes
301 slots changed pattern: 296 added, 4 removed, 1 modified. Note these are
LinkML-materialized patterns; in the v7 source most are structured_pattern
blocks interpolating the 33 new settings.
Added patterns, by shape:
| count | what it constrains |
|---|---|
| 178 | numeric value or range, optional units: ^{scientific_float}( *- *{scientific_float})? *{text}$ (the quantity value replacement) |
| 32 | PMID / DOI / URL citation form (24 single-valued, 8 a variant) |
| 19 | ontology term as label [PREFIX:id] |
| 13 | positive integer followed by free text |
| 9 | ISO 8601 duration |
| 26 | assorted composite forms: term;value unit (7), three semicolon-separated terms (6), term [ID] or integer (5), free text or term [ID] (4), numeric range with unit (3), and singletons including a floor-number pattern for samp_floor |
Removed patterns (4), each a loosening: compl_score
(^(high|med|low);(0|[0-9]{1,2}|100)%$), contam_screen_param
(^(ref db|kmer|coverage|combination);.+), pres_animal_insect
(^(cat|dog|rodent|snake|other);\d+$), food_quality_date
(^(best by|best if used by|freeze by||use by);YYYY-MM-DD$).
Modified (1): add_recov_method kept its controlled first field and replaced a
sprawling ISO 8601 date alternation with a simpler, stricter one.
Title changes
ENA uses MIxS titles as controlled nomenclature, so these are listed individually.
All 287 renamed classes gained a title; none had one in v6.0.0. Titles are
generated: MigsBaAgriculture -> "MigsBa combined with Agriculture", Air ->
"air", MigsBa -> "MIGS bacteria". Note the combination-class titles are built
from the new CamelCase class names, so the human-readable label is now
"MigsBa combined with Agriculture" rather than anything resembling the v6.0.0
class name "agriculture MIGS bacteria".
Slot titles changed (12):
| slot | v6.0.0 title | v7 title |
|---|---|---|
nose_throat_disord |
lung/nose-throat disorder | nose throat disorder |
sieving |
composite design/sieving | sieving |
horizon_meth |
soil horizon method | horizon method |
samp_taxon_id |
Taxonomy ID of DNA sample | taxonomy ID of DNA sample |
samp_transport_cont |
sample transport container (double space) | sample transport container |
food_trav_vehic |
Food shipping transportation vehicle | food shipping transportation vehicle |
host_of_host_env_med |
host of the symbiotic host environemental medium | host of the symbiotic host environmental medium |
air_PM_concen (was air particulate matter concentration) |
air_PM_concen | air particulate matter concentration |
food_product_type (was Food_Product_type) |
Foodon product type | food product type |
food_source (was Food_source) |
Food source | food source |
soil_horizon (was horizon) |
horizon | soil horizon |
soil_texture (was texture) |
texture | soil texture |
Four of these (nose_throat_disord, sieving, horizon_meth,
food_product_type) change what the title asserts, not just its case. The
air_PM_concen row is the interesting one: the merge swapped which of the two
duplicate slots supplied the title, so the machine name and the title effectively
traded places.
Cosmetic changes (grouped)
- 628 slots dropped a redundant
multivalued: false. No semantic effect;falseis the LinkML default. This alone is 97% of the 644multivaluedchanges. - 158 slots dropped an explicit
range: string. No semantic effect; v7 declaresdefault_range: stringschema-wide, which v6.0.0 did not. - 236 slot descriptions differ only in trailing punctuation or capitalization,
almost all of them a stripped trailing period. Example:
samp_purpose, "The reason that the sample was collected." -> "The reason that the sample was collected". - 253 combination-class descriptions were reworded by template from "Combinatorial checklist X with environmental package Y" to "MIxS Data that comply with the X checklist and the Y Extension".
- 22 extension classes replaced a description that just repeated the class name
with real prose. Example:
air, description "air" -> "A collection of terms appropriate when collecting and sequencing samples obtained from a gaseous environment...". - 6 slot descriptions are mojibake repairs, non-breaking spaces and degree
signs that had been mangled:
api,root_med_suppl,root_med_micronutr,root_med_macronutr,root_med_regl,samp_transport_cond. - 25 slot descriptions are typo or grammar fixes with no change of meaning:
animal_am_route(adminstered),diss_oxygen_fluid(oxgen),food_source_age(organim),samp_transport_cont(Conatiner), and 21 others.
That leaves 26 slot descriptions with substantive rewrites, of which the two
size-fraction reversals are called out above. The rest are clarifications
(alt, depth, pcr_cond, host_body_site, host_body_product, season,
store_cond, lat_lon now capping latitude/longitude at 8 decimal places,
samp_name rewritten around material-sample identity).
Notes and judgment calls
- The diff compares only 8 fields:
name,description,title,meaning,pattern,range,required,multivalued(src/scripts/diff_two_linkml_mixs_releases.py:171). It does not compareis_a,mixins, classslotslists,slot_usage, enum permissible values,slot_uri,annotations,examples,comments,keywords, orstring_serialization. So "125 enums renamed" says nothing about whether their members changed, and the class-level story here is names and descriptions only. A structural comparison is still needed before calling this release reviewed. heat_deliv_loc_enum -> HeatSysDelivMethEnumin the enum rename map looks wrong. The slotheat_deliv_locactually moved toCompassDirections8Enum, whileHeatSysDelivMethEnumis the new range of a different slot,heat_sys_deliv_meth, which wasstringin v6.0.0. I would treatheat_deliv_loc_enumas consolidated intoCompassDirections8Enumalongsidedoor_loc_enum,wall_loc_enum, andwindow_loc_enum, and drop that map entry.- The
required: truereadings are slot-level only. MIxS expresses most requirement rules per class viaslot_usage, which this tool does not compare. The 35 slots above gained a top-level requirement; that is not the same as saying 35 fields became mandatory where they were not before, and it is not the same as saying nothing else changed. - The schema itself flags a collision: the new schema's
commentssay "slot titles that are associated with more than one slot name/SCN: host sex". Worth resolving before release, given the ENA title dependency. mainis not a tag. This diff comparesmixs6.0.0to themainbranch at commit1591e32, whose declaredversionis7.0.0-rc1. The siblingv6.0.0_to_v7.0.0folder may point at a different commit; re-run against the release tag before publishing anything from this.- I could not classify
url(removed slot) orsalinity_methagainst any surviving slot, and I did not attempt to trace the 6 dropped enums that were never used as a slot range in v6.0.0.