返回数据规范

JSON Schema

下载文件

完整字段说明:一次查看全部字段含义、类型与示例,也可将此链接提供给 AI。 Markdown

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "iSynth Reaction specification 1.9.0",
  "description": "One experiment: input identities, starting charges, ordered segments, products and measurements.",
  "type": "object",
  "properties": {
    "schema_version": {
      "type": "string",
      "const": "1.9.0",
      "description": "Data format version. Use 1.9.0 for new records.",
      "examples": [
        "1.9.0"
      ]
    },
    "reaction_identifier": {
      "type": "string",
      "minLength": 1,
      "examples": [
        "EXP-0001"
      ],
      "description": "Experiment record number as reported by the source, e.g. EXP-0001 or Table 2, entry 5. Preserve the original numbering."
    },
    "materials": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Material"
      },
      "minItems": 0,
      "description": "Input material definitions; charges and input measurements refer to these IDs. Define products separately in products.",
      "examples": [
        [
          {
            "id": "alcohol",
            "identifiers": [
              {
                "type": "SMILES",
                "value": "CCO"
              }
            ],
            "role": "reactant"
          },
          {
            "id": "reagent",
            "identifiers": [
              {
                "type": "NAME",
                "value": "acetic anhydride"
              }
            ],
            "role": "reagent"
          }
        ]
      ]
    },
    "initial_state": {
      "$ref": "#/$defs/InitialState",
      "examples": [
        {
          "inputs": [
            {
              "material": "alcohol",
              "amount": {
                "value": 0.25,
                "unit": "mmol",
                "raw": "0.25 mmol"
              }
            },
            {
              "material": "reagent"
            }
          ]
        }
      ]
    },
    "segments": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Segment"
      },
      "examples": [
        [
          {
            "conditions": {
              "temperature": {
                "value": 25,
                "unit": "°C",
                "raw": "25 °C"
              }
            }
          }
        ]
      ]
    },
    "products": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Product"
      },
      "description": "Product identities in this scope. Report measurements separately in measurements, linked by subject.",
      "examples": [
        [
          {
            "id": "product_1",
            "identifiers": [
              {
                "type": "SMILES",
                "value": "C[C@H](O)c1ccccc1"
              }
            ],
            "role": "desired_product",
            "text": "Isolated target product",
            "parameters": {
              "reported_stereochemistry": "(S)"
            }
          }
        ]
      ]
    },
    "measurements": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Measurement"
      },
      "description": "Measurements in this scope, each linked by subject to a Material.id or Product.id. Use one item per reported metric or independent measurement.",
      "examples": [
        [
          {
            "subject": "reactant_1",
            "type": "conversion",
            "value": {
              "value": 90,
              "scale": "percent"
            },
            "text": "Determined by GC."
          }
        ]
      ]
    },
    "workup": {
      "type": "string",
      "minLength": 1,
      "description": "Reported workup and purification procedure."
    },
    "provenance": {
      "$ref": "#/$defs/Provenance",
      "examples": [
        {
          "reference": "Fictional teaching record; Example A"
        }
      ]
    },
    "text": {
      "type": "string",
      "minLength": 1,
      "examples": [
        "Fictional format illustration, not a measured result. Unreported amounts, method and calculation bases are omitted."
      ],
      "description": "Additional experiment wording not covered by procedure, workup or measurement fields."
    },
    "parameters": {
      "type": "object",
      "description": "Additional experiment attributes as name/value pairs. Reaction conditions belong in the relevant Conditions.parameters.",
      "examples": [
        {
          "run_id": "RUN-0001"
        }
      ]
    }
  },
  "required": [
    "schema_version",
    "reaction_identifier",
    "materials",
    "initial_state",
    "segments"
  ],
  "additionalProperties": false,
  "$defs": {
    "Identifier": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "SMILES",
            "NAME",
            "INCHI",
            "INCHIKEY",
            "CUSTOM",
            "UNRESOLVED"
          ],
          "examples": [
            "SMILES"
          ]
        },
        "value": {
          "type": "string",
          "minLength": 1,
          "examples": [
            "CCO"
          ]
        }
      },
      "required": [
        "type",
        "value"
      ],
      "additionalProperties": false,
      "examples": [
        {
          "type": "SMILES",
          "value": "CCO"
        }
      ]
    },
    "Quantity": {
      "type": "object",
      "properties": {
        "value": {
          "type": "number",
          "examples": [
            25
          ]
        },
        "scale": {
          "type": "string",
          "enum": [
            "percent",
            "fraction"
          ],
          "description": "Dimensionless proportion notation: percent means parts per hundred (80 = 80%); fraction means parts per one (0.8 = 80%). Use scale instead of unit for proportions.",
          "examples": [
            "percent"
          ]
        },
        "unit": {
          "type": "string",
          "minLength": 1,
          "examples": [
            "°C"
          ],
          "description": "Reported unit for dimensional quantities or relative dosing, e.g. mmol, °C, h, equiv. For dimensionless proportions use scale. Historical unit \"%\", \"percent\" and \"fraction\" remain readable."
        },
        "raw": {
          "type": "string",
          "minLength": 1,
          "examples": [
            "20–25 °C"
          ]
        },
        "qualifier": {
          "type": "string",
          "enum": [
            "=",
            "<",
            "<=",
            ">",
            ">=",
            "~"
          ],
          "description": "Single-value qualifier: =, <, <=, >, >= or ~. For a two-sided range, use lower and upper instead.",
          "examples": [
            "<"
          ]
        },
        "lower": {
          "type": "number",
          "description": "Lower end of a range; pair with upper and unit.",
          "examples": [
            20
          ]
        },
        "upper": {
          "type": "number",
          "description": "Upper end of a range; pair with lower and unit.",
          "examples": [
            25
          ]
        },
        "lower_inclusive": {
          "type": "boolean",
          "description": "Legacy range boundary, retained for reading existing records. New records use lower/upper/unit for ordinary ranges; preserve exceptional boundary wording in raw.",
          "examples": [
            true
          ],
          "deprecated": true,
          "x-authoring-hidden": true
        },
        "upper_inclusive": {
          "type": "boolean",
          "description": "Legacy range boundary, retained for reading existing records. New records use lower/upper/unit for ordinary ranges; preserve exceptional boundary wording in raw.",
          "examples": [
            true
          ],
          "deprecated": true,
          "x-authoring-hidden": true
        },
        "uncertainty": {
          "type": "number",
          "minimum": 0,
          "description": "Reported ± uncertainty, in the same unit as value. It is not a range or qualifier.",
          "examples": [
            2
          ]
        }
      },
      "required": [],
      "additionalProperties": false,
      "anyOf": [
        {
          "required": [
            "value",
            "unit"
          ]
        },
        {
          "required": [
            "raw"
          ]
        },
        {
          "required": [
            "lower",
            "upper",
            "unit"
          ]
        },
        {
          "required": [
            "value",
            "scale"
          ]
        },
        {
          "required": [
            "lower",
            "upper",
            "scale"
          ]
        }
      ],
      "description": "A reported numerical quantity or source wording. Physical quantities use unit; dimensionless proportions use scale (percent or fraction).",
      "examples": [
        {
          "value": 25,
          "unit": "°C"
        },
        {
          "unit": "°C",
          "raw": "20–25 °C",
          "lower": 20,
          "upper": 25
        },
        {
          "value": 25,
          "unit": "°C",
          "raw": "25 ± 2 °C",
          "uncertainty": 2
        },
        {
          "value": 5,
          "scale": "percent",
          "raw": "<5%",
          "qualifier": "<"
        }
      ],
      "allOf": [
        {
          "if": {
            "anyOf": [
              {
                "required": [
                  "lower"
                ]
              },
              {
                "required": [
                  "upper"
                ]
              }
            ]
          },
          "then": {
            "required": [
              "lower",
              "upper",
              "unit"
            ],
            "not": {
              "anyOf": [
                {
                  "required": [
                    "value"
                  ]
                },
                {
                  "required": [
                    "qualifier"
                  ]
                },
                {
                  "required": [
                    "uncertainty"
                  ]
                }
              ]
            }
          }
        },
        {
          "if": {
            "required": [
              "uncertainty"
            ]
          },
          "then": {
            "required": [
              "value",
              "unit"
            ]
          }
        },
        {
          "if": {
            "required": [
              "lower_inclusive"
            ]
          },
          "then": {
            "required": [
              "lower"
            ]
          }
        },
        {
          "if": {
            "required": [
              "upper_inclusive"
            ]
          },
          "then": {
            "required": [
              "upper"
            ]
          }
        },
        {
          "not": {
            "required": [
              "scale",
              "unit"
            ]
          }
        }
      ]
    },
    "Material": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "examples": [
            "reactant_1"
          ]
        },
        "identifiers": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Identifier"
          },
          "examples": [
            [
              {
                "type": "SMILES",
                "value": "CCO"
              }
            ]
          ]
        },
        "role": {
          "type": "string",
          "enum": [
            "reactant",
            "reagent",
            "catalyst",
            "solvent",
            "intermediate",
            "mixture",
            "unknown"
          ],
          "examples": [
            "reactant"
          ]
        },
        "is_limiting": {
          "type": "boolean",
          "description": "Mark the one overall limiting reactant/reagent with true. It is the common reference for equiv, mol% and overall yield. Explicitly non-limiting is false; omit unknown. Do not infer from dose magnitude or numbering.",
          "examples": [
            true
          ]
        },
        "text": {
          "type": "string",
          "minLength": 1,
          "examples": [
            "Ethanol used as the limiting reactant"
          ],
          "description": "Additional wording about this material."
        },
        "parameters": {
          "type": "object",
          "description": "Additional input material attributes, e.g. purity or supplier information. Dose concentration belongs to Charge.concentration.",
          "examples": [
            {
              "purity": "99.5%"
            }
          ]
        }
      },
      "required": [
        "id",
        "role"
      ],
      "additionalProperties": false,
      "anyOf": [
        {
          "required": [
            "identifiers"
          ],
          "properties": {
            "identifiers": {
              "minItems": 1
            }
          }
        },
        {
          "required": [
            "text"
          ]
        }
      ],
      "examples": [
        {
          "id": "reactant_1",
          "identifiers": [
            {
              "type": "SMILES",
              "value": "CCO"
            }
          ],
          "role": "reactant",
          "is_limiting": true,
          "text": "Ethanol used as the limiting reactant",
          "parameters": {
            "purity": "99.5%"
          }
        }
      ],
      "description": "Input material identity and role. Doses and their concentration or formulation belong to Charge."
    },
    "Charge": {
      "type": "object",
      "properties": {
        "material": {
          "type": "string",
          "minLength": 1,
          "description": "ID of the added material, e.g. reagent_1. Repeated additions reuse this ID.",
          "examples": [
            "reagent_1"
          ]
        },
        "amount": {
          "$ref": "#/$defs/Quantity",
          "description": "Amount added in this charge, e.g. {value:1,unit:\"mmol\"}. Use the same field for starting inputs and later additions. Omit if the individual amount is unreported; do not divide a total across unknown portions.",
          "examples": [
            {
              "value": 2,
              "unit": "mL"
            }
          ]
        },
        "concentration": {
          "$ref": "#/$defs/Quantity",
          "description": "Concentration or supplied formulation of this charge, e.g. {raw:\"2.5 M solution in hexanes\"} or {raw:\"60% dispersion in mineral oil\"}. It applies to the material being added, not the whole reaction mixture.",
          "examples": [
            {
              "raw": "2.5 M solution in hexanes"
            },
            {
              "value": 0.5,
              "unit": "mol/L"
            },
            {
              "raw": "60% dispersion in mineral oil"
            }
          ]
        }
      },
      "required": [
        "material"
      ],
      "additionalProperties": false,
      "examples": [
        {
          "material": "reagent_1",
          "amount": {
            "value": 2,
            "unit": "mL"
          },
          "concentration": {
            "raw": "2.5 M solution in hexanes"
          }
        }
      ],
      "description": "One addition: the input material ID, amount taken, and concentration or formulation of that dose when reported."
    },
    "Conditions": {
      "type": "object",
      "properties": {
        "temperature": {
          "anyOf": [
            {
              "$ref": "#/$defs/Quantity",
              "examples": [
                {
                  "value": 25,
                  "unit": "°C",
                  "raw": "25 °C"
                }
              ]
            },
            {
              "type": "null"
            }
          ],
          "examples": [
            {
              "value": 25,
              "unit": "°C"
            }
          ]
        },
        "pressure": {
          "anyOf": [
            {
              "$ref": "#/$defs/Quantity"
            },
            {
              "type": "null"
            }
          ],
          "examples": [
            {
              "value": 1,
              "unit": "atm"
            }
          ]
        },
        "atmosphere": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1,
              "examples": [
                "nitrogen"
              ]
            },
            {
              "type": "null"
            }
          ],
          "examples": [
            "nitrogen"
          ]
        },
        "parameters": {
          "anyOf": [
            {
              "type": "object",
              "description": "Extra conditions written as name/value pairs, e.g. milling_frequency: {value:30,unit:\"Hz\"}. In a later segment, omitted keys keep the previous setting; a new value replaces it. {milling_frequency:null} stops inheriting that setting; parameters:null clears all extra conditions. null is JSON empty value, not zero.",
              "examples": [
                {
                  "humidity": {
                    "raw": "40% RH"
                  }
                }
              ]
            },
            {
              "type": "null"
            }
          ],
          "examples": [
            {
              "milling_frequency": {
                "value": 30,
                "unit": "Hz"
              }
            }
          ],
          "description": "Extra conditions written as name/value pairs, e.g. milling_frequency: {value:30,unit:\"Hz\"}. In a later segment, omitted keys keep the previous setting; a new value replaces it. {milling_frequency:null} stops inheriting that setting; parameters:null clears all extra conditions. null is JSON empty value, not zero."
        }
      },
      "additionalProperties": false,
      "examples": [
        {
          "temperature": {
            "value": 25,
            "unit": "°C"
          },
          "pressure": {
            "value": 1,
            "unit": "atm"
          },
          "atmosphere": "nitrogen",
          "parameters": {
            "humidity": {
              "raw": "40% RH"
            },
            "light_source_type": "blue LED",
            "wavelength": "450 nm"
          }
        }
      ],
      "description": "Temperature, pressure, atmosphere and additional conditions. A later segment inherits omitted settings; null explicitly stops inheritance without asserting a new physical value. Segment.duration records the elapsed time."
    },
    "InitialState": {
      "type": "object",
      "properties": {
        "inputs": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Charge"
          },
          "examples": [
            [
              {
                "material": "reactant_1",
                "amount": {
                  "value": 1,
                  "unit": "mmol",
                  "raw": "1 mmol"
                }
              },
              {
                "material": "solvent_1",
                "amount": {
                  "value": 2,
                  "unit": "mL",
                  "raw": "2 mL"
                }
              }
            ]
          ]
        },
        "conditions": {
          "$ref": "#/$defs/Conditions",
          "description": "Starting conditions. Omitted or null means unknown at the start; elapsed time belongs to Segment.duration.",
          "examples": [
            {
              "temperature": {
                "value": 0,
                "unit": "°C"
              }
            }
          ]
        },
        "text": {
          "type": "string",
          "minLength": 1,
          "examples": [
            "The starting materials were charged at 0 °C."
          ]
        }
      },
      "additionalProperties": false,
      "examples": [
        {
          "inputs": [
            {
              "material": "reactant_1",
              "amount": {
                "value": 1,
                "unit": "mmol",
                "raw": "1 mmol"
              }
            },
            {
              "material": "solvent_1",
              "amount": {
                "value": 2,
                "unit": "mL",
                "raw": "2 mL"
              }
            }
          ],
          "conditions": {
            "temperature": {
              "value": 0,
              "unit": "°C"
            }
          },
          "text": "The starting materials were charged at 0 °C."
        }
      ],
      "required": [
        "inputs"
      ]
    },
    "Segment": {
      "type": "object",
      "properties": {
        "added_materials": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Charge"
          },
          "examples": [
            [
              {
                "material": "reagent_1",
                "amount": {
                  "value": 1,
                  "unit": "mmol"
                }
              }
            ]
          ]
        },
        "conditions": {
          "$ref": "#/$defs/Conditions",
          "description": "Conditions in this segment; omitted settings carry forward, supplied values replace and null clears.",
          "examples": [
            {
              "temperature": {
                "value": 0,
                "unit": "°C"
              }
            }
          ]
        },
        "duration": {
          "$ref": "#/$defs/Quantity",
          "examples": [
            {
              "value": 1,
              "unit": "h"
            }
          ]
        },
        "text": {
          "type": "string",
          "minLength": 1,
          "examples": [
            "The reagent was added dropwise. The solution turned yellow and a precipitate formed."
          ],
          "description": "Procedure and qualitative observations for this stage, e.g. dropwise addition, a colour change, precipitation or TLC observations. Retain observations without inventing a conversion or product identity."
        },
        "products": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Product"
          },
          "description": "Product identities in this scope. Report measurements separately in measurements, linked by subject.",
          "examples": [
            [
              {
                "id": "intermediate_1",
                "identifiers": [
                  {
                    "type": "NAME",
                    "value": "Intermediate A (source label)"
                  }
                ],
                "role": "intermediate"
              }
            ]
          ]
        },
        "measurements": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Measurement"
          },
          "description": "Measurements in this scope, each linked by subject to a Material.id or Product.id. Use one item per reported metric or independent measurement.",
          "examples": [
            [
              {
                "subject": "reactant_1",
                "type": "conversion",
                "value": {
                  "value": 90,
                  "scale": "percent"
                },
                "text": "Determined by GC."
              }
            ]
          ]
        }
      },
      "minProperties": 1,
      "additionalProperties": false,
      "examples": [
        {
          "added_materials": [
            {
              "material": "reagent_1",
              "amount": {
                "value": 1,
                "unit": "mmol"
              }
            }
          ],
          "conditions": {
            "temperature": {
              "value": 0,
              "unit": "°C"
            }
          },
          "duration": {
            "value": 1,
            "unit": "h"
          },
          "text": "The reagent was added dropwise. The solution turned yellow."
        }
      ],
      "description": "One ordered stage: additions, conditions, duration and observations; optional product identities and measurements linked by subject."
    },
    "Product": {
      "type": "object",
      "description": "Product identity and role; results are linked through Measurement.subject.",
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "examples": [
            "product_1"
          ]
        },
        "identifiers": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Identifier"
          },
          "examples": [
            [
              {
                "type": "SMILES",
                "value": "C[C@H](O)c1ccccc1"
              }
            ]
          ]
        },
        "role": {
          "type": "string",
          "enum": [
            "desired_product",
            "byproduct",
            "intermediate",
            "unknown"
          ],
          "examples": [
            "desired_product"
          ]
        },
        "text": {
          "type": "string",
          "minLength": 1,
          "examples": [
            "Isolated target product"
          ],
          "description": "Additional wording about this product."
        },
        "parameters": {
          "type": "object",
          "description": "Additional product attributes. reported_stereochemistry may retain the source configuration label; structural stereochemistry belongs in identifiers.",
          "examples": [
            {
              "reported_stereochemistry": "(S)"
            }
          ]
        }
      },
      "required": [
        "id"
      ],
      "anyOf": [
        {
          "required": [
            "identifiers"
          ],
          "properties": {
            "identifiers": {
              "minItems": 1
            }
          }
        },
        {
          "required": [
            "text"
          ]
        }
      ],
      "additionalProperties": false,
      "examples": [
        {
          "id": "product_1",
          "identifiers": [
            {
              "type": "SMILES",
              "value": "C[C@H](O)c1ccccc1"
            }
          ],
          "role": "desired_product",
          "text": "Isolated target product",
          "parameters": {
            "reported_stereochemistry": "(S)"
          }
        }
      ]
    },
    "Measurement": {
      "type": "object",
      "properties": {
        "subject": {
          "type": "string",
          "minLength": 1,
          "description": "Measured object: a Material.id or Product.id in this reaction, e.g. reactant_1 for conversion or product_1 for yield.",
          "examples": [
            "reactant_1"
          ]
        },
        "type": {
          "type": "string",
          "enum": [
            "yield",
            "conversion",
            "ee",
            "de",
            "er",
            "dr",
            "ez",
            "rr",
            "selectivity",
            "purity",
            "amount",
            "observation",
            "custom"
          ],
          "examples": [
            "ee"
          ]
        },
        "value": {
          "$ref": "#/$defs/Quantity",
          "examples": [
            {
              "value": 96,
              "scale": "percent",
              "raw": "96%"
            }
          ]
        },
        "stereocentres": {
          "type": "string",
          "minLength": 1,
          "pattern": "^(?:[1-9][0-9]*[a-z]?'*[RSrs]|\\([1-9][0-9]*[a-z]?'*[RSrs](?:,[1-9][0-9]*[a-z]?'*[RSrs])+\\))$",
          "description": "Examined stereocentres with target configurations. One: 5S; several: (2R,5S), in ascending source-locant order. Use ASCII commas/parentheses, no spaces, and each locant once. Use R/S (r/s for reported pseudoasymmetry); source suffixes and primes are supported, e.g. (3aR,7S). Include only examined sites, not fixed centres. Source locants are not SMILES atom indices; unknown locants or other stereogenic elements belong in text.",
          "examples": [
            "5S",
            "(2R,5S)",
            "(7S,8R,12R)"
          ]
        },
        "basis": {
          "type": "string",
          "minLength": 1,
          "description": "Compared species or groups in ratio order, e.g. (2R,5S):(2R,5R). Use a colon between terms; explicit group sums use brackets and +. Preserve source labels such as syn:anti. For ee/de name the isomer in excess first when known. Examined sites alone do not identify the comparison; omit unknown comparisons.",
          "examples": [
            "(2R,5S):(2S,5R)",
            "(2R,5S):(2R,5R)",
            "[(2R,5S)+(2S,5R)]:[(2R,5R)+(2S,5S)]",
            "syn:anti"
          ]
        },
        "text": {
          "type": "string",
          "minLength": 1,
          "pattern": "\\S",
          "description": "Measurement details in one sentence: method, sample and other reported context, e.g. Isolated product analysed by chiral HPLC. For type=custom, state the metric name here.",
          "examples": [
            "Isolated product analysed by chiral HPLC.",
            "Crude mixture analysed by 1H NMR. C2 remains R.",
            "Space-time yield, calculated from isolated mass, reactor volume and duration."
          ]
        }
      },
      "required": [
        "subject",
        "type",
        "value"
      ],
      "additionalProperties": false,
      "allOf": [
        {
          "if": {
            "properties": {
              "type": {
                "const": "yield"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "properties": {
              "value": {
                "properties": {
                  "value": {
                    "minimum": 0
                  },
                  "unit": {
                    "enum": [
                      "%",
                      "fraction",
                      "percent"
                    ]
                  }
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "type": {
                "const": "custom"
              }
            },
            "required": [
              "type"
            ]
          },
          "then": {
            "required": [
              "text"
            ]
          }
        }
      ],
      "examples": [
        {
          "subject": "product_1",
          "type": "ee",
          "value": {
            "value": 96,
            "scale": "percent",
            "raw": "96%"
          },
          "stereocentres": "(2R,5S)",
          "basis": "(2R,5S):(2S,5R)",
          "text": "Isolated target diastereomer fraction analysed by chiral HPLC."
        },
        {
          "subject": "product_1",
          "type": "dr",
          "value": {
            "raw": "95:5"
          },
          "stereocentres": "5S",
          "basis": "(2R,5S):(2R,5R)",
          "text": "Crude mixture analysed by 1H NMR. C2 remains R."
        },
        {
          "subject": "product_1",
          "type": "custom",
          "value": {
            "raw": "12 g L-1 h-1"
          },
          "text": "Metric: space-time yield; Method: Calculated from isolated mass, reactor volume and duration."
        },
        {
          "subject": "reactant_1",
          "type": "conversion",
          "value": {
            "value": 90,
            "scale": "percent"
          },
          "text": "Determined by GC."
        }
      ],
      "dependentSchemas": {
        "stereocentres": {
          "properties": {
            "type": {
              "enum": [
                "ee",
                "er",
                "de",
                "dr"
              ]
            }
          }
        }
      }
    },
    "Provenance": {
      "type": "object",
      "properties": {
        "doi": {
          "type": "string",
          "pattern": "^(https://doi\\.org/)?10\\.\\d{4,9}/\\S+$",
          "description": "Source paper DOI or https://doi.org/ link. This is the article DOI, not a dataset DOI.",
          "examples": [
            "10.1234/isynth.example"
          ]
        },
        "reference": {
          "type": "string",
          "minLength": 1,
          "examples": [
            "Fictional article for documentation examples"
          ],
          "description": "Source citation or title, especially when no DOI is available."
        },
        "locator": {
          "type": "string",
          "minLength": 1,
          "examples": [
            "page 12"
          ],
          "x-authoring-hidden": true
        },
        "text": {
          "type": "string",
          "minLength": 1,
          "x-authoring-hidden": true
        },
        "source_schema_version": {
          "type": "string",
          "minLength": 1,
          "x-authoring-hidden": true
        },
        "conversion": {
          "type": "string",
          "minLength": 1,
          "x-authoring-hidden": true
        },
        "identifier_origin": {
          "type": "string",
          "enum": [
            "source",
            "generated"
          ],
          "x-authoring-hidden": true
        },
        "parameters": {
          "type": "object",
          "description": "Additional source attributes retained for compatibility and specialized consumers. Not part of routine authoring; use the defined fields and domain extensions first.",
          "x-authoring-hidden": true
        },
        "raw_values": {
          "type": "object",
          "x-authoring-hidden": true
        },
        "columns": {
          "type": "array",
          "items": {
            "type": "object"
          },
          "x-authoring-hidden": true
        },
        "source": {
          "type": "object",
          "x-authoring-hidden": true
        }
      },
      "required": [],
      "additionalProperties": false,
      "examples": [
        {
          "doi": "10.1234/isynth.example",
          "reference": "Fictional article for documentation examples"
        }
      ],
      "description": "Source article DOI and citation. Original files and platform import metadata are kept separately."
    }
  },
  "x-core-fields": {
    "Reaction": [
      "schema_version",
      "reaction_identifier",
      "materials",
      "initial_state",
      "segments",
      "products",
      "measurements",
      "workup",
      "provenance"
    ],
    "Material": [
      "id",
      "identifiers",
      "role",
      "is_limiting"
    ],
    "Conditions": [
      "temperature",
      "pressure",
      "atmosphere"
    ],
    "Measurement": [
      "type",
      "value",
      "stereocentres",
      "basis",
      "text",
      "subject"
    ],
    "Quantity": [
      "raw",
      "value",
      "unit"
    ],
    "Provenance": [
      "doi",
      "reference"
    ],
    "Charge": [
      "material",
      "amount",
      "concentration"
    ],
    "Product": [
      "id",
      "identifiers",
      "role"
    ],
    "Segment": [
      "added_materials",
      "conditions",
      "duration",
      "text",
      "products",
      "measurements"
    ]
  },
  "x-object-groups": [
    {
      "id": "materials",
      "types": [
        "Identifier",
        "Quantity",
        "Material",
        "Charge"
      ],
      "helpers": []
    },
    {
      "id": "process",
      "types": [
        "Conditions",
        "InitialState",
        "Segment"
      ],
      "helpers": []
    },
    {
      "id": "results",
      "types": [
        "Product",
        "Measurement"
      ],
      "helpers": []
    },
    {
      "id": "provenance",
      "types": [
        "Provenance"
      ],
      "helpers": []
    }
  ],
  "$id": "https://isynth.ichemdata.com/schemas/reaction-object.schema.json",
  "x-quantity-convention": {
    "reference": "The single material marked is_limiting=true is the common reference for equiv, mol% and overall yield.",
    "unknown": "Without a known limiting material, retain reported values and do not calculate an absolute amount or infer a limiting flag.",
    "scope": "Stage yields are kept in stage-scoped outcomes and are never relabelled as overall yields. Retain any exceptional source wording without inventing another structured reference."
  },
  "examples": [
    {
      "schema_version": "1.9.0",
      "reaction_identifier": "EXP-0001",
      "materials": [
        {
          "id": "alcohol",
          "identifiers": [
            {
              "type": "SMILES",
              "value": "CCO"
            }
          ],
          "role": "reactant"
        },
        {
          "id": "reagent",
          "identifiers": [
            {
              "type": "NAME",
              "value": "acetic anhydride"
            }
          ],
          "role": "reagent"
        }
      ],
      "initial_state": {
        "inputs": [
          {
            "material": "alcohol",
            "amount": {
              "value": 0.25,
              "unit": "mmol",
              "raw": "0.25 mmol"
            }
          },
          {
            "material": "reagent"
          }
        ]
      },
      "segments": [
        {
          "conditions": {
            "temperature": {
              "value": 25,
              "unit": "°C",
              "raw": "25 °C"
            }
          }
        }
      ],
      "products": [
        {
          "id": "product",
          "identifiers": [
            {
              "type": "SMILES",
              "value": "CCOC(C)=O"
            }
          ]
        }
      ],
      "measurements": [
        {
          "subject": "product",
          "type": "yield",
          "value": {
            "value": 80,
            "scale": "percent",
            "raw": "80%"
          }
        }
      ],
      "provenance": {
        "reference": "Fictional teaching record; Example A"
      },
      "text": "Fictional format illustration, not a measured result. Unreported amounts, method and calculation bases are omitted."
    }
  ],
  "$comment": "Complete field descriptions and examples: https://isynth.ichemdata.com/schemas/reaction-reference.en.html (English), https://isynth.ichemdata.com/schemas/reaction-reference.zh.html (中文)."
}