<?xml version="1.0" encoding="UTF-8"?>
<!--

       Copyright 2011 Peter Murray-Rust et. al.

       Licensed under the Apache License, Version 2.0 (the "License");
       you may not use this file except in compliance with the License.
       You may obtain a copy of the License at

           http://www.apache.org/licenses/LICENSE-2.0

       Unless required by applicable law or agreed to in writing, software
       distributed under the License is distributed on an "AS IS" BASIS,
       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       See the License for the specific language governing permissions and
       limitations under the License.

-->

<schema xmlns="http://www.w3.org/2001/XMLSchema">
 <xsd:attributeGroup id="attGp.abbreviation" name="abbreviation" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.abbreviation" name="abbreviation" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Abbreviation.</h:div>
     <h:div class="description">Abbreviation for units, terms, etc.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.actionOrder" name="actionOrder" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="order" id="att.actionOrder" type="actionOrderType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Describes whether child elements are sequential or parallel.</h:div>
     <h:div class="description">There is no default.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.alternativeType" name="alternativeType" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute name="type" id="att.alternativeType" type="alternativeTypeType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The type of an alternative.</h:div>
     <h:div class="general">This adds semantics to an _alternative_ and might be used by an RDF or related engine.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.angleUnits" name="angleUnits" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute id="att.angleUnits" name="units" type="angleUnitsType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Restricts units to radians or degrees.</h:div>
     <h:div class="description"/>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.atomIDArray" name="atomIDArray" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute name="atomID" id="att.atomIDArray" type="atomRefArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">An array of atom IDs.</h:div>
     <h:div class="description">Normally an attribute of an array-based element.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.atomMap" name="atomMap" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.atomMap" name="atomMap" type="idType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A reference to a map providing mappings between atoms</h:div>
     <h:div class="description">The map will normally be contained within the same document and referenced by its ID. It will contain a list of links with from and to attributes linking atoms. The topology of the linking is defined by the application - it could be overlay of molecular fragments, reactant/product mapping, etc. The reserved phrase "USE_IDS" assume that the sets of atoms are of equal size and have 1:1 mapping between each id. This is another way of saying that the atoms mapped by a given ID are "the same atom". </h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.atomRef" name="atomRef" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.atomRef" name="atomRef" type="atomRefType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A reference to an atom.</h:div>
     <h:div class="description">Used by bond, electron, etc.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.atomRef1Array" name="atomRef1Array" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute name="atomRef1" id="att.atomRef1Array" type="atomRefArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The first atoms in each bond.</h:div>
     <h:div class="description">Currently only used in bondArray in CML2 array mode.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.atomRef2Array" name="atomRef2Array" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute name="atomRef2" id="att.atomRef2Array" type="atomRefArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The second atoms in each bond.</h:div>
     <h:div class="general">Only used in bondArray in CML2 array mode.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.atomRefArray" name="atomRefArray" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.atomRefArray" name="atomRefArray" type="atomRefArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">An array of references to atoms.</h:div>
     <h:div class="description">Typical use would be to atoms defining a plane.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.atomRefGroup" name="atomRefGroup" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.atomRefGroup" name="atomRefGroup" type="atomIDType"/>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.atomRefs" name="atomRefs" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="atomRefs" id="att.atomRefs" type="atomRefArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A reference to a list of atoms.</h:div>
     <h:div class="description">Used by bonds, electrons, atomSets, etc.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.atomRefs2" name="atomRefs2" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="atomRefs2" id="att.atomRefs2" type="atomRefs2Type">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">References to two different atoms.</h:div>
     <h:div class="description">Available for any reference to atoms but normally 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.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.atomRefs3" name="atomRefs3" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.atomRefs3" name="atomRefs3" type="atomRefs3Type">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A list of three references to atoms.</h:div>
     <h:div class="description">Typically used for defining angles, but could also be used to define a three-centre bond.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.atomRefs4" name="atomRefs4" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.atomRefs4" name="atomRefs4" type="atomRefs4Type">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A list of 4 references to atoms.</h:div>
     <h:div class="description">Typically used for defining torsions and atomParities, but could also be used to define a four-centre bond.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.atomSetRef" name="atomSetRef" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="atomSetRef" type="refType" id="att.atomSetRef">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">An atomSet describing the region.</h:div>
     <h:div class="description">Any point falling within atomOffset of any atom in the set lies within the region. This means the region could consist of disjoint fragments.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.bondIDArray" name="bondIDArray" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute name="bondID" id="att.bondIDArray" type="bondRefArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The IDs for an array of bond.</h:div>
     <h:div class="general">Required in CML2 array mode.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.bondMap" name="bondMap" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.bondMap" name="bondMap" type="xsd:QName">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A reference to a map providing mappings between bonds</h:div>
     <h:div class="description">The map will normally be contained within the same document and referenced by its ID. It will contain a list of links with from and to attributes linking bonds. The topology of the linking is defined by the application - it could be overlay of molecular fragments, reactant/product mapping, etc. The reserved phrase "USE_IDS" assume that the sets of bonds are of equal size and have 1:1 mapping between each id. This is another way of saying that the bonds mapped by a given ID are "the same bond". </h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.bondRef" name="bondRef" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="bondRef" id="att.bondRef" type="bondRefType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A reference to a bond.</h:div>
     <h:div class="description">used by electron, etc.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.bondRefs" name="bondRefs" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="bondRefs" id="att.bondRefs" type="bondRefArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A reference to a list of bonds.</h:div>
     <h:div class="description">Used by electrons, bondSets, etc.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.box3" name="box3" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="box3" type="box3Type" id="att.box3">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A parallelipiped box.</h:div>
     <h:div class="description">By default the box uses isometric Cartesians axes but can also be linked to lattice Vector. Any point falling within the box or on a boundary is within the regio.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.builtin" name="builtin" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="builtin" id="att.builtin" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">builtin children.</h:div>
     <h:div class="description">CML1-only - now deprecated.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.cellParameterError" name="cellParameterError" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name-->
  <xsd:attribute name="error" type="vector3Type" id="att.cellParameterError">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Error array for cellParameter</h:div>
     <h:div class="description">3 numbers giving error limits on paremters.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.cellParameterType" name="cellParameterType" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name-->
  <xsd:attribute id="att.cellParameterType" name="type" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The type of a cellParameter.</h:div>
     <h:div class="description">length or angle</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.chirality" name="chirality" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="chirality" id="att.chirality" type="chiralityType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The chirality of a system or molecule.</h:div>
     <h:div class="description">This is being actively investigated by a IUPAC committee (2002) so the convention is likely to change. No formal default.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.columns" name="columns" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="columns" id="att.columns" type="sizeType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Number of columns.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.concise" name="concise" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="concise" id="att.concise" type="formulaType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A concise formula.</h:div>
     <h:div class="general">The string represents an (unstructured) formula i.e. no submolecules. Recommended to use the format "H 2 O 1", etc.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.constantToData" name="constantToData" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.constantToData" name="constantToData" type="xsd:double" default="0.0">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The constant to add to the raw data.</h:div>
     <h:div class="description"> add *after* applying any multiplier.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.constantToSI" name="constantToSI" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.constantToSI" name="constantToSI" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Additive constant to generate SI equivalent.</h:div>
     <h:div class="description">The amount to add to a quantity in non-SI units to convert its representation to SI Units. This is applied *after* multiplierToSI. It is necessarily zero for SI units.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.constraint" name="constraint" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="constraint" id="att.constraint" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Constraint on a parameter.</h:div>
     <h:div class="description">Semantics not yet finalised. We anticipate "fixed", "none" and symbolic relationships to other parameters.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.content" name="content" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="content" type="xsd:string" id="att.content">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">content of metadata.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup name="convention" id="attGp.convention" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.convention" name="convention" type="refType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A reference to a convention.</h:div>
     <h:div class="description">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 
      <h:tt>molecule</h:tt> would by default extend to its 
      <h:tt>bond</h:tt> and 
      <h:tt>atom</h:tt> children. This can be overwritten if necessary by an explicit 
      <h:tt>convention</h:tt>. 
      <h:p>It may be useful to create conventions with namespaces (e.g. 
       <h:tt>iupac:name</h:tt>). Use of 
       <h:tt>convention</h:tt> 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.
      </h:p>
      <h:p>There is no default, but the conventions of STMML or the related language (e.g. CML) will be assumed.</h:p>
     </h:div>
     <h:div class="example" id="ex" href="convGroup1.xml"/>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.conventionValue" name="conventionValue" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="conventionValue" id="att.conventionValue" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The value of an element with a _convention_.</h:div>
     <h:div class="description">When convention is used this attribute must be present and element content must be empty.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.count" name="count" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.count" name="count" type="positiveNumberType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The count of the object.</h:div>
     <h:div class="description">No fixed semantics or default, normally integers. It is presumed that the element can be multiplied by the count value.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.countArray" name="countArray" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.countArray" name="count" type="countArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Array of object counts.</h:div>
     <h:div class="description">No fixed semantics or default, normally integral. It is presumed that the element can be multiplied by the count value.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.countExpression" name="countExpression" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.countExpression" name="countExpression" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">General formula for the repeat count of the element.</h:div>
     <h:div class="description">Experimental. No fixed semantics or default. </h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.cyclic" name="cyclic" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="cyclic" id="att.cyclic" type="cyclicType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The cyclic nature of a bond.</h:div>
     <h:div class="description">This is an assertion by a human or program about the cyclic nature of a bond. It need not correspond to what is deducible from the connection table (e.g. a bond in a ring might be labelled as 'acyclic' or 'unknown')</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.dataType" name="dataType" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.dataType" name="dataType" type="dataTypeType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The data type of the object.</h:div>
     <h:div class="description">Normally applied to scalar/array objects but may extend to more complex one.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.default" name="default" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="default" type="xsd:string" id="att.default">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">default value in an enumeration.</h:div>
     <h:div class="description">A non-whitespace string (value is irrelevant) indicates that the content of this enumeration is the default value (usually of a scalar). It is an error to have more than one default. If the scalar in an instance document has no value (i.e. is empty or contains only whitespace) its value is given by the default. If the scalar in the instance is empty and no enumerations have a default attribute, an application may throw an error.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.delete" name="delete" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="delete" id="att.delete" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A flag indicated that the element can detach/delete itself.</h:div>
     <h:div class="description">An element containg this attribute may only have a transient existence (e.g. a template to create other elements) and this attribute shows that the element can be deleted at the appropriate stage. The time at which this is called is application dependent. At present the presence of the attribute is sufficient to trigger this; later a controlled vocabulary will be developed.</h:div>
     <h:div class="summary">2006-05-21: PMR added attribute.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.delimiter" name="delimiter" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.delimiter" name="delimiter" type="delimiterType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A delimiter character for arrays and matrices.</h:div>
     <h:div class="description">By default array components ('elements' in the non-XML sense) are whitespace-separated. This fails for components with embedded whitespace or missing completely: 
      <h:pre> Example: In the protein database ' CA' and 'CA' are different atom types, and and array could be: &lt;array delimiter="/" dictRef="pdb:atomTypes"&gt;/ N/ CA/CA/ N/&lt;/array&gt; </h:pre> 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.
     </h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.dictionaryPrefix" name="dictionaryPrefix" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.dictionaryPrefix" name="dictionaryPrefix" type="dictionaryPrefixType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The namespacePrefix for a data item.</h:div>
     <h:div class="description">The dictionaryPrefix is associated with elements such as dictionaries and units and allows them to be referenced namespaces. The dictionaryPrefix is normally unbound but it may be necessary to hardcode them occasionally. Thus if a value is fixed (e.g. "xsd:double") the prefix must be identified and fixed.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup name="dictRef" id="attGp.dictRef" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.dictRef" name="dictRef" type="namespaceRefType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A reference to a dictionary entry.</h:div>
     <h:div class="description">Elements in data instances such as _scalar_ may have a 
      <h:tt>dictRef</h:tt> 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. 
      <h:p>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.</h:p>
      <h:p>This attribute can also be used on _dictionary_ elements to define the namespace prefix</h:p>
     </h:div>
     <h:div class="example" href="dictRefGroup1.xml"/>
     <!-- <h:div class="example" href="dictRefGroup2.xml"></h:div> -->
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.dimensionality" name="dimensionality" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="dimensionality" id="att.dimensionality" type="xsd:positiveInteger">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Dimensionality of a coordinate system.</h:div>
     <h:div class="description">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?.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.dimensionBasis" name="dimensionBasis" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="dimensionBasis" type="dimensionType" id="att.dimensionBasis">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The basis of the dimension.</h:div>
     <h:div class="description">Normally taken from the seven SI types but possibly expandable.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup name="duration" id="attGp.duration" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="duration" type="xsd:string" id="att.duration">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The duration of the action.</h:div>
     <h:div class="description">Semantics undefined.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.eigenOrientation" name="eigenOrientation" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name-->
  <xsd:attribute name="orientation" type="eigenOrientationType" id="att.eigenOrientation">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The orientation of the eigenvector matrix.</h:div>
     <h:div class="description">Describes whether the vectors are columns or rows. No default, so effectively mandatory unless you want to make implementers guess and break applications.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.electronMap" name="electronMap" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.electronMap" name="electronMap" type="idType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A reference to a map providing mappings between electrons</h:div>
     <h:div class="description">The map will normally be contained within the same document and referenced by its ID. It will contain a list of links with from and to attributes linking electrons. The topology of the linking is defined by the application - it could be reactant/product mapping, etc. The reserved phrase "USE_IDS" assume that the sets of electrons are of equal size and have 1:1 mapping between each id. This is another way of saying that the electrons mapped by a given ID are "the same electron". </h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.elementType" name="elementType" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.elementType" name="elementType" type="elementTypeType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The identity of a chemical element.</h:div>
     <h:div class="description">Normally mandatory on _atom_, _isotope_, etc.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.elementTypeArray" name="elementTypeArray" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute id="att.elementTypeArray" name="elementType" type="elementTypeArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The identity of a chemical element.</h:div>
     <h:div class="description">Normally mandatory on _atom_, _isotope_, etc.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup name="end" id="attGp.end" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="end" type="xsd:string" id="att.end">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The end value.</h:div>
     <h:div class="description">The end value in any allowable XSD representation of data.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup name="endCondition" id="attGp.endCondition" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="endCondition" type="xsd:string" id="att.endCondition">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The end condition.</h:div>
     <h:div class="description">
      <h:p>At present a human-readable string describing some condition when the ac tion should end. As XML develops it may be possible to add machine-processable semantics in this field.</h:p>
     </h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.errorBasis" name="errorBasis" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.errorBasis" name="errorBasis" type="errorBasisType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Basis of the error estimate.</h:div>
     <h:div class="description"/>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.errorValue" name="errorValue" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.errorValue" name="errorValue" type="errorValueType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Value of the error.</h:div>
     <h:div class="description">Reports the author's estimate of the error in a scalar value. Only meaningful for dataTypes mapping to real number.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.errorValueArray" name="errorValueArray" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.errorValueArray" name="errorValueArray" type="errorValueArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Array of error values.</h:div>
     <h:div class="description">Reports the author's estimate of the error in an array of values. Only meaningful for dataTypes mapping to real number.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.eval" name="eval" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="eval" id="att.eval" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A flag on 'arg' to indicate that the value can be calculated.</h:div>
     <h:div class="description">This is still experimental. if eval="_ijk_+3" and the value of the ijk was 2, this would change the value of the arg to 5. Only + and - are currently allowed</h:div>
     <h:div class="summary">2006-05-21: PMR added attribute.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.fileId" name="fileId" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.fileId" name="fileId" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Information identifying the name of a file or other resource.</h:div>
     <h:div class="description">This allows an element (such as cml) to carry limited information about provenance such as the name of the document used to provide the content. It is not a complete solution but can help to protect a document becoming separated from its external metadata. It is restricted to the basic XML character set (printable ANSI) and whitespace (which should anyway be discouraged) is normalized to single space (attribute values cannot carry newlines). Quotation marks and other horrors (as used in some OS) should be avoided. </h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.form" name="form" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="form" id="att.form" type="namespaceRefType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A reference to a functional form.</h:div>
     <h:div class="description">Currently used for potential.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.formalCharge" name="formalCharge" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.formalCharge" name="formalCharge" type="formalChargeType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The formalCharge on the object.</h:div>
     <h:div class="description">NOT the calculated charge or oxidation state. No formal default, but assumed to be zero if omitted. It may become good practice to include it.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.formalChargeArray" name="formalChargeArray" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute id="att.formalChargeArray" name="formalCharge" type="formalChargeArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">An array of formalCharges.</h:div>
     <h:div class="description">Used in CML2 Array mode. NOT the calculated charge or oxidation state. No formal defaults, but assumed to be zero if omitted. It may become good practice to include it.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.format" name="format" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.format" name="format" type="formatType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Format of a spectrum.</h:div>
     <h:div class="description">The data structure of the spectrum. (Not the format of the data). This describes how the data structure is to be interpreted.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.formula" name="formula" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.formula" name="formula" type="formulaType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Simple chemical formula.</h:div>
     <h:div class="general"> This attribute should only be used for simple formulae (i.e. without brackets or other nesting for which a _formula_ child element should be used. The attribute might be used as a check on the child elements or for ease of representation. Essentially the same as _concise_ attribute on _formula.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.fractionDigits" name="fractionDigits" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.fractionDigits" name="fractionDigits" type="xsd:nonNegativeInteger">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Number of digits after the point.</h:div>
     <h:div class="description">This is used in dictionaries to define precision. However it might be replaced by xsd:facet.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.from" name="from" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.from" name="from" type="refType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The base of one or more links.</h:div>
     <h:div class="description">On link elements the value is the single id of an element within the document or context specified in map@fromRef attributes. It must identify the element uniquely. The reserved value 'null' implies that no mapping has been provided for the object(s) in the 'to' attribute. This implies no semantics but may be used by software to keep count of which elements have been mapped. For multiple targets use 'fromSet'.</h:div>
     <h:div class="curation">2005-06-18: updated docs</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.fromContext" name="fromContext" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.fromContext" name="fromContext" type="idType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The context for the 'from' links in a map.</h:div>
     <h:div class="description">
      <h:p>A reference to the unique 'id' attribute of an element defining the context for links in a map. This may be required when id attributes may not be unique within a document. The id should either reference an element uniquely or should be taken as the first ancestor (of the map) with such an id.</h:p>
      <h:p>This is fairly horrid but may be required when documents are assembled without establishing unique ids (e.g. concatenation of files). As an example a map referencing linked atoms in two molecules might use the containing 'reaction' element as its uniquifying context.</h:p>
     </h:div>
     <h:div class="curation">2005-06-18: created</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.fromSet" name="fromSet" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.fromSet" name="fromSet" type="idArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A set of ids representing the base of a link.</h:div>
     <h:div class="description">
      <h:p>For a partial mapping where a number of 'from' elements are known to link to a number of 'to' elements it can be useful to aggregate these into a single attribute value. The primary use is to assert that n links exist between a set of n 'from' elements and n 'to' elements but that the precise links are unknown. The semantics of the reference are the same as for 'from' and all the elements must be of the same type (which can be specified with 'fromType' either on the link or the containing map). No order information is implied. In general there will be the same number of idRefs in the 'toSet' and all implicit links will share the same attributes (e.g. 'role'). In many cases the sets will be later split into discrete links thorugh further calculation or experiment (e.g. peak assignment). Sets should never be used as a lazy or concise alternative where the all the links are explicitly known. </h:p>
     </h:div>
     <h:div class="curation">2005-06-18: created</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.fromType" name="fromType" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.fromType" name="fromType" type="xmlElementType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The type of the base of a link.</h:div>
     <h:div class="description">
      <h:p>The local tagname of the referenced element (e.g. 'molecule' or 'peakGroup'). This acts as a partial check on the integrity of the link. Software can assume that the referenced element is of a given tytpe and can create an object supporting that type. </h:p>
      <h:p>This attribute can be attached to the 'map' attribute and requires all contained links to be of this type. This can be overridden by a 'toType' attribute on indivdual links, but it may also be useful to split the map into maps od different link types.</h:p>
     </h:div>
     <h:div class="curation">2005-06-18: created</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.ft" name="ft" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.ft" name="ft" default="none" type="ftType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Domain of an FT spectrum.</h:div>
     <h:div class="description">Indicates whether a spectrum is raw FID or has been transforme.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.href" name="href" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.href" name="href" type="xsd:anyURI">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">address of a resource.</h:div>
     <h:div class="description">Links to another element in the same or other file. For dictionary/@dictRef requires the prefix and the physical URI address to be contained within the same file. We can anticipate that better mechanisms will arise - perhaps through XMLCatalogs. At least it works at present.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.hydrogenCount" name="hydrogenCount" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.hydrogenCount" name="hydrogenCount" type="hydrogenCountType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Number of hydrogens.</h:div>
     <h:div class="description">The total number of hydrogens bonded to the atom or molecule. It is preferable to include hydrogens explicitly, and where this is done their count represents the minimum (and may thus override this attribute). It is dangerous to use this attribute for electron-deficient molecules (e.g. diborane) or hydrogen bonds. There is NO DEFAULT and the absence of this attribute must not be given any meaning.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.hydrogenCountArray" name="hydrogenCountArray" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute id="att.hydrogenCountArray" name="hydrogenCount" type="hydrogenCountArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Array of hydrogenCounts.</h:div>
     <h:div class="description">Normally used in CML2 array mode. The total number of hydrogens bonded to the atom or molecule. It is preferable to include hydrogens explicitly, and where this is done their count represents the minimum (and may thus override this attribute). It is dangerous to use this attribute for electron-deficient molecules (e.g. diborane) or hydrogen bonds. There is NO DEFAULT and the absence of this attribute must not be given any meaning.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.id" name="id" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.id" name="id" type="idType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A unique ID for an element.</h:div>
     <h:div class="description">Id is used for machine identification of elements and in general should not have application semantics. It is similar to the XML ID type as containing only alphanumerics, '_', ',' and '-' and and must start with an alphabetic character. Ids are case sensitive. Ids should be unique within local scope, thus all atoms within a molecule should have unique ids, but separated molecules within a document (such as a published article) might have identical ids. Software should be able to search local scope (e.g. all atoms within a molecule). However this is under constant review.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.idgen" name="idgen" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.idgen" name="idgen" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Allows a referring element to generate a unique id.</h:div>
     <h:div class="description">idgen can hold a unique identifier which is copied into the id attribute of the referenced element. This avoids multiple copies of the referenced object with duplicate ids. EXPERIMENTAL </h:div>
     <h:div class="curation">2006-05-22: PMR added.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.inherit" name="inherit" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.inherit" name="inherit" type="inheritType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Inheritance mechanism.</h:div>
     <h:div class="description">
      <h:p>A reference to an existing element can be used to supplement values such as coordinates. The 
       <h:tt>inheritance</h:tt> attribute determines whether the values are supplemented, overwritten or deleted. In the example:
      </h:p>
      <h:pre> &lt;molecule id="m1" view="initial"&gt; &lt;atomArray&gt; &lt;atom id="a1" x3="0.1"/&gt; &lt;/atomArray&gt; &lt;/molecule&gt; &lt;!-- this adds more information --&gt; &lt;molecule ref="m1" view="initial" inherit="supplement"&gt; &lt;atomArray&gt; &lt;atom id="a1" hydrogenCount="1"/&gt; &lt;/atomArray&gt; &lt;/molecule&gt; &lt;!-- this will overwrite the previous values --&gt; &lt;molecule ref="m1" inherit="overwrite" view="final" id="m2"&gt; &lt;atomArray&gt; &lt;atom id="a1" x3="0.1"/&gt; &lt;/atomArray&gt; &lt;/molecule&gt; &lt;!-- this will delete the previous values --&gt; &lt;molecule ref="m1" inherit="delete" view="restart"&gt; &lt;atomArray&gt; &lt;atom id="a1" hydrogenCount=""/&gt; &lt;/atomArray&gt; &lt;/molecule&gt; </h:pre>
      <h:p> The first 
       <h:tt>molecule/@ref</h:tt> adds complementary information, the second changes the values. Software is allowed to generate two independent copies of the molecule and reference them by different IDs (
       <h:tt>m1</h:tt> and 
       <h:tt>m2</h:tt>). 
      </h:p>
      <h:p>This mechanism is necessary to manage the implied inheritance of partial information during minimisations and dynamics. It requires careful software implementation. </h:p>
     </h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.inline" name="inline" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="inline" id="att.inline" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">An inline representation of the object.</h:div>
     <h:div class="general">This can represent a wide range of information from formal serialization as ASCII through to domain-specific textual representations. It will often be used in conjunction with the "convention" attribute. For example it could be used to represent IUPAC formula, SMILES strings, TeX equations, etc. Characters should conforma to the XML character set, and XML markup (lt and amp) should be escaped. 
      <h:b>IT SHOULD NEVER BE USED FOR INLINE XML</h:b>
     </h:div>
     <h:div class="example" href="attributeGroups/inline.xml"/>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.integral" name="integral" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.integral" name="integral" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Area under a peak.</h:div>
     <h:div class="description">Unfortunately units are usually arbitrary and not related to the x- and y- axis units, and in this case _peakUnits_ should be use.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.irreducibleRepresentation" name="irreducibleRepresentation" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="irreducibleRepresentation" id="att.irreducibleRepresentation" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A symmetry species.</h:div>
     <h:div class="description">No fixed semantics, though we may provide a controlled-extensible list in the future.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.isotope" name="isotope" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.isotope" name="isotope" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The isotope for an element.</h:div>
     <h:div class="description">A real number describing the isotope. Probably obsolet.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.isotopeListRef" name="isotopeListRef" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.isotopeListRef" name="isotopeListRef" type="idType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Reference to a description of the isotopic composition of an atom.</h:div>
     <h:div class="description">Used when more than one atom shares the same isotopic composition (e.g. when H/D have been scrambled over some or all of the atoms in a molecule..</h:div>
     <h:div class="example" href="isotope1.xml"/>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.isotopeNumber" name="isotopeNumber" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.isotopeNumber" name="isotopeNumber" type="xsd:positiveInteger">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The integer number for an isotope.</h:div>
     <h:div class="description">The number representing the isotope. By default it does not point to a fuller description of the isotope (use isotopeRef).</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.isotopeRef" name="isotopeRef" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.isotopeRef" name="isotopeRef" type="refType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Reference to a fuller description of the isotope.</h:div>
     <h:div class="general">The description may be found in an external collection (e.g. IUPAC) or within the current document.</h:div>
     <h:div class="example" href="isotope2.xml"/>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.isSI" name="isSI" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="isSI" id="att.isSI" type="xsd:boolean">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">indicates whether a unit is an SI or derived SI unit.</h:div>
     <h:div class="description">required on SI unit elements with value 'true'. Optional on other units with attribute 'false'. A unitList should contain either SI units or non-SI units but not both.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.kpoint" name="kpoint" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="kpoint" type="vector3Type" id="att.kpoint">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The k vector.</h:div>
     <h:div class="description">The k-vector with 3 components.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.kpointRef" name="kpointRef" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.kpointRef" name="kpointRef" type="refType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A reference to a kpoint.</h:div>
     <h:div class="description">Used by band, etc.</h:div>
     <h:div class="curation">2006-01-21: PMR. Created</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.l" name="l" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="l" id="att.l" type="xsd:nonNegativeInteger">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The secondary quantum number.</h:div>
     <h:div class="description">takes values 0, 1, etc.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.label" name="label" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="label" type="xsd:string" id="att.label">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A label.</h:div>
     <h:div class="description">The semantics of label are not defined in the schema but are normally commonly used standard or semi-standard text strings. This attribute has the the same semantics as the more common _label_ element.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.latticeType" name="latticeType" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.latticeType" name="latticeType" type="latticeType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The primitivity of a lattice.</h:div>
     <h:div class="description">No default. The semantics of this are software-dependent (i.e. this Schema does not check for consistency between spacegroups, symmetry operators, etc.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.length" name="length" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.length" name="length" type="xsd:nonNegativeInteger">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Length of an array or .</h:div>
     <h:div class="description">Probably will be replaced with xsd:schema tool. </h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.linkType" name="linkType" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="linkType" id="att.linkType" type="linkTypeType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The type of the link.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup name="list" id="attGp.list" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="list" type="xsd:string" id="att.list">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A list of values.</h:div>
     <h:div class="description">Normally for iterations.</h:div>
     <h:div class="curation">2006-06-09: PMR Created..</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.lm" name="lm" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="lm" id="att.lm" type="lmType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">symbolic represention of l amd m.</h:div>
     <h:div class="description">takes avlues of s, p, px, dxy, dx2y2, f, etc.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.m" name="m" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="m" id="att.m" type="xsd:integer">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The azimuthal quantum number.</h:div>
     <h:div class="description">takes values -1, 0, 1, etc.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.mandatoryId" name="mandatoryId" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute id="att.mandatoryId" name="id" type="idType" use="required">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">An attribute providing a mandatory unique ID for an element.</h:div>
     <h:div class="description">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.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.matrixType" name="matrixType" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="matrixType" type="matrixType" id="att.matrixType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Type of matrix.</h:div>
     <h:div class="description">Mainly square, but extensible through the _xsd:union_ mechanis.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.max" name="max" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.max" name="max" type="maxType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Maximum value allowed for an element or attribute.</h:div>
     <h:div class="description"/>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.maxExclusive" name="maxExclusive" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.maxExclusive" name="maxExclusive" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">maximum exclusive value.</h:div>
     <h:div class="description">by analogy with xsd:schema.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.maxInclusive" name="maxInclusive" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.maxInclusive" name="maxInclusive" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">minimum inclusive value.</h:div>
     <h:div class="description">by analogy with xsd:schem.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.maxLength" name="maxLength" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.maxLength" name="maxLength" type="xsd:positiveInteger">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">maximum length of a scalar.</h:div>
     <h:div class="description">by analogy with xsd:schem.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.maxValueArray" name="maxValueArray" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="maxValueArray" type="floatArrayType" id="att.maxValueArray">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Maximum values for numeric _matrix_ or _array.</h:div>
     <h:div class="description">A whitespace-separated list of the same length as the array in the parent element.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.measurement" name="measurement" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.measurement" name="measurement" type="measurementType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Type of spectral measurement.</h:div>
     <h:div class="description">The nature of the measured data. This is not an exhaustive list and should only be used if it affects the storage or immediate processing.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.metadataType" name="metadataType" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name-->
  <xsd:attribute name="name" type="metadataType" id="att.metadataType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The metadata type.</h:div>
     <h:div class="description">This is likely to be the Dublin Core name or something similar. The use of "type" is an infelicitous misnomer and we shall try to remove it.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.min" name="min" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.min" name="min" type="minType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The minimum value allowed for an element or attribute.</h:div>
     <h:div class="description"/>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.minExclusive" name="minExclusive" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.minExclusive" name="minExclusive" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">minimum exclusive value.</h:div>
     <h:div class="description">by analogy with xsd:schema.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.minInclusive" name="minInclusive" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.minInclusive" name="minInclusive" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">minimum inclusive value.</h:div>
     <h:div class="description">by analogy with xsd:schema.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.minLength" name="minLength" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.minLength" name="minLength" type="xsd:nonNegativeInteger">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">minimum length of a scalar.</h:div>
     <h:div class="description">by analogy with xsd:schema.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.minValueArray" name="minValueArray" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="minValueArray" type="floatArrayType" id="att.minValueArray">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Minimum values for numeric _matrix_ or _array.</h:div>
     <h:div class="description">A whitespace-separated lists of the same length as the array in the parent element.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.moleculeRef" name="moleculeRef" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.moleculeRef" name="moleculeRef" type="moleculeRefType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A reference to a molecule.</h:div>
     <h:div class="description">Used by spectrum, etc.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.moleculeRefs" name="moleculeRefs" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="moleculeRefs" id="att.moleculeRefs" type="moleculeRefArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A reference to one or more molecules.</h:div>
     <h:div class="description">Uses the id attribute as the target identification. The order of molecules is preserved. It is not necessarily an error to have repeated references to the same molecule</h:div>
     <h:div class="curation">2005-11-22: PMR. added this attribute.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.moleculeRefs2" name="moleculeRefs2" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="moleculeRefs2" id="att.moleculeRefs2" type="moleculeRefs2Type">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">References to two different molecules.</h:div>
     <h:div class="description">Available for any reference to molecules but normally will be the normal reference attribute on the join element. The order of molecules is preserved and may matter.</h:div>
     <h:div class="curation">2006-11-24: PMR created</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.multiplierToData" name="multiplierToData" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.multiplierToData" name="multiplierToData" type="xsd:double" default="1.0">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The scale by which to multiply raw data or a unit.</h:div>
     <h:div class="description">The scale is applied *before* adding any constant. The attribute may be found on a data item (scalar, array, matrix, etc.) or a user-defined unit.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.multiplierToSI" name="multiplierToSI" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.multiplierToSI" name="multiplierToSI" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Multiplier to generate SI equivalent.</h:div>
     <h:div class="description">The factor by which the non-SI unit should be multiplied to convert a quantity to its representation in SI Units. This is applied *before* _constantToSI_. Necessarily unity for SI unit.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.n" name="n" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="n" id="att.n" type="xsd:nonNegativeInteger">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The principal quantum number.</h:div>
     <h:div class="description">Takes values 1, 2, 3, etc.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.name" name="name" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.name" name="name" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Name of the object.</h:div>
     <h:div class="description">A string by which the object is known. Often a required attribute. The may or may not be a semi-controlled vocabulary.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.namespace" name="namespace" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.namespace" name="namespace" type="namespaceType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The namespace for a data item.</h:div>
     <h:div class="description">The namespace is associated with elements such as dictionaries and units and allows them to be referenced through free namespace prefixes.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.number" name="number" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.number" name="number" type="xsd:nonNegativeInteger">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A number determined by context</h:div>
     <h:div class="description">Used for isotope number in isotope, and rotational symmetry number in symmetry for calculation of entropy, etc.</h:div>
     <h:div class="curation">2003-03-30: added number attribut.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.objectClass" name="objectClass" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="objectClass" type="xsd:string" id="att.objectClass">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The class of an object.</h:div>
     <h:div class="description">The type of this information. This is not controlled, but examples might include: 
      <h:ul>
       <h:li>label</h:li>
       <h:li>summary</h:li>
       <h:li>note</h:li>
       <h:li>usage</h:li>
       <h:li>qualifier</h:li>
      </h:ul> It might be used to control display or XSL filtering.
     </h:div>
     <h:div class="note">The attribute is named 'objectClass' to avoid clashes with other class attributes and inappropriate conversion to foo.getClass().</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.occupancy" name="occupancy" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.occupancy" name="occupancy" type="occupancyType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Occupancy for an atom.</h:div>
     <h:div class="description">Normally only found in crystallography. Defaults to 1.0. The occupancy is required to calculate the molecular formaula from the atoms.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.occupancyArray" name="occupancyArray" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute id="att.occupancyArray" name="occupancy" type="occupancyArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Array of occupancies.</h:div>
     <h:div class="description">Normally only found in crystallography. Defaults to 1.0. The occupancy is required to calculate the molecular formula from the atoms.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.order" name="order" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.order" name="order" type="orderType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The order of the bond.</h:div>
     <h:div class="description">There is NO default. This order is for bookkeeping only and is not related to length, QM calculations or other experimental or theoretical calculations.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.orderArray" name="orderArray" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute name="order" id="att.orderArray" type="orderArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The order of the bond.</h:div>
     <h:div class="description">There is NO default. This order is for bookkeeping only and is not related to length, QM calculations or other experimental or theoretical calculations.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.parameterName" name="parameterName" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="parameterName" id="att.parameterName" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">parameter name passed to an element</h:div>
     <h:div class="description">This is still experimental.</h:div>
     <h:div class="summary">2006-06-09: PMR added attribute.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.parentAttribute" name="parentAttribute" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="parentAttribute" id="att.parentAttribute" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">raplaces attribute on parent</h:div>
     <h:div class="description">This is still experimental. Creates, overwriting if necessary, an attribute on parent. Example: 
      <h:pre> &lt;foo&gt; &lt;arg parentAttribute="bar"&gt;zubbo&lt;/arg&gt; </h:pre> will create an attribute bar="zubbo" on &lt;foo&gt; 
     </h:div>
     <h:div class="summary">2006-06-09: PMR added attribute.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.parentSI" name="parentSI" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.parentSI" name="parentSI" type="namespaceRefType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A dictRef-like reference to the id of the parent SI unit.</h:div>
     <h:div class="description">This parent should occur in this or another dictionary and be accessible through the dictRef mechanism. This attribute is forbidden for SI Units themselves. The mechanism holds for base SI units (7) and all compound (derived) units made by combinations of base Units.</h:div>
     <h:div class="example" href="unit3.xml"/>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.pattern" name="pattern" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.pattern" name="pattern" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Pattern constraint.</h:div>
     <h:div class="description">Based on xsd:schema.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.peakHeight" name="peakHeight" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.peakHeight" name="peakHeight" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Height of a peak.</h:div>
     <h:div class="description">For 1-dimensional data (e.g. y vs x) hould use the same units as the appropriate axis (e.g. y).</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.peakMultiplicity" name="peakMultiplicity" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.peakMultiplicity" name="peakMultiplicity" type="peakMultiplicityType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Multiplicity of a peak.</h:div>
     <h:div class="description">Uses a semi-controlled vocabulary.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.peakShape" name="peakShape" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.peakShape" name="peakShape" type="peakShapeType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Shape of a peak.</h:div>
     <h:div class="description">Semi-controlled vocabulary such as broad or sharp.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.peakStructureType" name="peakStructureType" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.peakStructureType" name="type" type="peakStructureTypeType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Type of this structure.</h:div>
     <h:div class="description">Semi-controlled vocabulary such as coupling or splitting.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.peakUnits" name="peakUnits" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.peakUnits" name="peakUnits" type="unitsType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Units for a peak or peak integral.</h:div>
     <h:div class="description">For 2-dimensional spectra the units represent the observation. For an integral they are usually arbitrary and not related to the x- and y- axis units. Thus NMR spectra may use hydrogen count as the units for the peak area.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.periodic" name="periodic" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="periodic" type="xsd:boolean" id="att.periodic" default="true">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Is the axis periodic.</h:div>
     <h:div class="description">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.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.periodicity" name="periodicity" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="periodicity" id="att.periodicity" type="xsd:positiveInteger">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Periodicity of the system.</h:div>
     <h:div class="summary">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.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.point3" name="point3" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="point3" type="point3Type" id="att.point3">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A point in 3 dimensions.</h:div>
     <h:div class="description">can be used for any complex geometrical object, such as line.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.pointGroup" name="pointGroup" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.pointGroup" name="pointGroup" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A point group.</h:div>
     <h:div class="description">No fixed semantics, though Schoenflies is recommended over Hermann-Mauguin. We may provide a controlled-extensible list in the future.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.pointGroupMultiplicity" name="pointGroupMultiplicity" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.pointGroupMultiplicity" name="pointGroupMultiplicity" type="xsd:positiveInteger">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">SpaceGroup multiplicity.</h:div>
     <h:div class="description">Normally for an atom. This attribute gives the pointGroup multiplicity of the molecule and is independent of any atomic information. No default, and it may take any positive integer value (though values are normally between 1 and 60 (for icosahedral). It represents the number of symmetry operations (without any translations) that transform the atom into itself. Thus an atom on a centre of symmetry can have a pointGroupMultiplicity of 2. The pointGroupMultiplicity can be deduced from a knowledge of the coordinates and the pointGroup operators and so is formally redundant but this is a useful convenience operator. Distinguish carefully from occupancy which represents incomplete occupation of a site.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.power" name="power" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="power" type="xsd:double" id="att.power">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The power to which a dimension should be raised.</h:div>
     <h:div class="description">Normally an integer. Must be included, even if unity.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.powerRequired" name="powerRequired" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- this is awful - but I can't find how to add required otherwise -->
  <xsd:attribute name="power" type="xsd:double" use="required" id="att.powerRequired">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The power to which a dimension should be raised.</h:div>
     <h:div class="description">Normally an integer. Must be included, even if unity.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.preserve" name="preserve" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="preserve" type="xsd:boolean" id="att.preserve">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Is the dimension preserved during algebra.</h:div>
     <h:div class="dimension">Experimental. The idea is to support concepts like volume/volume where algebraically these cancel out. preserve="yes" is intending to support preservation during derivation of new unitTypes.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.process" name="process" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.process" name="process" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Keyword signifying how object is to be processed.</h:div>
     <h:div class="description">Semantics depend on the parent element</h:div>
     <h:div class="curation">2006-05-20: PMR added</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.ratio" name="ratio" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="ratio" id="att.ratio" type="occupancyType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A ratio in the range 0 to 1.</h:div>
     <h:div class="description">Currently used for ratios between brached reactions but re-usable for other concepts.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.reactionFormat" name="reactionFormat" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute id="att.reactionFormat" name="format" type="reactionFormatType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Format of the reaction component.</h:div>
     <h:div class="description">Indicates how the components of reactionScheme, reactionStepList, etc. should be processed. No controlled vocabulary. One example is format="cmlSnap" asserts that the processor can assume that the reactants and products can be rendered using the CMLSnap design. Note that the reaction can be interpreted without reference to the format, which is primarily a processing instruction.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.reactionRole" name="reactionRole" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute name="role" id="att.reactionRole" type="reactionRoleType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Role of the reaction.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.reactionStepListType" name="reactionStepListType" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute name="type" id="att.reactionStepListType" default="consecutive" type="reactionStepListTypeType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The sequence of steps in a reactionStepList.</h:div>
     <h:div class="description">By default the reactions in a reactionStepList are assumed to take place in sequence (e.g. one or more products of reaction n are used in reaction n+1 or later. However there are cases where it is known that reactions take place in parallel (e.g. if there is no overlap of molecular identities). Alternatively there are points at which there are two or more competing reactions which may depend on conditions or concentrations. A small semi-controlled vocabulary is suggested.</h:div>
     <h:div>The semantic of these are not fully explored, but we suggest that consecutive and simultaneous should be the first to be supported</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.reactionType" name="reactionType" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute id="att.reactionType" name="type" type="reactionTypeType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Type of the reaction.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.recommendedUnits" name="recommendedUnits" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.recommendedUnits" name="recommendedUnits" type="unitsType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Recommended unit.</h:div>
     <h:div class="description">a facet on a numeric dictionary entry.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.ref" name="ref" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.ref" name="ref" type="refType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A reference to an element of given type.</h:div>
     <h:div class="description">
      <h:tt>ref</h:tt> 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.
      <br xmlns=""/> When referring to an element most of the "data" such as attribute values and element content will be on the full instantiated element. Therefore ref (and possibly id) will normally be the only attributes on the pointing element. However there may be some attributes (title, count, etc.) which have useful semantics, but these are element-specific
     </h:div>
     <h:div class="example" href="refGroup1.xml"/>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.regionRefs" name="regionRefs" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="regionRefs" type="refType" id="att.regionRefs">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A list of regions creating a union.</h:div>
     <h:div class="description">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.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.relatedEntryType" name="relatedEntryType" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute id="att.relatedEntryType" name="type" type="relatedEntryTypeType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Type of relatedEntry.</h:div>
     <h:div class="description">Type represents a the type of relationship in a relatedEntry element.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.role" name="role" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.role" name="role" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Role of the object.</h:div>
     <h:div class="description">How the object functions or its position in the architecture. No controlled vocabulary.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.rows" name="rows" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="rows" id="att.rows" type="sizeType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Number of rows.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.scheme" name="scheme" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="scheme" id="att.reactionStepList.scheme" default="sequence" type="schemeType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The sequence of steps in a reactionList.</h:div>
     <h:div class="description">By default the reactions in a reactionStepList are assumed to take place in sequence (e.g. one or more products of reaction n are used in reaction n+1 or later. However there are cases where it is known that reactions take place in parallel (e.g. if there is no overlap of molecular identities). Alternatively there are points at which there are two or more competing reactions which may depend on conditions or concentrations. A small semi-controlled vocabulary is suggested.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.serial" name="serial" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="serial" id="att.serial" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Serial number or other id.</h:div>
     <h:div class="summary">Currently only on module. Modules with the same _role_ attribute can be distinguished by _serial_. This is often an integer but other schemes may be used.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.shape" name="shape" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="shape" type="shapeType" id="att.shape">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">shape of object.</h:div>
     <h:div class="description">Mainly square, but extensible through the _xsd:union_ mechanism.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.siNamespace" name="siNamespace" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.siNamespace" name="siNamespace" type="namespaceType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The namespace for SI Units dictionary.</h:div>
     <h:div class="description">Main use is on unitList to identify the dictionary holding the SI Units.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.siNamespaceArray" name="siNamespaceArray" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.siNamespaceArray" name="siNamespaceArray" type="namespaceArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Array of namespaces locating SI Units dictionaries.</h:div>
     <h:div class="description">Main use is on unitList to identify the dictionaries holding the SI Units.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.size" name="size" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.size" name="size" type="sizeType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The size of an array or matrix.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.spaceGroup" name="spaceGroup" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.spaceGroup" name="spaceGroup" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A space group.</h:div>
     <h:div class="description">No fixed semantics, though Hermann-Mauguin or Hall is recommended over Schoenflies. We may provide a controlled-extensible list in the future.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.spaceGroupMultiplicity" name="spaceGroupMultiplicity" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.spaceGroupMultiplicity" name="spaceGroupMultiplicity" type="xsd:positiveInteger">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">SpaceGroup multiplicity.</h:div>
     <h:div class="description">Normally for an atom. This attribute gives the spaceGroup multiplicity of the molecule and is independent of any atomic information. No default, and it may take any positive integer value (though values are normally between 1 and 192. It represents the number of symmetry operations (without cell translations) that transform the atom into itself. Thus an atom on a centre of symmetry can have a spaceGroupMultiplicity of 2. The spaceGroupMultiplicity can be deduced from a knowledge of the coordinates and the spaceGroup operators and so is formally redundant but this is a useful convenience operator. Some crystallographic experiments report this attribute as, for example, the IUCr CIF item 'atom_site_symmetry_multiplicity'. Distinguish carefully from occupancy which represents incomplete occupation of a site.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.spaceType" name="spaceType" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.spaceType" name="spaceType" type="spaceType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The spaceType of the lattice.</h:div>
     <h:div class="description">Usually real or reciprocal. No default. The semantics of this are software-dependent (i.e. this Schema does not check for consistency for unitTypes, etc.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.spectrumType" name="spectrumType" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="type" id="att.spectrumType" type="spectrumTypeType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The type of the spectrum.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.sphere3" name="sphere3" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="sphere3" type="sphere3Type" id="att.sphere3">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A sphere.</h:div>
     <h:div class="description">Currently describes a region. Any point falling within the sphere or on its surface is within the region.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.spin" name="spin" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.spin" name="spin" type="isotopicSpinType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The spin of a system.</h:div>
     <h:div class="description">Supports fractional values. Currently the spin of a nucleus. The normal fraction representing the spin of the isotope.</h:div>
     <h:div class="example" href="spin1.xml"/>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.spinMultiplicity" name="spinMultiplicity" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.spinMultiplicity" name="spinMultiplicity" type="xsd:positiveInteger">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Spin multiplicity.</h:div>
     <h:div class="description">Normally for a molecule. This attribute gives the spin multiplicity of the molecule and is independent of any atomic information. No default, and it may take any positive integer value (though values are normally between 1 and 5.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup name="start" id="attGp.start" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="start" type="xsd:string" id="att.start">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The start value.</h:div>
     <h:div class="description">The start value in any allowable XSD representation </h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup name="startCondition" id="attGp.startCondition" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="startCondition" type="xsd:string" id="att.startCondition">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The start condition.</h:div>
     <h:div class="description">This can describe the condition(s) that has to be met before an action can begin, such as in a recipe. Semantics are unexplored but could be used to control robotic operations.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.state" name="state" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="state" type="stateType" id="att.state">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The physical state of the substance.</h:div>
     <h:div class="description">No fixed semantics or default.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup name="step" id="attGp.step" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="step" type="xsd:string" id="att.step">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The step value.</h:div>
     <h:div class="description">The step value in any allowable XSD representation </h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.substanceListType" name="substanceListType" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute id="att.substanceListType" name="type" type="substanceListTypeType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Type of the substanceList.</h:div>
     <h:div class="description">Extension is allowed through the "other" value.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.substitute" name="substitute" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="substitute" id="att.substitute" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A flag on 'arg' to indicate that the value can be substituted.</h:div>
     <h:div class="description">This is still experimental. The value may be an XPath expression, at present all attributes (".//@*") are processed. If an attribute contains _ijk_ where the name of the arg is 'ijk' this string is replaced by the value of ijk, e.g. if arg with name ijk has a value of 2 then 'm_ijk__z3' becomes 'm2_z3'. substitute="." replaces this element by its value</h:div>
     <h:div class="summary">2006-05-21: PMR added attribute.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.symbol" name="symbol" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="symbol" id="att.symbol" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A symbol.</h:div>
     <h:div class="description">No semantics. However it should contain only ASCII characters and we may have to develop an escaping mechanism. Used on _atomicBasisFunction_, _unit_, etc.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.symmetryOriented" name="symmetryOriented" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.symmetryOriented" name="symmetryOriented" type="xsd:boolean">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Is the molecule oriented to the symmetry</h:div>
     <h:div class="description">No formal default, but a molecule is assumed to be oriented according to any _symmetry_ children. This is required for crystallographic data, but some systems for isolated molecules allow specification of arbitrary Cartesian or internal coordinates, which must be fitted or refined to a prescribed symmetry. In this case the attribute value is false.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.tableType" name="tableType" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="tableType" type="tableTypeType" id="att.tableType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">type of table.</h:div>
     <h:div class="description">controls content</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.tautomeric" name="tautomeric" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.tautomeric" name="tautomeric" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Indicates whether the structure is a tautomer.</h:div>
     <h:div class="general">Currently used with IChI _identifier_ element. Semantics, vocabulary and usage are application-dependent.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.term" name="term" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.term" name="term" type="xsd:string" use="required">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A term in a dictionary.</h:div>
     <h:div class="description">The term should be a noun or nounal phrase, with a separate definition and further description.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup name="test" id="attGp.test" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="test" type="xsd:string" id="att.test">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The test condition on an if element.</h:div>
     <h:div class="description">No controlled format yet.</h:div>
     <h:div class="curation">2006-06-09: PMR Created..</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.title" name="title" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.title" name="title" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A title on an element.</h:div>
     <h:div class="description">No controlled value.</h:div>
     <h:div class="example" href="title1.xml"/>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.to" name="to" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.to" name="to" type="refType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The target of one or more links.</h:div>
     <h:div class="summary">On link elements the value is the single id of an element within the document or context specified in map@toContext attributes. It must identify the element uniquely. The reserved value 'null' implies that no mapping has been provided for the object(s) in the 'from' attribute. This implies no semantics but may be used by software to keep count of which elements have been mapped. For multiple targets use 'toSet'.</h:div>
     <h:div class="curation">2005-06-18: updated docs</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.toContext" name="toContext" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.toContext" name="toContext" type="idType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The context for the 'from' links in a map.</h:div>
     <h:div class="description">
      <h:p>A reference to the unique 'id' attribute of an element defining the context for links in a map. This may be required when id attributes may not be unique within a document. The id should either reference an element uniquely or should be taken as the first ancestor (of the map) with such an id.</h:p>
      <h:p>This is fairly horrid but may be required when documents are assembled without establishing unique ids (e.g. concatenation of files). As an example a map referencing linked atoms in two molecules might use the containing 'reaction' element as its uniquifying context.</h:p>
     </h:div>
     <h:div class="curation">2005-06-18: created</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.toSet" name="toSet" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.toSet" name="toSet" type="idArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A set of ids representing the base of a link.</h:div>
     <h:div class="description">
      <h:p>For a partial mapping where a number of 'to' elements are known to link to a number of 'from' elements it can be useful to aggregate these into a single attribute value. The primary use is to assert that n links exist between a set of n 'to' elements and n 'from' elements but that the precise links are unknown. The semantics of the reference are the same as for 'to' and all the elements must be of the same type (which can be specified with 'toType' either on the link or the containing map). No order information is implied. In general there will be the same number of idRefs in the 'fromSet' and all implicit links will share the same attributes (e.g. 'role'). In many cases the sets will be later split into discrete links thorugh further calculation or experiment (e.g. peak assignment). Sets should never be used as a lazy or concise alternative where the all the links are explicitly known. </h:p>
     </h:div>
     <h:div class="curation">2005-06-18: created</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.totalDigits" name="totalDigits" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.totalDigits" name="totalDigits" type="xsd:positiveInteger">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">total digits in a scalar.</h:div>
     <h:div class="description">based on xsd:schema.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.toType" name="toType" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.toType" name="toType" type="xmlElementType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The type of the base of a link.</h:div>
     <h:div class="description">
      <h:p>The local tagname of the referenced element (e.g. 'molecule' or 'peakGroup'). This acts as a partial check on the integrity of the link. Software can assume that the referenced element is of a given tytpe and can create an object supporting that type.</h:p>
      <h:p>This attribute can be attached to the 'map' attribute and requires all contained links to be of this type. This can be overridden by a 'toType' attribute on indivdual links, but it may also be useful to split the map into maps od different link types.</h:p>
     </h:div>
     <h:div class="curation">2005-06-18: created</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.type" name="type" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="type" id="att.type" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Type of the object.</h:div>
     <h:div class="description">A qualifier which may affect the semantics of the object.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.unitListType" name="unitListType" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.unitListType" name="type" type="unitListTypeType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A reference to the type of a unit.</h:div>
     <h:div class="description">Needed to differentiate the rather unhappy polymorphism of unitList/unit and unitList/unitType.</h:div>
     <h:div class="curation">2005-12-17 PMR: Added</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.units" name="units" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.units" name="units" type="unitsType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Scientific units on an element.</h:div>
     <h:div class="description">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.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.unitsRef" name="unitsRef" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="unitsRef" id="att.unitsRef" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">unitsRef attribute on CML1 elements.</h:div>
     <h:div class="description">CML1-only - now deprecated.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.unitType" name="unitType" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.unitType" name="unitType" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A reference to the type of a unit.</h:div>
     <h:div class="description">Used in defining the unit and doing symbolic algebra on the dimensionality.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.value" name="value" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="value" id="att.value" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Value of a scalar object.</h:div>
     <h:div class="description">The value must be consistent with the dataType of the object.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.vector3" name="vector3" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="vector3" type="vector3Type" id="att.vector3">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">A vector in 3 dimensions.</h:div>
     <h:div class="description">can be used for any complex geometrical object, such as line.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.version" name="version" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.version" name="version" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The version of the element</h:div>
     <h:div class="general">cml or identifier elements can currently have versions. They may be dependent on the date of release and this attribute is highly recommended. There is no controlled syntax.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.weight" name="weight" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="weight" type="xsd:double" id="att.weight">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Weight of the element.</h:div>
     <h:div class="description">Currently the weight of the kPoint, derived from the symmetry such as the inverse of the multiplicity in real space. Thus a point at 0,0,0 in monoclinic space might be 0.25. The lowest value possible is probably 1/48.0 (in m3m).</h:div>
     <h:div class="curation">2003-09-15 (added at suggestion of Jon Wakelin).</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.whiteSpace" name="whiteSpace" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.whiteSpace" name="whiteSpace" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Whitespace.</h:div>
     <h:div class="description">Attached to entry. This may be obsolete.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.x2" name="x2" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="x2" id="att.x2" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">x2 coordinate for an object.</h:div>
     <h:div class="description">Used for displaying the object in 2 dimensions. Unrelated to the 3-D coordinates for the object. The orientation of the axes matters as it can affect the chirality of object.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.x2Array" name="x2Array" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute name="x2" id="att.x2Array" type="coordinateComponentArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">array of x2 coordinate.</h:div>
     <h:div class="description">Normally used in CML2 array mode. Used for displaying the object in 2 dimensions. Unrelated to the 3-D coordinates for the object. The orientation of the axes matters as it can affect the chirality of object.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.x3" name="x3" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.x3" name="x3" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The x coordinate of a 3 dimensional object.</h:div>
     <h:div class="description">The default units are Angstrom. (The provision for other units is weak at present.) Objects are always described with a right-handed coordinate system.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.x3Array" name="x3Array" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute id="att.x3Array" name="x3" type="coordinateComponentArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">An array of x3 coordinate.</h:div>
     <h:div class="summary">Normally used in CML2 array mode.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.xFract" name="xFract" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.xFract" name="xFract" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Fractional x coordinate.</h:div>
     <h:div class="description">normally xFract, yFract and zFract should all be present or absent. If present a _crystal_ element should also occur.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.xFractArray" name="xFractArray" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute id="att.xFractArray" name="xFract" type="coordinateComponentArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Array of fractional x coordinate.</h:div>
     <h:div class="description">normally xFract, yFract and zFract should all be present or absent. If present a _crystal_ element should also occur.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.xMax" name="xMax" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.xMax" name="xMax" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Maximum xValue.</h:div>
     <h:div class="description">Annotates x-axis data with a maximum value. This need not be algorithmically deducible from the data and is typically used for the extent of a _peak_ or _peakGroup_. It uses xUnits or the same units as the data. There may or may not be a _xMin_ attribute but if so xMax should be greater than or equals to it.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.xMin" name="xMin" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.xMin" name="xMin" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Minimum xValue.</h:div>
     <h:div class="description">Annotates x-axis data with a minimum value. This need not be algorithmically deducible from the data and is typically used for the extent of a _peak_ or _peakGroup_. It uses xUnits or the same units as the data. There may or may not be a _xMax_ attribute but if so xMin should be less than or equals to it.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.xUnits" name="xUnits" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.xUnits" name="xUnits" type="unitsType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Units for x axis.</h:div>
     <h:div class="description">All x-axis data must have unambiguous units. Ideally the data and _xMin_ or _xValue_ should share the same units but different xUnits can be used as long as it is clear..</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.xValue" name="xValue" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.xValue" name="xValue" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Value along an x axis.</h:div>
     <h:div class="description">Annotates x-axis data with a value. It is typically used for the location of a _peak_ or _peakGroup_. It uses xUnits or the same units as the data.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.xWidth" name="xWidth" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.xWidth" name="xWidth" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">An unsigned interval along an x axis.</h:div>
     <h:div class="description">It is typically used for the width of a _peak_ or _peakGroup_ but could be used for any range. It uses xUnits or the same units as the data.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.y2" name="y2" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.y2" name="y2" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">y2 coordinate for an object.</h:div>
     <h:div class="description">Used for displaying the object in 2 dimensions. Unrelated to the 3-D coordinates for the object. The orientation of the axes matters as it can affect the chirality of object.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.y2Array" name="y2Array" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute id="att.y2Array" name="y2" type="coordinateComponentArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">array of y2 coordinate.</h:div>
     <h:div class="description">Normally used in CML2 array mode. Used for displaying the object in 2 dimensions. Unrelated to the 3-D coordinates for the object. The orientation of the axes matters as it can affect the chirality of object.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.y3" name="y3" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.y3" name="y3" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The y coordinate of a 3 dimensional object.</h:div>
     <h:div class="description">The default units are Angstrom. (The provision for other units is weak at present.) Objects are always described with a right-handed coordinate system.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.y3Array" name="y3Array" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute id="att.y3Array" name="y3" type="coordinateComponentArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">An array of y3 coordinate.</h:div>
     <h:div class="summary">Normally used in CML2 array mode.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.yFract" name="yFract" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.yFract" name="yFract" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Fractional y coordinate.</h:div>
     <h:div class="description">normally xFract, yFract and zFract should all be present or absent. If present a _crystal_ element should also occur.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.yFractArray" name="yFractArray" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute id="att.yFractArray" name="yFract" type="coordinateComponentArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Array of fractional y coordinate.</h:div>
     <h:div class="description">normally xFract, yFract and zFract should all be present or absent. If present a _crystal_ element should also occur.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.yield" name="yield" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="yield" id="att.yield" type="occupancyType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Yield of a reaction or reactionStep.</h:div>
     <h:div class="description">Yields can be given on either element. They should lie in the range 0 to 1 inclusive (i.e. percentages will need to be converted). Software may use yield to calculate amounts of substances created during a reaction or series of reactions.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.yMax" name="yMax" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.yMax" name="yMax" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Maximum yValue.</h:div>
     <h:div class="description">Annotates y-axis data with a maximum value. This need not be algorithmically deducible from the data and is typically used for the extent of a _peak_ or _peakGroup_. It uses yUnits or the same units as the data. There may or may not be a _yMin_ attribute but if so yMax should be greater than or equals to it.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.yMin" name="yMin" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.yMin" name="yMin" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Minimum yValue.</h:div>
     <h:div class="description">Annotates y-axis data with a minimum value. This need not be algorithmically deducible from the data and is typically used for the extent of a _peak_ or _peakGroup_. It uses yUnits or the same units as the data. There may or may not be a _yMax_ attribute but if so yMin should be less than or equal to it.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.yUnits" name="yUnits" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.yUnits" name="yUnits" type="unitsType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Units for y axis.</h:div>
     <h:div class="description">All y-axis data must have unambiguous units. Ideally the data and _yMin_ or _yValue_ should share the same units but different yUnits can be used as long as it is clear.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.yValue" name="yValue" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.yValue" name="yValue" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Value along a y axis.</h:div>
     <h:div class="description">Annotates y-axis data with a value. It is typically used for the location of a _peak_ or _peakGroup_. It uses yUnits or the same units as the data.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.yWidth" name="yWidth" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.yWidth" name="yWidth" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">An unsigned interval along a y axis.</h:div>
     <h:div class="description">It is typically used for the width of a _peak_ or _peakGroup_ but could be used for any range. It uses yUnits or the same units as the data.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.z" name="z" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.z" name="z" type="xsd:nonNegativeInteger">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The number of molecules per cell.</h:div>
     <h:div class="description">Molecules are defined as the _molecule_ which directly contains the _crystal_ element.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.z3" name="z3" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.z3" name="z3" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">The z coordinate of a 3 dimensional object.</h:div>
     <h:div class="description">The default units are Angstrom. (The provision for other units is weak at present.) Objects are always described with a right-handed coordinate system.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.z3Array" name="z3Array" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute id="att.z3Array" name="z3" type="coordinateComponentArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">An array of z3 coordinate.</h:div>
     <h:div class="summary">Normally used in CML2 array mode.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.zFract" name="zFract" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute id="att.zFract" name="zFract" type="xsd:double">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Fractional y coordinate.</h:div>
     <h:div class="description">normally xFract, yFract and zFract should all be present or absent. If present a _crystal_ element should also occur.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup id="attGp.zFractArray" name="zFractArray" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- Note: name differs from attributeGroup name -->
  <xsd:attribute id="att.zFractArray" name="zFract" type="coordinateComponentArrayType">
   <xsd:annotation>
    <xsd:documentation>
     <h:div class="summary">Array of fractional z coordinate.</h:div>
     <h:div class="description">normally xFract, yFract and zFract should all be present or absent. If present a _crystal_ element should also occur.</h:div>
    </xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
</schema>
