A band or Brillouin zone.

Not yet finalised

    
        

Band energies associated with this kpoint

The energy units must be given

The k-vector

???
A container for bands.

Experimental.

<band>
not yet written
</band>
A lattice of dimension 3 or less.

Lattice is a general approach to describing periodic systems. It can have variable dimensionality or periodicity, and could be finite

lattice is more general than crystal in cmlCore which is used primarily for reporting crystallographic experiments.` A lattice can be described by latticeVectors, cell axes and angles, or metric tensors, etc. (only axes/angles are allowed under crystal).
<band>
not yet written
</band>
All appropriate cell parameters must be given, even where angles are fixed by symmetry. The order is fixed as a,b,c,alpha,beta,gamma and software can neglect any title or dictRef attributes. Error estimates can be given if required. Any units can be used, but the defaults are Angstrom (10^-10 m) and degrees. To be developed for lower dimensionality. .
A vector3 representing a lattice axis.
a lattice can be represented by 1-3 non-linearly dependent latticeVectors. If the dimensionality is less than 3 latticeVectors are the preferred method. Similarly, if the axes show a mixture of periodicity and non-periodicity latticeVectors can support this. The number of periodic vectors must correspond with the periodicity attribute on a system element.
The vector must not be zero and units must be given. (Zero vectors must not be used to reduce dimensionality).
A lattice vector defaults to periodic.
Any or all of the axes may be periodic or aperiodic. An example could be a surface where 2 periodic axes (not necessarily orthogonal) are used to describe the coordinates in the surface, perhaps representing lattice vectors of a 3D crystal or 2D layer. The third vector is orthogonal and represents coordinates normal to the surface. In this case only the direction, not the magnitude of the vector is important
<latticeVector>
not yet written
</latticeVector>
Is the axis periodic
Any or all of the axes may be periodic or aperiodic. An example could be a surface where 2 periodic axes (not necessarily orthogonal) are used to describe the coordinates in the surface, perhaps representing lattice vectors of a 3D crystal or 2D layer. The third vector is orthogonal and represents coordinates normal to the surface. In this case only the direction, not the magnitude of the vector is important
A region of the system.
Under development. A subdivision of the system to which special protocols or properties may be attached. Typical regions could be defined by the presence of atoms belonging to an atomSet or geometrical boundaries.
A region element will not always contain other elements, but may have references from other elements. It may create a protocol, e.g. atoms within a region might be replaced by a continuum model or be subject ro a field. Semantics yet to be determined.
Regions can be created by the unions of two or more regions. This allows a region to be built from a series of (say) spheres or boxes filling space.
    
        

A sphere describing the region

Any point falling within the sphere or on its surface is within the region

A box describing the region

Any point falling within the box or on a boundary is within the region

An atomSet describing the region

Any point falling within atomOffset of any atom in the set lies within the region. This means the region could consist of disjoint fragments. A typical
Creation from union of regions
The union of a series of regions produces a larger region (possibly disjoint). Any point belonging to any of the referenced regions is a member of this region.
The complete system of components in a calculation.

There is no controlled vocabulary but a typical structure is:

        
foo

Not yet written
Dimensionality of the coordinate system.
Note that this means that coordinates of higher dimensionality are ignored or an error is flagged. Thus z3 and dimensionality='2' are incompatible. At present higher dimensionalities than 3 (cf. Wondratschek) are not supported. The labelling of the axes id not controlled. ?? should we have an explicit attribute for labelling convention??
Periodicity of the system.
This represents the number of dimensions (or coordinate axes) along periodic behaviour occurs and can be supported by symmetry operators or other transformations. Periodicity must never exceed dimensionality.
Allowed lattice types.

Allowed lattice types.

<band>
not yet written
</band>
A lattice which uses the translation operator {0, 0.5, 0.5]
User-defined lattice-type.
This definition must be by reference to a namespaced dictionary entry.
Signifies real or reciprocal space
likely to be used on types such as lattice, plane, point
<lattice space="reciprocal">
not yet written
</lattice>
User-defined space-type.
No obvious possibilities, but who knows
A reference to a convention.

There is no controlled vocabulary for conventions, but the author must ensure that the semantics are openly available and that there are mechanisms for implementation. The convention is inherited by all the subelements, so that a convention for molecule would by default extend to its bond and atom children. This can be overwritten if necessary by an explicit convention.

It may be useful to create conventions with namespaces (e.g. iupac:name). Use of convention will normally require non-STMML semantics, and should be used with caution. We would expect that conventions prefixed with "ISO" would be useful, such as ISO8601 for dateTimes.

There is no default, but the conventions of STMML or the related language (e.g. CML) will be assumed.

<bond convention="fooChem" order="-5"></bond>
A delimiter character for arrays and matrices.
By default array components ('elements' in the non-XML sense) are whitespace-separated. This fails for components with embedded whitespace or missing completely:
        Example:
        In the protein database ' CA' and 'CA' are different atom types, and and array could be:
        <array delimiter="/" dictRef="pdb:atomTypes">/ N/ CA/CA/ N/</array> 
        
Note that the array starts and ends with the delimiter, which must be chosen to avoid accidental use. There is currently no syntax for escaping delimiters.
The dataType of an (simple) element or attribute.

A reference to a dictionary entry.

Elements in data instances such as scalar may have a dictRef attribute to point to an entry in a dictionary. To avoid excessive use of (mutable) filenames and URIs we recommend a namespace prefix, mapped to a namespace URI in the normal manner. In this case, of course, the namespace URI must point to a real XML document containing entry elements and validated against STMML Schema.

Where there is concern about the dictionary becoming separated from the document the dictionary entries can be physically included as part of the data instance and the normal XPointer addressing mechanism can be used.

This attribute can also be used on dictionary elements to define the namespace prefix

<stmml title="dictRef example">

<scalar dataType="xsd:float" title="surfaceArea" dictRef="cmlPhys:surfArea" units="units:cm2">50</scalar>
</stmml>
<stmml title="dictRef example 2">
<stm:list>
<stm:observation>
<p>We observed <object count="3" dictRef="foo:p1"></object>
constructing dwellings of different material</p>
</stm:observation>
<stm:entry id="p1" term="pig">
<stm:definition>A domesticated animal.</stm:definition>
<stm:description>Predators include wolves</stm:description>
<stm:description class="scientificName">Sus scrofa</stm:description>
</stm:entry>
</stm:list>
</stmml>
An attribute providing a unique ID for an element.
An attribute providing a mandatory unique ID for an element.
This is a horrible hack. It should be possible to add 'required' to the attributeGroup where used... (Maybe it is and I am still fighting Schema Wars)
A reference to an element of given type.

ref modifies an element into a reference to an existing element of that type within the document. This is similar to a pointer and it can be thought of a strongly typed hyperlink. It may also be used for "subclassing" or "overriding" elements.

<stmml title="ref example">
<cml>
<molecule id="m1">
<atomArray>
<atom elementType="N"></atom>
<atom elementType="O"></atom>
</atomArray>
</molecule>
<h:p>The action of <molecule ref="#m1"></molecule> on cardiac muscle ...</h:p>
</cml>
</stmml>
The size of an array, matrix, list, etc.
A title on an element.
No controlled value.
<stmml title="title example">
<action title="turn on heat" start="T09:00:00" convention="xsd"></action>
</stmml>
Scientific units on an element.
These must be taken from a dictionary of units. There should be some mechanism for validating the type of the units against the possible values of the element.
A homogenous 1-dimensional array of similar objects.

array manages a homogenous 1-dimensional array of similar objects. These can be encoded as strings (i.e. XSD-like datatypes) and are concatenated as string content. The size of the array should always be >= 1.

The default delimiter is whitespace. The normalize-space() function of XSLT could be used to normalize all whitespace to single spaces and this would not affect the value of the array elements. To extract the elements java.lang.StringTokenizer could be used. If the elements themselves contain whitespace then a different delimiter must be used and is identified through the delimiter attribute. This method is mandatory if it is required to represent empty strings. If a delimiter is used it MUST start and end the array - leading and trailing whitespace is ignored. Thus size+1 occurrences of the delimiter character are required. If non-normalized whitespace is to be encoded (e.g. newlines, tabs, etc) you are recommended to translate it character-wise to XML character entities.

Note that normal Schema validation tools cannot validate the elements of array (they are defined as string) However if the string is split, a temporary schema can be constructed from the type and used for validation. Also the type can be contained in a dictionary and software could decide to retrieve this and use it for validation.

When the elements of the array are not simple scalars (e.g. scalars with a value and an error, the scalars should be used as the elements. Although this is verbose, it is simple to understand. If there is a demand for more compact representations, it will be possible to define the syntax in a later version.

<stmml title="array example 1">

<array size="5" title="value" dataType="xsd:decimal"> 1.23 2.34 3.45 4.56 5.67</array>
</stmml>

the size attribute is not mandatory but provides a useful validity check):

<stmml title="array example 2">

<array size="5" title="initials" dataType="xsd:string" delimiter="/">/A B//C/D-E/F/</array>
</stmml>

Note that the second array-element is the empty string ''.

<stmml title="array example 3">

<array title="mass" size="4" units="unit:g" errorBasis="observedStandardDeviation" minValues="10 11 10 9" maxValues="12 14 12 11" errorValues="1 2 1 1" dataType="xsd:float">11 12.5 10.9 10.2
</array>
</stmml>
The mandatory data type.
All elements of the array must have the same dataType.
an optional array of error values for numeric arrays.
an optional array of minimum values for numeric arrays.
an optional array of maximum values for numeric arrays.
A generic container with no implied semantics.

A generic container with no implied semantics. It just contains things and can have attributes which bind conventions to it. It could often act as the root element in an STM document.

<stmml title="list example">

<list>
<array title="animals" dataType="xsd:string">frog bear toad</array>
<scalar title="weight" dataType="xsd:float">3.456</scalar>
</list>
</stmml>
Type of the list.
Semeantics undefined.
<stmml title="list example">

<list>
<array title="animals" dataType="xsd:string">frog bear toad</array>
<scalar title="weight" dataType="xsd:float">3.456</scalar>
</list>
</stmml>
A rectangular matrix of any quantities.

By default matrix represents a rectangular matrix of any quantities representable as XSD or STMML dataTypes. It consists of rows*columns elements, where columns is the fasting moving index. Assuming the elements are counted from 1 they are ordered V[1,1],V[1,2],...V[1,columns],V[2,1],V[2,2],...V[2,columns], ...V[rows,1],V[rows,2],...V[rows,columns]

By default whitespace is used to separate matrix elements; see array for details. There are NO characters or markup delimiting the end of rows; authors must be careful!. The columns and rows attributes have no default values; a row vector requires a rows attribute of 1.

matrix also supports many types of square matrix, but at present we require all elements to be given, even if the matrix is symmetric, antisymmetric or banded diagonal. The matrixType attribute allows software to validate and process the type of matrix.

<stmml title="matrix example">

<matrix id="m1" title="matrix-1" dictRef="foo:bar" rows="3" columns="3" dataType="xsd:decimal" delimiter="|" matrixType="squareSymmetric" units="unit:m">|1.1|1.2|1.3|1.2|2.2|2.3|1.3|2.3|3.3|</matrix>
</stmml>

Number of rows

Number of columns

units (recommended for numeric quantities!!)

Type of matrix.
Mainly square, but extensible through the xsd:union mechanism.
an optional array of error values for numeric matrices.
an optional array of minimum values for numeric matrices.
an optional array of maximum values for numeric matrices.
A general container for metadata.

A general container for metadata, including at least Dublin Core (DC) and CML-specific metadata

In its simple form each element provides a name and content in a similar fashion to the meta element in HTML. metadata may have simpleContent (i.e. a string for adding further information - this is not controlled).

<stmml title="metadata example">

<list>
<metadataList>
<metadata name="dc:coverage" content="Europe"></metadata>
<metadata name="dc:description" content="Ornithological chemistry"></metadata>
<metadata name="dc:identifier" content="ISBN:1234-5678"></metadata>
<metadata name="dc:format" content="printed"></metadata>
<metadata name="dc:relation" content="abc:def123"></metadata>
<metadata name="dc:rights" content="licence:GPL"></metadata>
<metadata name="dc:subject" content="Informatics"></metadata>
<metadata name="dc:title" content="birds"></metadata>
<metadata name="dc:type" content="bird books on chemistry"></metadata>
<metadata name="dc:contributor" content="Tux Penguin"></metadata>
<metadata name="dc:creator" content="author"></metadata>
<metadata name="dc:publisher" content="Penguinone publishing"></metadata>
<metadata name="dc:source" content="penguinPub"></metadata>
<metadata name="dc:language" content="en-GB"></metadata>
<metadata name="dc:date" content="1752-09-10"></metadata>
</metadataList>
<metadataList>
<metadata name="cmlm:safety" content="mostly harmless"></metadata>
<metadata name="cmlm:insilico" content="electronically produced"></metadata>
<metadata name="cmlm:structure" content="penguinone"></metadata>
<metadata name="cmlm:reaction" content="synthesis of penguinone"></metadata>
<metadata name="cmlm:identifier" content="smiles:O=C1C=C(C)C(C)(C)C(C)=C1"></metadata>
</metadataList>
<metadataList>
<metadata name="foo:institution" content="abc.org"></metadata>
<metadata name="bar" content="xyzzy"></metadata>
<metadata name="$deliberateError" content="error"></metadata>
</metadataList>
</list>
</stmml>
The metadata type.
The metadata.
A general container for metadata elements.
<stmml title="metadata example">

<list>
<metadataList>
<metadata name="dc:coverage" content="Europe"></metadata>
<metadata name="dc:description" content="Ornithological chemistry"></metadata>
<metadata name="dc:identifier" content="ISBN:1234-5678"></metadata>
<metadata name="dc:format" content="printed"></metadata>
<metadata name="dc:relation" content="abc:def123"></metadata>
<metadata name="dc:rights" content="licence:GPL"></metadata>
<metadata name="dc:subject" content="Informatics"></metadata>
<metadata name="dc:title" content="birds"></metadata>
<metadata name="dc:type" content="bird books on chemistry"></metadata>
<metadata name="dc:contributor" content="Tux Penguin"></metadata>
<metadata name="dc:creator" content="author"></metadata>
<metadata name="dc:publisher" content="Penguinone publishing"></metadata>
<metadata name="dc:source" content="penguinPub"></metadata>
<metadata name="dc:language" content="en-GB"></metadata>
<metadata name="dc:date" content="1752-09-10"></metadata>
</metadataList>
<metadataList>
<metadata name="cmlm:safety" content="mostly harmless"></metadata>
<metadata name="cmlm:insilico" content="electronically produced"></metadata>
<metadata name="cmlm:structure" content="penguinone"></metadata>
<metadata name="cmlm:reaction" content="synthesis of penguinone"></metadata>
<metadata name="cmlm:identifier" content="smiles:O=C1C=C(C)C(C)(C)C(C)=C1"></metadata>
</metadataList>
<metadataList>
<metadata name="foo:institution" content="abc.org"></metadata>
<metadata name="bar" content="xyzzy"></metadata>
<metadata name="$deliberateError" content="error"></metadata>
</metadataList>
</list>
</stmml>
An element to hold scalar data.

scalar holds scalar data under a single generic container. The semantics are usually resolved by linking to a dictionary. scalar defaults to a scalar string but has attributes which affect the type.

scalar does not necessarily reflect a physical object (for which object should be used). It may reflect a property of an object such as temperature, size, etc.

Note that normal Schema validation tools cannot validate the data type of scalar (it is defined as string), but that a temporary schema can be constructed from the type and used for validation. Also the type can be contained in a dictionary and software could decide to retrieve this and use it for validation.

<stmml title="scalar example">
<scalar dataType="xsd:decimal" errorValue="1.0" errorBasis="observedStandardDeviation" title="body weight" dictRef="zoo:bodywt" units="units:g">34.3</scalar>
</stmml>
A box in 3-space.
Defined by 6 real numbers (x1, y1, z1), (x2, y2, z2). By default these are Cartesian coordinates (with units specified elsewhere - responsibility of schema creator.) If there is a means of specifying oblique axes (e.g. crystallographic cell) the box may be a parallelipiped. The components are grouped in threes ans separated by a semicolon to avoid problems of guessing the convention
<myBox dataType="stm:box3Type" units="units:cm">1.0 1.0 1.0 ; 2.0 3.0 4.0</myBox>
An array of coordinateComponents for a single coordinate.

An array of coordinateComponents for a single coordinate where these all refer to an X-coordinate (NOT x,y,z) Instances of this type will be used in array-style representation of 2-D or 3-D coordinates.

Currently no machine validation

Currently not used in STMML, but re-used by CML (see example)

<stmml title="coordinateComponentArrayType">

<cml:atomArray x2="1.2 2.3 4.5 6.7"></cml:atomArray>
</stmml>
An x/y coordinate pair.

An x/y coordinate pair consisting of two real numbers, separated by whitespace or a comma. In arrays and matrices, it may be useful to set a separate delimiter

<stmml title="coordinate2Type example">
<list>
<array dataType="xsd:decimal">1.2,3.4 3.2,4.5 6.7,23.1 </array>
<array delimiter="/" dataType="xsd:decimal">/1.2 3.4/3.2 4.5/6.7 23.1/</array>
</list>
</stmml>
An x/y/z coordinate triple.

An x/y/z coordinate triple consisting of three real numbers, separated by whitespace or commas. In arrays and matrices, it may be useful to set a separate delimiter

<stmml title="coordinate3Type example">
<list>
<array dataType="xsd:decimal">1.2,3.4,1.2
3.2,4.5,7.3 6.7,23.1,5.6 </array>
<array delimiter="/" dataType="xsd:decimal">/1.2 3.4 3.3/3.2 4.5 4.5/6.7 23.1 5.6/</array>
</list>
</stmml>

A count multiplier for an element

Many elements represent objects which can occur an arbitrary number of times in a scientific context. Examples are action, object or molecules.

<stmml title="countType example">

<list>
<object title="frog" count="10"></object>
<action title="step3" count="3">
<p>Add 10 ml reagent</p>
</action>
</list>
</stmml>

an enumerated type for all builtin allowed dataTypes in STM

dataTypeType represents an enumeration of allowed dataTypes (at present identical with those in XML-Schemas (Part2- datatypes). This means that implementers should be able to use standard XMLSchema-based tools for validation without major implementation problems.

It will often be used an an attribute on scalar, array or matrix elements.

<stmml title="dataType example">

<list>
<scalar dataType="xsd:boolean" title="she loves me">true</scalar>
<scalar dataType="xsd:float" title="x">23.2</scalar>
<scalar dataType="xsd:duration" title="egg timer">PM4</scalar>
<scalar dataType="xsd:dateTime" title="current data and time">2001-02-01:00:30</scalar>
<scalar dataType="xsd:time" title="wake up">06:00</scalar>
<scalar dataType="xsd:date" title="where is it">1752-09-10</scalar>
<scalar dataType="xsd:anyURI" title="CML site">http://www.xml-cml.org/</scalar>
<scalar dataType="xsd:QName" title="CML atom">cml:atom</scalar>
<scalar dataType="xsd:normalizedString" title="song">the mouse ran up the clock</scalar>
<scalar dataType="xsd:language" title="UK English">en-GB</scalar>
<scalar dataType="xsd:Name" title="atom">atom</scalar>
<scalar dataType="xsd:ID" title="XML ID">_123</scalar>
<scalar dataType="xsd:integer" title="the answer">42</scalar>
<scalar dataType="xsd:nonPositiveInteger" title="zero">0</scalar>
</list>
</stmml>
A non-whitespace character used in arrays to separate components.

Some STMML elements (such as array) have content representing concatenated values. The default separator is whitespace (which can be normalised) and this should be used whenever possible. However in some cases the values are empty, or contain whitespace or other problematic punctuation, and a delimiter is required.

Note that the content string MUST start and end with the delimiter so there is no ambiguity as to what the components are. Only printable characters from the ASCII character set should be used, and character entities should be avoided.

When delimiters are used to separate precise whitespace this should always consist of spaces and not the other allowed whitespace characters (newline, tabs, etc.). If the latter are important it is probably best to redesign the application.

<stmml title="delimiter example">

<array size="4" dataType="xsd:string" delimiter="|">|A|B12||D and E|</array>
</stmml> The values in the array are "A", "B12", "" (empty string) and "D and E" note the spaces
The basis of an error value.

Errors in values can be of several types and this simpleType provides a small controlled vocabulary

<stmml title="scalar example">
<scalar dataType="xsd:decimal" errorValue="1.0" errorBasis="observedStandardDeviation" title="body weight" dictRef="zoo:bodywt" units="units:g">34.3</scalar>
</stmml>
An observed or calculated estimate of the error in the value of a numeric quantity.

An observed or calculated estimate of the error in the value of a numeric quantity. . It should be ignored for dataTypes such as URL, date or string. The statistical basis of the errorValueType is not defined - it could be a range, an estimated standard deviation, an observed standard error, etc. This information can be added through errorBasisType.

<stmml title="scalar example">
<scalar dataType="xsd:decimal" errorValue="1.0" errorBasis="observedStandardDeviation" title="body weight" dictRef="zoo:bodywt" units="units:g">34.3</scalar>
</stmml>
A unique ID for an element.

This is not formally of type ID (an XML NAME which must start with a letter and contain only letters, digits and .-_:). It is recommended that IDs start with a letter, and contain no punctuation or whitespace. The function generate-id() in XSLT will generate semantically void unique IDs.

It is difficult to ensure uniqueness when documents are merged. We suggest namespacing IDs, perhaps using the containing elements as the base. Thus mol3:a1 could be a useful unique ID. However this is still experimental.

An array of floats.

An array of floats or other real numbers. Not used in STM Schema, but re-used by CML and other languages.

<atomArray x2="1.2 2.3 3.4 5.6"></atomArray>
An array of integers.

An array of integers; for re-use by other schemas

Not machine-validatable

<stmml title="integerArray type">

<atomArray hydrogenCount="3 1 0 2"></atomArray>
</stmml>
The maximum INCLUSIVE value of a quantity.

The maximum INCLUSIVE value of a sortable quantity such as numeric, date or string. It should be ignored for dataTypes such as URL. The use of min and max attributes can be used to give a range for the quantity. The statistical basis of this range is not defined. The value of max is usually an observed quantity (or calculated from observations). To restrict a value, the maxExclusive type in a dictionary should be used.

The type of the maximum is the same as the quantity to which it refers - numeric, date and string are currently allowed

<stmml title="maxType example">

<scalar dataType="xsd:float" max="20" min="12">15</scalar>
</stmml>
Allowed matrix types.

Allowed matrix types. These are mainly square matrices

<stmml title="matrix example">

<matrix id="m1" title="matrix-1" dictRef="foo:bar" rows="3" columns="3" dataType="xsd:decimal" delimiter="|" matrixType="squareSymmetric" units="unit:m">|1.1|1.2|1.3|1.2|2.2|2.3|1.3|2.3|3.3|</matrix>
</stmml>
Symmetric. Elements are zero except on the diagonal.
Square. Elements are zero below the diagonal
1 2 3 4
0 3 5 6
0 0 4 8
0 0 0 2
      
Symmetric. Elements are zero except on the diagonal.
User-defined matrix-type.
This definition must be by reference to a namespaced dictionary entry.
The name of the metadata.
Metadata consists of name-value pairs (value is in the "content" attribute). The names are from a semi-restricted vocabulary, mainly Dublin Core. The content is unrestricted. The order of metadata has no implied semantics at present. Users can create their own metadata names using the namespaced prefix syntax (e.g. foo:institution). Ideally these names should be defined in an STMML dictionary.
2003-03-05: Added UNION to manage non-controlled names
The extent or scope of the content of the resource.
Coverage will typically include spatial location (a place name or geographic coordinates), temporal period (a period label, date, or date range) or jurisdiction (such as a named administrative entity). Recommended best practice is to select a value from a controlled vocabulary (for example, the Thesaurus of Geographic Names [TGN]) and that, where appropriate, named places or time periods be used in preference to numeric identifiers such as sets of coordinates or date ranges.
An account of the content of the resource.
Description may include but is not limited to: an abstract, table of contents, reference to a graphical representation of content or a free-text account of the content.
An unambiguous reference to the resource within a given context.
Recommended best practice is to identify the resource by means of a string or number conforming to a formal identification system. Example formal identification systems include the Uniform Resource Identifier (URI) (including the Uniform Resource Locator (URL)), the Digital Object Identifier (DOI) and the International Standard Book Number (ISBN).
The physical or digital manifestation of the resource.
Typically, Format may include the media-type or dimensions of the resource. Format may be used to determine the software, hardware or other equipment needed to display or operate the resource. Examples of dimensions include size and duration. Recommended best practice is to select a value from a controlled vocabulary (for example, the list of Internet Media Types [MIME] defining computer media formats).
A reference to a related resource.
Recommended best practice is to reference the resource by means of a string or number conforming to a formal identification system.
Information about rights held in and over the resource.
Typically, a Rights element will contain a rights management statement for the resource, or reference a service providing such information. Rights information often encompasses Intellectual Property Rights (IPR), Copyright, and various Property Rights. If the Rights element is absent, no assumptions can be made about the status of these and other rights with respect to the resource.
The topic of the content of the resource.
Typically, a Subject will be expressed as keywords, key phrases or classification codes that describe a topic of the resource. Recommended best practice is to select a value from a controlled vocabulary or formal classification scheme.
A name given to the resource.
Typically, a Title will be a name by which the resource is formally known.
The nature or genre of the content of the resource.
Type includes terms describing general categories, functions, genres, or aggregation levels for content. Recommended best practice is to select a value from a controlled vocabulary (for example, the working draft list of Dublin Core Types [DCT1]). To describe the physical or digital manifestation of the resource, use the FORMAT element.
An entity responsible for making contributions to the content of the resource.
Examples of a Contributor include a person, an organisation, or a service. Typically, the name of a Contributor should be used to indicate the entity.
An entity primarily responsible for making the content of the resource.
Examples of a Creator include a person, an organisation, or a service. Typically, the name of a Creator should be used to indicate the entity.
An entity responsible for making the resource available.
Examples of a Publisher include a person, an organisation, or a service. Typically, the name of a Publisher should be used to indicate the entity.
A Reference to a resource from which the present resource is derived.
The present resource may be derived from the Source resource in whole or in part. Recommended best practice is to reference the resource by means of a string or number conforming to a formal identification system.
A language of the intellectual content of the resource.
Recommended best practice for the values of the Language element is defined by RFC 1766 [RFC1766] which includes a two-letter Language Code (taken from the ISO 639 standard [ISO639]), followed optionally, by a two-letter Country Code (taken from the ISO 3166 standard [ISO3166]). For example, 'en' for English, 'fr' for French, or 'en-uk' for English used in the United Kingdom.
A date associated with an event in the life cycle of the resource.
Typically, Date will be associated with the creation or availability of the resource. Recommended best practice for encoding the date value is defined in a profile of ISO 8601 [W3CDTF] and follows the YYYY-MM-DD format.
Entry contains information relating to chemical safety.
Typically the content will be a reference to a handbook, MSDS, threshhold or other human-readable string
Part or whole of the information was computer-generated.
Typically the content will be the name of a method or a program
3D structure included.
details included
The minimum INCLUSIVE value of a quantity.

The minimum INCLUSIVE value of a sortable quantity such as numeric, date or string. It should be ignored for dataTypes such as URL. The use of min and min attributes can be used to give a range for the quantity. The statistical basis of this range is not defined. The value of min is usually an observed quantity (or calculated from observations). To restrict a value, the minExclusive type in a dictionary should be used.

The type of the minimum is the same as the quantity to which it refers - numeric, date and string are currently allowed

<stmml title="maxType example">

<scalar dataType="xsd:float" max="20" min="12">15</scalar>
</stmml>
A string referencing a dictionary, units, convention or other metadata.

The namespace is optional but recommended where possible

Note: this convention is only used within STMML and related languages; it is NOT a generic URI.

<stmml title="namespace example">

<list>

<scalar dictRef="chem:mpt">123</scalar>

<scalar dictRef="mpt23">123</scalar>
</list>
</stmml>

The namespace prefix must start with an alpha character and can only contain alphanumeric and '_'. The suffix can have characters from the XML ID specification (alphanumeric, '_', '.' and '-'

A positive number. Note that we also provide nonNegativeNumber with inclusive zero. The maximum number is (quite large) since 'unbounded' is more difficult to implement. This is greater than Eddington's estimate of the number of particles in the universe so it should work for most people.
A reference to an existing element.

A reference to an existing element in the document. The target of the ref attribute must exist. The test for validity will normally occur in the element's appinfo

Any DOM Node created from this element will normally be a reference to another Node, so that if the target node is modified a the dereferenced content is modified. At present there are no deep copy semantics hardcoded into the schema.

The size of an array.

The size of an array. Redundant, but serves as a check for processing software (useful if delimiters are used)

Scientific units.

These will be linked to dictionaries of units with conversion information, using namespaced references (e.g. si:m)

Distinguish carefully from unitType which is an element describing a type of a unit in a unitList

<stmml title="unitList example">
<stm:unitList>





<stm:unitType id="length" name="length">
<stm:dimension name="length" power="1"></stm:dimension>
</stm:unitType>

<stm:unitType id="time" name="time">
<stm:dimension name="time" power="1"></stm:dimension>
</stm:unitType>



<stm:unitType id="dimensionless" name="dimensionless">
<stm:dimension name="dimensionless" power="1"></stm:dimension>
</stm:unitType>





<stm:unitType id="acceleration" name="acceleration">
<stm:dimension name="length" power="1"></stm:dimension>
<stm:dimension name="time" power="-2"></stm:dimension>
</stm:unitType>







<stm:unit id="second" name="second" unitType="time">
<stm:description>The SI unit of time</stm:description>
</stm:unit>

<stm:unit id="meter" name="meter" unitType="length" abbreviation="m">
<stm:description>The SI unit of length</stm:description>
</stm:unit>



<stm:unit id="kg" name="nameless" unitType="dimensionless" abbreviation="nodim">
<stm:description>A fictitious parent for dimensionless units</stm:description>
</stm:unit>





<stm:unit id="newton" name="newton" unitType="force">
<stm:description>The SI unit of force</stm:description>
</stm:unit>





<stm:unit id="g" name="gram" unitType="mass" parentSI="kg" multiplierToSI="0.001" abbreviation="g">
<stm:description>0.001 kg. </stm:description>
</stm:unit>

<stm:unit id="celsius" name="Celsius" parentSI="k" multiplierToSI="1" constantToSI="273.18">
<stm:description><p>A common unit of temperature</p></stm:description>
</stm:unit>



<stm:unit id="inch" name="inch" parentSI="meter" abbreviation="in" multiplierToSI="0.0254">
<stm:description>An imperial measure of length</stm:description>
</stm:unit>



<stm:unit id="l" name="litre" unitType="volume" parentSI="meterCubed" abbreviation="l" multiplierToSI="0.001">
<stm:description>Nearly 1 dm**3 This is not quite exact</stm:description>
</stm:unit>



<stm:unit id="fahr" name="fahrenheit" parentSI="k" abbreviation="F" multiplierToSI="0.55555555555555555" constantToSI="-17.777777777777777777">
<stm:description>An obsolescent unit of temperature still used in popular
meteorology</stm:description>
</stm:unit>

</stm:unitList>
</stmml>
An unbounded line in 3-space
Defined by 6 real numbers, conventionally an arbitrary point on the line and a vector3. There is no significance to the point (i.e. it is not the "end of the line"
<myLine dataType="stm:line3Type">1 2 3 4 5 6</myLine>
An unbounded plane in 3-space
Defined by 4 real numbers, conventionally a vector3 normal to the plane and a signed scalar representing the distance to the origin. The vector must not be of zero length (and need not be normalized)
<myPlane dataType="stm:plane3Type">1 2 3 4</myPlane>
A point in 3-space
<myPoint dataType="stm:plane3Type">1 2 3</myPoint>
A sphere in 3-space
Defined by 4 real numbers, conventionally a point3 at the centre of the sphere and a nonNegative scalar for the radius
<mySphere dataType="stm:sphere3Type">1 2 3 4</mySphere>
A vector in 3-space
No constraints on magnitude (i.e. could be zero)
<myVector dataType="stm:vector3Type">2.0 3.0 4.0</myVector>
A reference to an atom.
Typical use would be a bond with only one atom (e.g. the other end is to a bond or electrons).
An array of references to atoms.
Typical use would be to atoms defining a plane.
A list of two references to atoms.
Typically used for defining bonds.
A list of three references to atoms.
Typically used for defining angles, but could also be used to define a three-centre bond.
A list of 4 references to atoms.
Typically used for defining torsions and atomParities, but could also be used to define a four-centre bond.
Restricts units to radians or degrees.
A "bond" angle between three atoms.

It can be used for:

  • Recording experimentally determined bond angles (e.g. in a crystallographic paper).
  • Providing the angle component for internal coordinates (e.g. z-matrix).
<molecule id="m1" title="angle example">
<atomArray>
<atom id="a1"></atom>
<atom id="a2"></atom>
<atom id="a3"></atom>
</atomArray>
<angle units="degrees" atomRefs3="a1 a2 a3">123.4</angle>
</molecule>
An atom.

Usually within a molecule. It is almost always contained within atomArray.

<cml title="single atom example">
<atom id="a1" title="O3'" elementType="O" formalCharge="1" hydrogenCount="1" isotope="17" occupancy="0.7" x2="1.2" y2="2.3" x3="3.4" y3="4.5" z3="5.6" convention="ABC" dictRef="chem:atom">
<scalar title="dipole" dictRef="d:dip" units="units:debye">0.2</scalar>
<atomParity atomRefs4="a3 a7 a2 a4">1</atomParity>
<electron id="e1" atomRef="a1" count="2"></electron>
</atom>
</cml>

the electron children: One or more electrons associated with the atom. The atomRef on the electron should point to the id on the atom. We may relax this later and allow reference by context.

The occurrence count of the atom.
Most useful in formula but possibly useful in atomArray where coordinates and connectivity is not defined. No formal default, but assumed to be 1.

The elementType. Almost mandatory

The formalCharge on the atom (in electrons).
NOT the calculated charge or oxidation state. No formal default, but its absence implies 0. It may be good practice to include it explicitly.

The explicit hydrogen count

The non-hydrogen count (obsolete - moved to CML Query)

The isotopic mass. Default implies "natural abundance"

The occupancy (mainly from crystallography)

The x coordinate (arbitrary units) of a 2-D representation (unrelated to 3-D structure). Note that x- and y- 2D coordinates are required for graphical stereochemistry such as wedge/hatch. x- and y- coordinates must be both present or both absent.

The x coordinate (in Angstrom units) of a 3-D cartesian representation. x3 y3 and z3 coordinates must be both present or both absent.

The fractional x coordinate in a crystal structure. xFract, yFract and zFract coordinates must be all present or all absent. A crystal element is required

The combined x and y coordinates of a 2-D representation (unrelated to 3-D structure). Note that x- and y- 2D coordinates are required for graphical stereochemistry such as wedge/hatch.

The combined x, y, z coordinates (in Angstrom units) of a 3-D cartesian representation.

The combined x, y, z fractional coordinates in a crystal structure. A crystal element is required

The y coordinate (arbitrary units) of a 2-D representation (unrelated to 3-D structure). Note that x2 and y2 coordinates are required for graphical stereochemistry such as wedge/hatch. x2 and y2 coordinates must be both present or both absent.

The y coordinate (in Angstrom units) of a 3-D cartesian representation. x3 y3 and z3 coordinates must be both present or both absent.

The fractional x coordinate in a crystal structure. xFract, yFract and zFract coordinates must be all present or all absent. A crystal element is required

The z coordinate (in Angstrom units) of a 3-D cartesian representation. x3 y3 and z3 coordinates must be both present or both absent.

The fractional x coordinate in a crystal structure. xFract, yFract and zFract coordinates must be all present or all absent. A crystal element is required

This can be used to describe the purpose of atoms whose elementTypes are dummy or locant.

A container for a list of atoms.
A child of molecule and contains atom information. There are two strategies:
  • Create individual atom elements under atomArray (in any order). This gives the greatest flexibility but is the most verbose.
  • Create *Array attributes (e.g. of elementTypeArrayType under atomArray. This requires all arrays to be of identical lengths with explicit values for all atoms in every array. This is NOT suitable for complexType atom children such as atomParity or composite types such as xy2. It also cannot be checked as easily by schema- and schematron validation. The atomIDArray attribute is mandatory. It is allowed (though not yet recommended) to add *Array children such as floatArray

The attributes are directly related to the scalar attributes under atom which should be consulted for more info.

NOTE: The CML-1 specifications are also supported but are deprecated

.
<cml title="atomArray CML1">
<list>
<atomArray>
<atom id="a1" elementType="O" hydrogenCount="1"></atom>
<atom id="a2" elementType="N" hydrogenCount="1"></atom>
<atom id="a3" elementType="C" hydrogenCount="3"></atom>
</atomArray>

<atomArray atomID="a1 a2 a3" elementType="O N C" hydrogenCount="1 1 3"></atomArray>
</list>
</cml>

Example - these are exactly equivalent representations

Almost mandatory. see elementType
See count
See x2
See x3
See xFract
See y2
See y3
See yFract
See z3
See zFract
See atomID
A bond between atoms, or between atoms and bonds.

bond is a child of bondArray and contains bond information. Bond must refer to at least two atoms (using atomRefs2) but may also refer to more for multicentre bonds. Bond is often EMPTY but may contain electron, length or bondStereo elements.

<cml title="bondArray example">
<bondArray>
<bond id="b1" atomRefs2="a3 a8" order="D">
<electron bondRef="b1"></electron>
<bondStereo>C</bondStereo>
</bond>
<bond id="b2" atomRefs2="a3 a8" order="S">
<bondStereo convention="MDL" conventionValue="6"></bondStereo>
</bond>
</bondArray>
</cml>
<cml title="metal-bond example">

<atomArray>
<atom id="pt1" elementType="Pt"></atom>
<atom id="cl1" elementType="Cl"></atom>
<atom id="cl2" elementType="Cl"></atom>
<atom id="cl3" elementType="Cl"></atom>
<atom id="c1" elementType="C" hydrogenCount="2"></atom>
<atom id="c2" elementType="C" hydrogenCount="2"></atom>
</atomArray>
<bondArray>
<bond id="b1" atomRefs2="c1 c2" order="D"></bond>
<bond id="b2" atomRefs2="pt1 cl1" order="S"></bond>
<bond id="b3" atomRefs2="pt1 cl2" order="S"></bond>
<bond id="b4" atomRefs2="pt1 cl3" order="S"></bond>
<bond id="b5" atomRefs="pt1" bondRefs="b1"></bond>
</bondArray>
</cml>
Validate Bonds
One or more electrons associated with the bond.

. The bondRef on the electron should point to the id on the bond. We may relax this later and allow reference by context.(We

The stereo convention for the bond.

only one convention allowed

The two atoms in the bond.

. This will be the normal reference attribute on the bond element. The order of atoms is preserved and may matter for some conventions (e.g. wedge/hatch or donor bonds)

The atoms in the bond.

. This is designed for multicentre bonds (as in delocalised systems or electron-deficient centres. The semantics are experimental at this stage. As an example, a B-H-B bond might be described as <bond atomRefs="b1 h2 b2"/>

Bonds involved in the bond.

. This is designed for pi-bonds and other systems where formal valence bonds are not drawn to atoms. The semantics are experimental at this stage. As an example, a Pt-|| bond (as the Pt-ethene bond in Zeise's salt) might be described as <bond atomRefs="pt1" bondRefs="b32"/>

The order of the bond.

There is NO default. This order is for bookkeeping only and is not related to length, QM calculations or other experimental or theoretical calculations. see orderType

A container for a number of bonds.

bondArray is a child of molecule and contains bond information. There are two strategies:

  • Create individual bond elements under bondArray (in any order). This gives the greatest flexibility but is the most verbose.
  • Create *Array attributes (e.g. of orderArrayType under bondArray. This requires all arrays to be of identical lengths with explicit values for all bonds in every array. This is NOT suitable for complexType bond children such as bondStereo , nor can IDs be added to bonds.. It also cannot be checked as easily by schema- and schematron validation. The atomRef1Array and atomRef2Array attributes are then mandatory. It is allowed (though not yet recommended) to add *Array children such as floatArray

The attributes are directly related to the scalar attributes under atom which should be consulted for more info.

<cml title="bondArray example 1">
<list>
<bondArray>
<bond id="b1" atomRefs2="a1 a2" order="1"></bond>
<bond id="b2" atomRefs2="a1 a3" order="2"></bond>
<bond id="b3" atomRefs2="a3 a5" order="1"></bond>
</bondArray>
<bondArray atomRef1="a1 a1 a3" atomRef2="a2 a3 a5" order="1 2 1"></bondArray>
</list>
</cml>

Example - these are exactly equivalent representations

The IDs for the bonds. Required in array mode

The first atoms in each bond. Required in array mode

The second atoms in each bond. Required in array mode

The bond orders in each bond. Used in array mode

A general container for CML elements.

Often the root of the CML (sub)document. Has no explicit function but serves to hold the dictionaries, namespace, and can alert CML processors and search/XMLQuery tools that there is chemistry in the document. Can contain any content, but usually a list of molecules and other CML components. Can be nested

<cml id="c1" title="demo of cml subelements">
<stm:dictionary dictRef="d1" href="dict1.xml"></stm:dictionary>
<stm:unitList dictRef="u1" href="units1.xml"></stm:unitList>
<cml>
<molecule id="m1"></molecule>
</cml>
<molecule id="m2" title="dummy"></molecule>
<metadata></metadata>
<reaction>
<reactantList>
<molecule id="r1"></molecule>
</reactantList>
<productList>
<molecule id="p1"></molecule>
</productList>
</reaction>
<spectrum>
<data>
<stm:array></stm:array>
<stm:array></stm:array>
</data>
</spectrum>
<substanceList id="subList1"></substanceList>
<list>
<scalar title="some scalar"></scalar>
</list>
</cml>
No specific restrictions.
One or more electrons.

Since there is very little use of electrons in current chemical information this is a fluid concept. I expect it to be used for electron counting, input and output of theochem operations, descriptions of orbitals, spin states, oxidation states, etc. Electrons can be associated with atoms, bonds and combinations of these. At present there is no hardcoded semantics. However, atomRef and similar attributes can be used to associate electrons with atoms or bonds

<cml title="electron example">
<molecule id="m1">
<atomArray atomID="a1 a2 a3 a4 a5 a6"></atomArray>
<bondArray order="A A A A A A" bondID="b1 b2 b3 b4 b5 b6" atomRef1="a1 a2 a3 a4 a5 a6" atomRef2="a6 a1 a2 a3 a4 a5"></bondArray>
<electron count="6" bondRefs="b1 b2 b3 b4 b5 b6" atomRefs="a1 a2 a3 a4 a5 a6"></electron>
</molecule>
</cml>
The number of electrons.
No formal default, but assumed to be 1. At present restricted to integers.
The stochiometry of the molecule.

It is defined by atomArrays each with a list of elementTypes and their counts (or default=1). All other information in the atomArray is ignored. formula are nestable so that aggregates (e.g. hydrates, salts, etc.) can be described. CML does not require that formula information is consistent with (say) crystallographic information; this allows for experimental variance.

An alternative briefer representation is also available through the conciseForm. This must include whitespace round all elements and their counts, which must be explicit.

<cml title="formula example">
<molecule id="sulfuricAcid">
<formula concise="H 2 S 1 O 4"></formula>
</molecule>
<molecule id="CuprammoniumSulfate">
<formula title="[Cu(NH3)4]2+ SO42-]">
<formula formalCharge="+2">
<atomArray elementType="Cu"></atomArray>
<formula count="4">
<atomArray elementType="N H" count="1 3"></atomArray>
</formula>
</formula>
<formula formalCharge="-2">
<atomArray elementType="S O" count="1 4"></atomArray>
</formula>
</formula>
</molecule>
</cml>