Deprecation notice
Citrine has deprecated the MIF in favour of the PIF, for which a rich API, and SDKs are available.
Introduction
The Materials Information File (MIF) is a schema that is used to impose structure on materials data, facilitating its processing and transfer. It is designed to be flexible in order to represent the often complex data that is associated with materials research, development, and manufacturing.
Besides those that are listed in this document, objects will continue to be added to the core of the MIF schema. Additionally, users can add data as they see fit as secondary objects, which could be promoted to the core schema in the future. The schema should be used as a basis for structuring materials data, with users adding to it as needed.
Adherence to JSON Standards
MIF’s must always be compliant with JSON standards.
Particular to the MIF schema, all field names must be in camel case: no spaces between words; all letters are lowercase, except the first letter of each word, which is uppercase; the first letter of the name is also lowercase. For example, the name “phase diagram” would be written as “phaseDiagram”. Do not use underscores, hyphens, or other non-alphanumeric characters in field names.
The Core Schema
This section contains the list of MIF objects that are part of the core schema. Each section contains a list of all of the fields that are a part of that object and information about what it contains.
Sample
Sample objects are high-level structures used to store information about measurements that were made on a material.
field name | nullable | value type | description |
---|---|---|---|
material | false | single material object | A description of the material. |
measurement | true | array of measurement objects | Information about any measurements that were taken on the sample. |
reference | true | array of reference objects | Any references where information about the sample is published. If any references are specific to a single measurement, then they should be attached to the corresponding object in the measurement field. |
contact | true | array of person objects | Any people that can be contacted for information about the sample. If one or more people should be contacted only for a particular measurement, then they should be attached to the corresponding object in the measurement field. |
license | true | array of strings | Information about any licenses that apply to the entire sample. If any license applies only to a particular measurement, then it should be attached to the corresponding object in the measurement field. |
System
System objects are high-level objects used to store information about a system of materials and the properties of those materials.
field name | nullable | value type | description |
---|---|---|---|
systemType | true | string | Type of the system. For example, “Ionic liquid” or “Multi-layer solar cell”. |
component | false | array of component objects | List of the individual components that make up the system. The order of the components may be meaningful; for example, when describing a multi-layer solar cell, the sample order should correspond to their order in the physical device. |
condition | true | array of value objects | Information about conditions of the system as a whole. For example, this could describe methods used to join samples in a multi-layered device. |
measurement | true | array of measurement objects | Information about any measurements that were taken on the system. |
reference | true | array of reference objects | Any references where information about the system is published. If any references are specific to a single component or measurement, then they should be attached to the corresponding object in the component or measurement fields. |
contact | true | array of person objects | Any people that can be contacted for information about the system. If one or more people should be contacted only for a particular component or measurement, then they should be attached to the corresponding object in the component or measurement fields. |
license | true | array of strings | Information about any licenses that apply to the entire system. If any license applies only to a particular component or measurement, then it should be attached to the corresponding object in the component or measurement fields. |
Component
Component objects are used inside of system objects to store a system component of the system.
field name | nullable | value type | description |
---|---|---|---|
label | true | string | Label to apply to the component. For example, in a system containing a thin film grown on a substrate, this might be equal to “substrate”. |
sample | false | sample object | Information about the particular sample that makes up this component. |
Phase Diagram
Phase diagram objects are high-level objects used to store information about a phase diagram and the materials that it describes.
field name | nullable | value type | description |
---|---|---|---|
vertex | true | array of strings | Labels to apply to each of the vertices of the phase diagram. The order of these labels is consistent with coordinates. For example, [“Cu”, “Au”] would correspond to Cu at coordinates (1, 0) and Au at coordinates (0, 1). |
phase | true | array of phase objects | Detailed information about materials described in the phase diagram using sample objects (via phase objects). To simply add the name of a material use the label field instead. |
label | true | array of point objects | Labels to apply to the phase diagram. Note that anything already in the vertex field should not be included here. |
boundary | true | array of line objects | Boundaries inside of the phase diagram. |
dataType | true | “Experimental” or “Computational” | Label used to mark the data as generated via physical experiment or computational methods. |
reference | true | array of reference objects | Any references where information about the phase diagram is published. If any references are specific to a single phase, then they should be attached to the corresponding object in the phase field. |
contact | true | array of person objects | Any people that can be contacted for information about the phase diagram. If one or more people should be contacted only for a particular phase, then they should be attached to the corresponding object in the phase field. |
license | true | array of strings | Information about any licenses that apply to the entire phase diagram. If any license applies only to a particular phase, then it should be attached to the corresponding object in the phase field. |
Material
Material objects store information about the chemical composition of a material and its conditions.
field name | nullable | value type | description |
---|---|---|---|
chemicalFormula | true | string | The chemical formula of the material using IUPAC standards. |
commonName | true | array of strings | List of the common names of the material. |
composition | true | array of composition objects | Elements and the atomic/weight percent of each in the material. |
id | true | array of id objects | One or more ids that identify a material such as a CAS number. |
cif | true | String | Content of a CIF file that describes the material. |
condition | true | array of value objects | Conditions of the material such as its crystallinity, morphology, purity, etc. Note that external conditions generally do not belong in this field, but are more appropriately placed inside, for example, the condition field of a measurement object. |
* While chemicalFormula, commonName, composition, id, and cif are all nullable, at least one must be non-null.
Composition
Composition objects contain information about the amount of a single element in a material.
field name | nullable | value type | description |
---|---|---|---|
element | false | string | The symbol of the element. |
weightPercent | true | string | The percentage of the weight of the material that is this element. |
atomicPercent | true | string | The percentage of the atoms in the material that are this element. |
* While weightPercent and atomicPercent are both nullable, at least one must be non-null.
Id
Ids are simple objects that store the name and value of some identifier.
field name | nullable | value type | description |
---|---|---|---|
name | false | string | The name of the id such as “CAS”. |
value | false | string | The value of the id. |
Measurement
Measurement objects contain information about a measurement of a sample and the external conditions that were applied.
field name | nullable | value type | description |
---|---|---|---|
property | false | single value object | The name, value, and units of the measured property. |
condition | true | array of value objects | Details of the external conditions applied during a measurement. For example, the temperature and/or pressure. |
method | true | string | Description of the measurement method. For example, this field might contain information about a piece of equipment that was used, or information about a version of code with which a simulation was performed. |
dataType | true | “Experimental” or “Computational” | Label used to mark the data as generated via physical experiment or computational methods. |
reference | true | array of reference objects | Any references where information about the measurement is published. |
contact | true | array of person objects | Any people that can be contacted for information about the measurement. |
license | true | array of strings | Information about any licenses that apply to the measurement. |
Value
Object to store information about a single value, which can be a scalar, vector, or matrix.
field name | nullable | value type | description |
---|---|---|---|
name | false | string | Name of the value. |
scalar | true | array of scalar objects | One or more scalars. |
vector | true | array of arrays of scalar objects | One or more vectors. Each sub-array represents a single vector. |
matrix | true | array of arrays of arrays of scalar objects | One or more matrices. Each sub-array-of-arrays represents a single matrix arranged by rows. |
units | true | string | Units of the value. |
* While scalar, vector, and matrix are all nullable, exactly one must be non-null.
Scalar
Object to store information about a single scalar value. This field can represent a simple scalar value (“3.4”), a scalar with an uncertainty (“3.4” +- “0.1”), a minimum (>= “3.4”), a maximum (<= “3.4”), or a range (“2.7” - “4.1”) using combinations of the available fields.
field name | nullable | value type | description |
---|---|---|---|
value | true* | string | Exact value of the scalar. |
minimum | true* | string | Minimum value if this object represents a range. |
maximum | true* | string | Maximum value if this object represents a range. |
uncertainty | true | string | Uncertainty of value, minimum, and/or maximum. |
* While all fields are nullable, at least one of value, minimum, and/or maximum must be non-null.
Phase
Object to store detailed information about a phase in a phase diagram.
field name | nullable | value type | description |
---|---|---|---|
sample | false | single sample object | Details of the phase in a phase diagram. |
coordinate | false | array of floating point numbers | Coordinates where the phase appears in the phase diagram. |
Point
Object to store a point in a plot or a label in a phase diagram.
field name | nullable | value type | description |
---|---|---|---|
coordinate | false | array of floating point numbers | Coordinates where the point appears. |
label | true | string | Text to print at the coordinates of the point. |
Line
Object to store a line on a plot or a boundary in a phase diagram.
field name | nullable | value type | description |
---|---|---|---|
coordinate | false | array of arrays of floating point numbers | Coordinates of the points that define a line. Each sub-array represents the coordinates of one point on the line. The line will connect points in the order that they appear. |
label | true | string | Text to print on the line. |
Reference
Object to store information about a referenced work.
field name | nullable | value type | description |
---|---|---|---|
doi | true | string | Digital Object Identifier of the reference. |
isbn | true | string | International Standard Book Number of the reference. |
issn | true | string | International Standard Serial Number of the reference. |
url | true | string | Internet address of the reference. |
title | true | string | Title of the work. |
publisher | true | string | Publisher of the work. |
journal | true | string | Journal in which the work appeared. |
volume | true | string | Volume of the series in which the work appeared. |
year | true | string | Year in which the reference was published. |
issue | true | string | Issue of the collection in which the work appeared. |
pages | true | single pages object | Start and end pages of the work. |
author | true | array of name objects | List of authors of the work. |
editor | true | array of name objects | List of editors of the work. |
reference | true | array of reference objects | References cited by the work. Reference objects can nest as deeply as needed. This is useful, for example, when tracking the history of a value referenced in a scholarly article; the top level reference would contain information about where the data was accessed while the nested reference would contain information about where it was originally published. |
Person
Object to store information about a person and their contact information.
field name | nullable | value type | description |
---|---|---|---|
name | true* | single name object | Name of the person. |
true* | string | Email address of the person. | |
orcid | true* | string | Open Researcher and Contributor ID of the person. |
* While all fields are nullable, at least one must be non-null.
Name
Object to store the given and family name of a person.
field name | nullable | value type | description |
---|---|---|---|
given | true | string | Given (first) name. |
family | false | string | Family (last) name. |
Pages
Object to store the start and end pages of a reference.
field name | nullable | value type | description |
---|---|---|---|
start | false | string | Starting page of a range. |
end | true | string | Ending page of a range. |
Extending the Schema
All effort should be made to adhere to the core schema. However, in some cases, it may not be possible to structure some data in this way. Therefore, additional elements may be added by the user where needed as long as they are valid JSON.
Additional objects will be added to the core schema over time and any commonly used extensions of the schema will be considered for promotion.
File Structure
{
"sample": {
"material": {},
"measurement": {}
}
}
A single MIF object or an array of MIF objects can be stored in a JSON file. Each top level object should contain a single field; the name of that field must be the type of the object that it contains (in camel case) and the value of that field set to the actual MIF object. For example, a file that contains a single sample would appear as:
[
{
"sample": {
"material": {},
"measurement": {}
}
},
{
"sample": {
"material": {},
"measurement": {}
}
}
]
Or similarly, a file that contains two sample objects would be written as:
Examples
Superconducting Critical Temperature of RbOs2O6
{
"sample": {
"material": {
"chemicalFormula": "RbOs2O6"
},
"measurement": [
{
"property": {
"units": "K",
"scalar": [
{
"value": "6.3"
}
],
"name": "Superconducting critical temperature (Tc)"
},
"reference": [
{
"url": "http://arxiv.org/abs/1109.5422v1"
},
{
"doi": "10.1143/jpsj.80.104708"
}
]
}
]
}
}
This record simply stores the superconducting critical temperature of RbOs2O6 and gives two references: the journal publication for that work as well as the corresponding link to arXiv.
Band Gap of LiF
{
"sample": {
"material": {
"chemicalFormula": "LiF",
"condition": [
{
"scalar": [
{
"value": "Single crystalline"
}
],
"name": "Crystallinity"
}
]
},
"measurement": [
{
"dataType": "Experimental",
"reference": [
{
"doi": "10.1063/1.3253115"
}
],
"property": {
"units": "eV",
"scalar": [
{
"value": "13.6"
}
],
"name": "Band gap"
},
"method": "Reflection",
"condition": [
{
"scalar": [
{
"value": "Direct"
}
],
"name": "Transition"
},
{
"units": "K",
"scalar": [
{
"value": "300"
}
],
"name": "Temperature"
}
]
}
]
}
}
This record stores the band gap of single crystalline LiF as 13.6 eV. Additionally, it saves the DOI of the reference from which this value was extracted, that the measurement method was reflection, and that the gap is a direct transition measured at 300 K.
Properties of CaMnO3 Relevant to Thermoelectric Performance
{
"sample": {
"material": {
"chemicalFormula": "CaMnO3",
"condition": [
{
"scalar": [
{
"value": "Polycrystalline"
}
],
"name": "Crystallinity"
},
{
"scalar": [
{
"value": "Solid state reaction"
}
],
"name": "Preparation method"
},
{
"scalar": [
{
"value": "62"
}
],
"name": "Space group"
}
]
},
"measurement": [
{
"dataType": "Experimental",
"property": {
"units": "ohm-cm",
"scalar": [
{
"value": "50"
}
],
"name": "Electrical resistivity"
},
"condition": [
{
"units": "K",
"scalar": [
{
"value": "300"
}
],
"name": "Temperature"
}
]
},
{
"dataType": "Experimental",
"property": {
"units": "uV/K",
"scalar": [
{
"value": "-462.97"
}
],
"name": "Seebeck coefficient"
},
"condition": [
{
"units": "K",
"scalar": [
{
"value": "300"
}
],
"name": "Temperature"
}
]
},
{
"dataType": "Experimental",
"property": {
"units": "W/m-K^2",
"scalar": [
{
"value": "4.2868E-07"
}
],
"name": "Power factor"
},
"condition": [
{
"units": "K",
"scalar": [
{
"value": "300"
}
],
"name": "Temperature"
}
]
},
{
"dataType": "Experimental",
"property": {
"units": "S/cm",
"scalar": [
{
"value": "2.0000E-02"
}
],
"name": "Electrical conductivity"
},
"condition": [
{
"units": "K",
"scalar": [
{
"value": "300"
}
],
"name": "Temperature"
}
]
}
],
"reference": [
{
"doi": "10.1021/cm400893e",
"reference": [
{
"url": "http://www.jmst.org/EN/Y2009/V25/I04/0535"
}
]
}
]
}
}
This record stores several properties of polycrystalline CaMnO3 in space group 62, which has been prepared with a solid state reaction. It saves the electrical resistivity at 300 K as 50 ohm-cm, the Seebeck coefficient at 300 K as -462.97 uV/K, the power factor at 300 K as 4.2868E-07 W/m-K^2, and the electrical conductivity at 300 K as 2.0000E-02 S/cm. All values were extracted from the paper with doi 10.1021/cm400893e, which in turn referenced those values from the work at url http://www.jmst.org/EN/Y2009/V25/I04/0535.