<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="stylesheets/docml.xsl"?>
<docml:document title="Development of chemical markup language (CML) as a system for handling complex chemical content" id="xmldoc_cmlarticle_new"
	xmlns="http://www.w3.org/1999/xhtml"
	xmlns:docml="x-schema:http://www.xml-cml.org/docml_schema_02.xml"
	xmlns:chimeral="x-schema:http://www.xml-cml.org/spectrum_schema_ie_01.xml"
	xmlns:dsig="http://www.w3.org/2000/07/xmldsig#">
	
<!-- ***** chimeral - adj : being or relating to or like a chimera; ***** -->
<!-- ******************************************************************** -->
<!-- * Thanks to Henry Rzepa + Peter Murray-Rust for help + supervision * -->
<!-- ******* Michelle Osmond for Perl guruness + proof reading and ****** -->
<!-- *** not least the Chemical Structure Association (SA) for funding ** -->
<!-- ******************************************************************** -->
<!-- ******** Questions or comments to me at karne@innocent.com ********* -->

<!-- 1 - You must use IE5+ with the Chime and Adobe SVG plugins installed to view this -->

<!-- 2 - Since namespace URL are used, you must be also online to read this document -->

<!-- 3 - The 'docml' namespace is used for the XML document language. This is used to demonstrate how a fully working mixed XML document can be put together. This article is however  not intended as a publication of this language. docuML can and will change without warning. Feel free to use it if you would find it useful. -->		 
	
<!-- ******************************************************** -->
<!-- *********************** metadata *********************** -->
<!-- ******************************************************** -->
<docml:metadata>
<docml:date type="creation">
<docml:day>25</docml:day><docml:month>8</docml:month><docml:year>2000</docml:year></docml:date>
<docml:date type="submission">
<docml:day>29</docml:day><docml:month>8</docml:month><docml:year>2000</docml:year></docml:date>
<docml:date type="accepted">
<docml:day>15</docml:day><docml:month>01</docml:month><docml:year>2001</docml:year></docml:date>
<docml:list type="authors">
	<docml:author idref="insti_not" id="author_pmr" email="Peter.Murray-rust@nottingham.ac.uk"><docml:name type="first">Peter</docml:name><docml:name type="family">Murray-Rust</docml:name></docml:author>
	<docml:author idref="insti_ic" id="author_hr" email="h.rzepa@ic.ac.uk"><docml:name type="first">Henry S.</docml:name><docml:name type="family">Rzepa</docml:name></docml:author>
	<docml:author idref="insti_ic" id="author_mw" email="karne@innocent.com" href="http://www.ch.ic.ac.uk/chimeral"><docml:name type="first">Michael</docml:name><docml:name type="family">Wright</docml:name></docml:author>
</docml:list>
<docml:list type="institutions">
	<docml:institution id="insti_not">School of Pharmaceutical Sciences, University of Nottingham, Nottingham, UK NG7 2RD</docml:institution>
	<docml:institution id="insti_ic" href="http://www.ch.ic.ac.uk">Department of Chemistry, Imperial College of Science, Technology and Medicine, London, UK SW7 2AY</docml:institution>
</docml:list>
<docml:list type="keyWords">
	<docml:keyword>ChiMeraL</docml:keyword>
	<docml:keyword>XML</docml:keyword>
	<docml:keyword>CML</docml:keyword>
	<docml:keyword>chemical</docml:keyword>
	<docml:keyword>markup</docml:keyword>
	<docml:keyword>language</docml:keyword>
	<docml:keyword>applet</docml:keyword>
	<docml:keyword>SVG</docml:keyword>
	<docml:keyword>FOP</docml:keyword>
	<docml:keyword>chemistry</docml:keyword>
</docml:list>
</docml:metadata>	
	
<!-- ******************************************************** -->
<!-- *********************** abstract *********************** -->
<!-- ******************************************************** -->
<docml:abstract>We report the first fully operational system for managing complex chemical content entirely in interoperating XML-based markup languages. This involves the application of version 1.0 of chemical markup language (CML 1.0) and the development of mechanisms allowing the display of CML marked up molecules within a standard web browser (Internet Explorer 5). We demonstrate how an extension to include spectra and reactions could be achieved. Integrating these techniques with existing XML compliant languages (<i>e.g.</i> XHTML and SVG) results in electronic documents with the significant advantages of data retrieval and flexibility over existing HTML/plugin solutions. These documents can be optimised for a variety of purposes (<i>e.g.</i> screen display or printing) by single XSL stylesheet transformations. An XML schema has been developed from the CML 1.0 DTD to allow document validation and the use of data links. A working online demonstration of these concepts, termed ChiMeraL, containing a range of online demonstrations, examples and CML resources such as the CML DTD and schema has been associated with this article <i>via</i> the supplementary material.</docml:abstract>
	
<!-- ******************************************************** -->
<!-- *********************** chapter ************************-->
<!-- ******************************************************** -->
<docml:chapter title="Introduction" id="chap_introduction">
<p>The World Wide Web was originally conceived as a collaborative tool for scientists, allowing the rapid distribution and publication of results and greatly improved online communication. It has become increasingly common for academic papers, databases and knowledge archives to be made available in the form of hypertext markup language (HTML) pages, this being an  efficient way of making them widely and globally available.<docml:link type="ref" idref="ref_MIME"/>  However, the absence of mechanisms in HTML for directly handling chemical information such as, for example, molecular structures and, hence, the difficulties in automatically recognising and extracting chemical data from HTML pages limit their potential.<docml:link type="ref" idref="ref_CML2 ref_CML3 ref_CML4"/> Our solution to this problem  involved the development and extension of a chemical markup language (CML)<docml:link type="ref" idref="ref_CML1.0"/> and techniques to allow the display of molecules, spectra and reactions within a web browser.<docml:link type="ref" idref="ref_ChiMeraLsite"/> These chemical objects can be seamlessly integrated into existing textual markup to create complete electronic documents.</p>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="Existing solutions - HTML and plugins" id="sub_HTML">
<p>The text formatting language HTML and its interface, the web browser, are familiar tools to many scientists.  HTML was originally designed to display plain text on a computer screen, with markup  'tags' (formally known as elements)  primarily supporting the formatting of textual objects (paragraphs, tables, headings, lists, <i>etc</i>.). Inter-document linking is achieved by hyperlinking (<i>via</i> the anchor, applet, embed or object elements) which also allows content in the form of bitmapped images (normally .gif, .jpg and .png), and traditional chemical data files to be transcluded. </p>

<p>HTML documents rely significantly on human processing for chemical content interpretation and error detection, since the language syntax is too flexible to be reliably interpreted by machines, especially the early versions of hypertext markup language (1.0, 2.0, 3.2, 4.0 and their commonly used non-standard derivatives, collectively referred to in this article as 'HTML'). No mechanisms exist in these versions of HTML to allow them to be validated with respect to the document integrity and there is very little markup of context (to indicate the meaning and relevance of each information component). Non-textual data normally requires the use of browser 'plugins' (small, platform-specific helper programs) or Java 'applets' (non-platform-specific programs that run on a 'virtual machine' on top of the web browser). As an example, a present day online chemical paper might consist of HTML text, static bit-map images and diagrams and molecular structures transcluded from an external 'legacy', data file, <i>e.g.</i> MDL Molfile<docml:link type="ref" idref="ref_mdl"/> or the Brookhaven Protein Databank (PDB) formats,<docml:link type="ref" idref="ref_brookhaven"/> which are intended to be visualised using an appropriate plugin (supplementary Fig. 1).  The syntax of these external files is heavily implied and requires specialist knowledge to interpret. This severely limits the re-usability of the rapidly growing amount of high-quality chemical information available on web pages and a significant amount of time and, more importantly, information can be wasted converting between these files.</p>

<p>Since HTML<docml:link type="ref" idref="ref_w3c"/> was not originally designed to support non-textual data, there is no built in mechanism to allow molecular structures to be shared between a plugin and the parent document. As a result, the external data files become isolated from the text and from each other. This reduces inter-operability and makes it significantly harder to identify information within these files, while at the same time retaining their context. Browsing through HTML pages using a conventional search engine requires significant human interaction in order to identity useful chemical information. If the information was labelled by context, far more could be handled automatically, <i>e.g.</i> filtering and ignoring identical data from different sources. The main problems with existing HTML/file transclusion solutions include: (i) the lack of a clear separation of content from the  formatting or presentation in the HTML document. For example, HTML defines a superscript element - [sup] - which can ambiguously be used to either define a cited reference or footnote, or in a molecular formula as an isotope, charge, unpaired electron, oxidation state, state symmetry or multiplicity. Or it can be used simply for stylistic effect. Similarly, chemical content and meaning can often be expressed using Greek characters, which in  HTML are considered a stylistic attribute best expressed using a formal stylesheet declaration.  This means that a molecular formula or constitution  marked up using HTML is effectively lost as far as machine readability is concerned. (ii) the use of legacy formats with implied syntax and the resulting multiplicity of standards. A single, human-readable format is required, combining both textual and non-textual information within a single document. Additional considerations include: scalability, validation, platform independence (particularly relevant online), portability and flexibility.<docml:link type="ref" idref="ref_chemcom"/> With  the present cost of computer hardware and improvements in communication bandwidths, file size is significantly less of a concern, but many legacy formats were designed, in the era of expensive computer memory, to be extremely terse and, therefore, have a large amount of implied, and hence essentially unavailable, syntax.</p>
</docml:subsection>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="Extensible markup language (XML)" id="sub_xml">
<p>In February 1998, the World Wide Web Consortium (W3C) published their recommendations for extensible markup language (XML)<docml:link type="ref" idref="ref_w3c"/> as a successor to HTML. XML is not a markup language in its own right, instead it is a series of rules and conventions defining how to build discipline-specific markup languages (a so-called 'meta-markup language'). XML is designed to allow the description of any structured data by the use of a user-defined set of tags, or elements in XML nomenclature, and support precise declarations of the content of a document <i>and</i> context using explicit syntax. A defined set of elements is called an XML language and these languages are far more flexible than HTML, since they can be tuned to a particular subject.</p>

<docml:box type="white" rows="1" cols="1">
<docml:label id="fig_stylesheet" type="figure" index="1">Data flow in an XML/XSL transform - an XML document can be transformed by one of many stylesheets depending on the output required.</docml:label>
<docml:link type="external" display="svg" href="images\webimages/svg/stylesheet.svg" title="stylesheet" altWeb="images\webimages/stylesheet.gif" altPrint="images\printimages/stylesheet.tif" width="900" height="560"/>
</docml:box>

<p>All XML-compliant languages use the same syntax and can be manipulated using any XML-compliant tools or applications. Information marked up using different languages can be easily combined into a single document and manipulated at the same time. These different languages, <i>e.g.</i> MathML, CML,<docml:link type="ref" idref="ref_cmlorg"/> SVG (scalable vector graphics), are identified within the document by the use of discrete namespaces (<i>vide infra</i>) and are often concatenated using XHTML (HTML following XML rules). An online XML article might consist of XHTML text combined with <i>e.g.</i> SVG diagrams and CML structures or spectra.</p>

<p>Unlike HTML, XML elements do not describe the formatting of a document and, hence, a generic browser can only, by default, display the document and element tree structure.  Instead, the parser built into the browser uses an external stylesheet, which contains formatting instructions for each element in the XML source. This stylesheet is supplied by either the author or the reader and effectively maps the contents of each element to an output. This would normally be an XHTML page or some other text file but can also be to <i>e.g.</i> an Acrobat file.<docml:link type="ref" idref="ref_acrobat"/></p>

<p>The older cascading stylesheets (CSS) is a standard commonly used for formatting HTML, and provides a mechanism for defining the formatting and layout instructions for an entire HTML document collection in a single stylesheet file.  CSS works by allowing the author to redefine how an HTML tag will be presented,  <i>e.g.</i> [h1] can be defined using a CSS stylesheet as meaning present this heading with, for example, size 11 font and red colour. This is useful when the style of an entire document collection needs to be changed, since it only requires editing one stylesheet rather than each  HTML document. Much more sophisticated stylesheets can be written using a powerful formatting, searching and scripting language XSL (extensible stylesheet language). In this article, we will describe the design and implementation of a range of chemically useful stylesheets.</p>

<p>Since any number of stylesheets can be applied to a single XML document, it can be displayed in a wide variety of ways (Fig. 1). The searching and scripting capabilities of XSL mean that element(s) can be picked out and displayed and/or manipulated according to their contents. Other information can be ignored, if necessary, making data searches from large XML documents trivial. An article containing a mixture of text and chemical information can be scanned, <i>e.g.</i> for spectra or numerical information, using such a stylesheet and this information transformed and displayed using, for example, a suitable applet. Alternatively, a different stylesheet might be used to identify molecular structures and potentially calculate their properties.</p>

<p>Stylesheet transformations are performed using software called an XML/XSL parser, which may be a dedicated program or a component built into an existing web browser (as with Internet Explorer version 5 and higher).<docml:link type="ref" idref="ref_msXML"/> Stylesheet selections can be defined by a URL (uniform resource locator)  from within the document or selected from a local collection using the parser. This allows readers to use their own stylesheets which invoke their own preferences or resources available to them. This flexibility makes stylesheets very powerful and is exemplified by the ChiMeraL demonstration,<docml:link type="ref" idref="ref_ChiMeraLsite"/> where sample CML data files containing molecules and spectra can be transformed with a range of XSL stylesheets.</p>

<p>The use of a unified XML format reduces the time wasted in processing legacy files and avoids the risk of serious information loss due to poor semantics. This 'plug-compatible' XML approach guarantees a document to be searchable, sortable, mergeable, and printable with minimal extra cost. Ideally, all future document and publishing systems will use XML languages.</p>
</docml:subsection>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="Chemical markup language (CML 1.0)" id="sub_CML">
<p>The definition of CML version 1.0<docml:link type="ref" idref="ref_CML1.0"/> was developed to carry molecules, crystallographic data and reactions using an XML language and, for the first time, offers a universal, platform- and application-independent format for storing and exchanging chemical information. As the first generation of CML, it outlines a variety of general purpose 'data-holder' elements and a smaller number of more specifically chemical elements (<i>e.g.</i> [molecule], [reaction], [crystal]) used to indicate chemical 'objects'. For example, a [molecule] will contain a [list] of [atom]s, which in turn have three [float]s specifying Cartesian coordinates for each atom. 
</p>

<p>This framework is flexible but leaves many areas open for later evolution. In particular, CML provides no default conventions for labelling data elements and puts few restrictions on element ordering. This is intentional, as CML is designed to be generic and contains minimal preconceptions as to the type of chemical information that will be stored using it. Standardisation and conventions are the concern of the community  and will be co-ordinated by publications and projects such as this one.</p>

<p>In the work presented in this article, we have developed rigorous markup procedures for the structures of small- and medium-sized molecules. We have included spectral information using an additional element, [spectrum], which is not part of CML 1.0. Exploratory work has been carried out into [reaction] markup and data linking within a CML/XHTML document. Simply defining such procedures is of limited use and a variety of XSL template 'fragments' have been developed. These allow molecules, spectra and reactions to be displayed using a variety of existing Java applets and can be used for the construction of stylesheets able to format mixed XML documents containing chemical information. These stylesheet fragments and examples are offered as online resources in the form of a fully operational demonstration of CML parsing within a web browser, known as ChiMeraL. This is available <i>via</i> the supplementary information associated with this article, and in more extended form at http://www.xml-cml.org/chimeral/.</p>
</docml:subsection>
</docml:chapter>
	
<!-- ******************************************************** -->
<!-- *********************** chapter ************************-->
<!-- ******************************************************** -->
<docml:chapter title="Results and discussion" id="chap_XML">
<p>The markup syntax used for XML languages is superficially similar to that used for HTML, but significantly stricter. The markup is expressed using ASCII text and consists of data units contained within nested tag pairs (identifiable as an open [tag] and a close [/tag]). In HTML, these tags are often used to describe formatting properties, <i>e.g.</i> [font size="+1" color="#FF0000"]here is some [b]bold[/b] text[/font].  XML languages strictly separate out formatting from semantic markup, and describe the meaning and context of data as opposed to its formatting, <i>e.g.</i> [float title="melting point" units="degC"]238[/float]). In XML nomenclature, tag pairs are called 'elements' (not to be confused with chemical elements) and the content of an element consists of any attributes of that element, their values and any text or sub-elements nested within the tag pair. Text or sub elements within a parent element are described as children of that element and siblings of each other.</p>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="XML rules" id="sub_xmlrules">
<p>The most important rules of XML syntax are listed below. A document that follows these is described as 'well formed'.</p>

<ol>
	<li>All tags must be closed to form an element, <i>e.g.</i> [formula]C8 H10 N4 O2[/formula], and must be correctly nested. This is in contrast to HTML, where incorrect nesting is normally ignored.</li>
	<li>'Empty' elements with no children may be written using the shorthand [link/] = [link][/link]</li>
	<li>All attribute values must be within quotes ("") <i>e.g.</i> [string title="CAS"] (in this article, we use the convention [@title = an attribute named 'title')</li>
	<li>Element and attribute names are case sensitive and are normally written using lower case to distinguish them from non-XML-compliant HTML.</li>
	<li>Code comments are of the form [!-- comment --] and are ignored by the parser.</li>
</ol>

<docml:box type="coloured" rows="1" cols="1">
<docml:label id="fig_treestructure" type="figure" index="2">A simple XML document.</docml:label>
<docml:link type="code" idref="code_treestructure2"/>
</docml:box>

<p>An example of a short XML document is given in <docml:link type="label" idref="fig_treestructure"/> which contains both XHTML and CML marked up information. Those familiar with HTML will recognise the syntax but will find the element names unfamiliar. Notice how information can be stored both as an element child and also as the value of an attribute.</p>

<p>The structure of this document is best visualised as a branched tree, similar to the directory structure on a hard-drive. It has a single 'root' (in this case [document]) with a number of sub-elements ([p] and [cml], ignoring the prefix) and sub-sub-elements, defining the logical structure of the document. Each branch in the tree may contain information either as a text child or as attribute values. Each component of information is therefore uniquely described by a list of its ancestors and this provides a convenient method for stylesheets to navigate the XML tree (called pattern matching).</p>
 
<p>From <docml:link type="label" idref="fig_treestructure"/>, we can see that this document contains a chemical formula, CAS number, molecular weight, melting point and three alternate names for caffeine. In addition, there are two processing instruction tags (lines 1 and 2) that use the syntax [?tag_name_here?]. The first, [?xml version="1.0"?] indicates that the document has been written to follow XML rules. The second, [?xml-stylesheet .. ?] gives the URL of the default stylesheet. Unless given overriding instructions (<i>e.g.</i> by a reader who wishes to use their own stylesheet) the parser will automatically obtain this stylesheet and use it to transform (format) the XML document. This transformation can be carried out locally (i.e. using the web browser), remotely on a web server or using a combination of the two.</p>

<docml:box type="white" rows="1" cols="1">
<docml:label id="fig_tree" type="figure" index="3">The CML element 'tree'. The molecule contains three lists, one of alternate names, one of atoms with their coordinates and one of bonds and their atom references (the atoms defining the bond)</docml:label>
<docml:link type="external" display="svg" href="images\webimages/svg/tree.svg" title="CML Tree" altWeb="images\webimages/tree.gif" altPrint="images\printimages/tree.tif" width="900" height="600"/>
</docml:box>

<p>When writing an XML document, it is usual to collect data of similar types and organise this into a suitably logical structure. For example, the formula for caffeine is stored in branch \document\cml\molecule\formula. <docml:link type="figure" idref="fig_tree"/> shows a simplified CML document tree.</p>
</docml:subsection>

<docml:break/>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="Namespacing" id="sub_namespacing">

<p>The attribute: xmlns="x-schema:http://www.xml-cml.org/chimeral/cml_schema_ie_02.xml" of [document] in <docml:link type="label" idref="fig_treestructure"/> is called an XML namespace declaration.<docml:link type="ref" idref="ref_w3c"/> XML rules allow for the mixing of XML languages within the same document and there is no mechanism to prevent potentially conflicting element names being used in two or more different languages. Indeed such a mechanism would greatly restrict development of XML. Instead, the author assigns each language a different namespace prefix, using the syntax [namespace:element] and @namespace:attribute. The choice of prefix for any particular language is left to the author and these need only be unique over the document in question. A namespace declaration (normally found on the root element) is then used to index each prefix to a globally unique URL (often the language development site). Alternatively, it can point to a file containing a description of the language, as it does for the CML namespace.</p>

<p>There are two types of namespace declaration. The simplest is of the form @xmlns:mynamespace="http://www.uniqueURL.com" and declares any elements with a mynamespace prefix as belonging to a language defined at 'http://www.uniqueURL.com'. It is assumed that attributes share the namespace of their element, unless declared otherwise. A default namespace declaration, @xmlns="http://www.anotherURL.com", results in the element containing the declaration and all ancestors of that element belonging to 'http://www.anotherURL.com' unless otherwise stated. This avoids having to use a prefix in front of a large number of similar elements. </p>

<docml:box type="coloured" rows="1" cols="1">
<docml:label id="fig_namespace" type="figure" index="4">Namespaces used in an XHTML/CML document.</docml:label>
<docml:link type="code" idref="code_namespace"/>
</docml:box>

<docml:break/>

<p><docml:link type="label" idref="fig_namespace"/> shows a document mixing XHTML, published CML 1.0,<docml:link type="ref" idref="ref_CML1.0"/> ChiMeraL<docml:link type="ref" idref="ref_ChiMeraLsite"/> CML (which also includes [spectrum]) and a simple document structure language. The four namespace declarations are as follows:</p>

<p><dl>
<dt>(i) xmlns="http://www.w3.org/1999/xhtml"</dt>
	<dd> All elements default to the XHTML namespace (defined by the W3C) unless otherwise stated. There is no need to write stylesheet entries to transform this language, instead it can be designed to pass these unrecognised elements directly to the browser (which intrinsically
implements default instructions on how to format XHTML). This 'bypass' avoids unnecessary stylesheet templates and makes stylesheet development significantly quicker.<br/></dd>
<dt>(ii) xmlns:mrw="x-schema:http://www.xml-cml.org/chimeral/mrw_schema_01.xml"</dt>
	<dd> This language describes the logical structure of the document, <i>e.g.</i> [abstract], [chapter], [appendix].<br/></dd>
<dt>(iii) xmlns="x-schema:http://www.xml-cml.org/chimeral/cml_schema_ie_02.xml"</dt>
	<dd>This declaration is found on [cml] and changes the default namespace for that element and its children, anything within [cml] is CML unless declared otherwise.<br/></dd>
<dt>(iv) xmlns:chimeral="x-schema:http://www.xml-cml.org/chimeral/spectrum_schema_ie_01.xml"</dt>
	<dd>One element in [cml] is not in the default cml namespace, this is [spectrum] which requires a namespace of its own - chimeral. As with the two previous declarations, the URL points to an XML schema for this language.</dd>
</dl></p>
</docml:subsection>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="Schema and DTD" id="sub_schemaanddtd">
<p>The URL in a namespace declaration may point to a file describing the XML language. This can be a simple HTML page, but a more powerful method is to point to a file defining the language using a machine-readable syntax. This allows the parser to automatically validate (check) the document against the language(s) it uses, before transforming it with a stylesheet. The parser can also be informed if elements belong to a particular data-type (string, integer, <i>etc</i>.) or if 'special' attributes exist (<i>e.g.</i> unique @id or @href links) and validate these also. If a document is correct XML (well formed) but does not comply to the definitions of the languages it uses, it is described as non-valid and cannot be parsed. For example, [float type="CAS"]58-08-2[/float] is well-formed XML but is not valid CML, since [float] may only contain a single floating point number.</p>

<p>There are two alternative standards for writing machine-readable descriptions. In both cases, this comprises a list of all valid elements and attributes for the language and  declarations of restrictions on element content and child ordering. The older standard is called DTD (document type definition) and uses a specialised machine-readable (but not particularly human-readable) syntax. DTDs have wide support amongst XML tools and parsers but are being superseded by XML schemas. These are written using an XML language defined by the W3C and can therefore be parsed with the same tools as XML documents and XSL stylesheets. Schemas allow more sophisticated descriptions of valid element trees and they are significantly more human readable. Parsers can recognise a schema referenced in a namespace declaration and can automatically validate the document against it.<docml:link type="ref" idref="ref_msXML"/> If a document consists of a mixture of XML languages, the use of a schema for each allows more complex manipulations (for example, the linking of data between languages). Since the modular structure of XML allows (and, indeed, expects) the addition and extraction of information 'objects' using many languages, this flexibility is very important.</p>

<p>The CML schema (version 0.2) was developed from the published DTD as part of this project. Two versions have been made available. The first is a generic XML schema. The second is optimised for Internet Explorer 5 and includes additional data-type and linking declarations. A full description of this schema can be found in the supplementary information for this article as Appendix C. Since [spectrum] is not included in the CML 1.0 DTD, an additional namespace and schema have been constructed for it. It is expected that additional elements will be required as further areas of chemical markup are developed and it is suggested that this approach be maintained. Once a particular addition has been reviewed and accepted by the community, it can then be incorporated into a future version of published CML and included in the schema. The CML schema is available at the chemical markup language homesite.<docml:link type="ref" idref="ref_cmlorg"/></p>
</docml:subsection>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="Platform choice" id="sub_browser">
<p>There are a wide variety of XML parsers presently under development,<docml:link type="ref" idref="ref_alphaworks"/> many written using the programming language Java.<docml:link type="ref" idref="ref_java"/> Java programs are run within a software 'virtual machine' and not directly at the operating system level. Since this software has been written for most operating systems (Windows, MacOS, Linux, Unix, <i>etc</i>.), Java programs can be ported between these platforms with minimal effort. It was the aim of this project to build a fully working online demonstration of real time CML parsing and transforming using the ubiquitous and familiar interface of a web browser. This restricts functionality (Java parsers are significantly more advanced) but allows CML examples to be run using software already installed in a large number of computers and the requires minimal knowledge of XML from the user.</p>

<p>The choice of browser is currently (September 2000) restricted. Later versions of Windows Internet Explorer 4 have some limited XML support and this is much improved in version 5 onwards. It now includes full DOM (document object model), XSL and XQL (extensible query language) support.  Netscape 6 (based on the open source Mozilla project) supports XML but is currently only able to display it using CSS stylesheets. It is hoped that support for XSL will be included in the next release. No other common browsers yet support XML to any reasonable degree. This being the case, Internet Explorer 5 is presently the only suitable client for online XML applications.</p>
</docml:subsection>
</docml:chapter>	
	
<!-- ******************************************************** -->
<!-- *********************** chapter ************************-->
<!-- ******************************************************** -->
<docml:chapter title="Chemical markup language" id="chap_CML">
<p>In keeping with the XML philosophy, CML is designed to be extensible and will be published as a series of drafts. The first draft (CML 1.0)<docml:link type="ref" idref="ref_CML1.0"/> contains the core components of this new language and defines two main types of markup: data holders and chemical components.</p>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="Data holders" id="sub_dataholders">
<p>Data holders are generic elements designed to contain the standard data types required by chemistry. These include strings, integers, floating point numbers and a series of array and matrix elements. They do not usually contain sub-elements, only text, and their context is described by the values of their attribute (particularly @title); <i>e.g.</i> [float title="melting point" units="degC"]238.2[/float] contains the melting point data 238.2 degrees C.</p>

<p>The values of these attributes are not defined in the DTD or schema so any data can be contained simply by choosing them appropriately. This avoids the need to define large numbers of specific elements within CML. To include a melting point,  an additional element could be defined, [meltPoint], but this would not be recognised and formatted by a generic CML stylesheet. It is possible to build new stylesheets including the new element, but this reduces their compatibility. A better approach is to use the existing [float] and add @title="melting point" to give it a label. A stylesheet can then display this as 'melting point: ...' without having to recognise the attribute value directly (<docml:link type="figure" idref="fig_mp"/>).</p>

<docml:box type="white" rows="1" cols="1">
<docml:label id="fig_mp" type="figure" index="5">Simple stylesheet transformation.</docml:label>
<docml:link type="external" display="svg" href="images\webimages/svg/mp.svg" title="Melting Point Example" altWeb="images\webimages/mp.gif" altPrint="images\printimages/mp.tif" width="900" height="300"/>
</docml:box>
</docml:subsection>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="Chemical components" id="sub_chemicalComponents">
<p>Chemical components represent objects of chemical interest, such as molecules, atoms, bonds, <i>etc</i>. and these elements normally contain a number of data holders. CML 1.0 defined the basic components for molecular structure and crystallographic markup, but the extension of CML to other areas of chemistry requires the addition of additional elements. The number of these should be minimised as much as possible and new elements must be described as an extension to CML with their own DTD or schema. In most cases, each chemical component should also be supplied with a unique identity, @id. A molecule containing chemical property information is shown in <docml:link type="figure" idref="fig_CMLexample"/> In order to simplify the figures, processor instructions, [document] tags and namespace declarations have not
been included in the following examples.</p>

<docml:break/>

<docml:box type="coloured" rows="1" cols="1">
<docml:label id="fig_CMLexample" type="figure" index="6">A simple CML block containing property information.</docml:label>
<docml:link type="code" idref="code_CMLexample"/>
</docml:box>

<p>Two other important elements used in CML are [list], which allows for collections of similar data holders, and [link], which supports linking between data in the same, or different, documents. Common attributes are @title, @convention, @unit and @builtin. The latter uses a series of fixed values predefined in the DTD (<i>e.g.</i> xyzFract, elementType, atomId) but values for the rest depend on convention and published examples. Attempts should be made to use values compatible with those used by others in the field and it is expected that published examples and online projects will help coordinate this. In a similar manner, while the DTD defines the element names that should be used when marking up a chemical object, the tree structure is left to convention. It is likely that many of these conventions will be based on existing file formats (<i>e.g.</i> the Molfile convention), simply because this makes conversions to and from CML easier. At a later stage, we would expect CML to become a standard export format for chemical software packages.</p>
</docml:subsection>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="Displaying CML using a stylesheet" id="sub_displayCML">
<p>The CML block in <docml:link type="figure" idref="fig_CMLexample"/> contains only trivial CML property information.  A more complex example might contain molecular structures (2D and 3D), spectra (IR, UV/vis, NMR or MS) and possibly a reaction scheme. Techniques for marking up and displaying these more complex components are covered later, but to illustrate how an XSL stylesheet is written, a simple example will be explained in full (<docml:link type="label" idref="fig_HTMLtablecode"/>).</p>

<p>XSL follows XML rules and therefore requires a namespace declaration in the same way as any other XML document. Internet Explorer recognises 'http://www.w3.org/tr/WD-xsl' as an XSL namespace declaration and the ability to understand this language is built into the parser. XSL uses a limited set of 'commands' (approximately 15) which can be recognised by their xsl: prefix. All text and all elements not part of the XSL namespace are passed directly to the output (in this case, the browser). Two exceptions are: comments ([!-- comment --]), which the parser ignores, and the contents of the [xsl:eval] element, which are used for scripting and calculations within the stylesheet.</p>

<p>The stylesheet contains a series of [xsl:template]s which in turn consist of a mixture of XSL commands and template text/tags. At the simplest level, each template refers to the particular element in the XML source that matches the value of the template @match. Therefore, [xsl:template match="molecule"] marks the start of a template for the [molecule] element. The parser navigates iteratively through the XML document tree, starting at the document root and selecting matching templates at each branching. Navigation through the tree is controlled by the [xsl:apply-templates select=" value and branches can be parsed or ignored as required. Matching and selection of elements is handled by a powerful pattern matching language which refers to the document tree using a Unix-like syntax (a full description of pattern matching can be found on the W3C<docml:link type="ref" idref="ref_w3c"/> and MSDN<docml:link type="ref" idref="ref_msXML"/> web-sites).</p>

<docml:box type="coloured" rows="1" cols="1">
<docml:label id="fig_HTMLtablecode" type="figure" index="7">A simple XSL stylesheet (XHTML table) transforming contents of <docml:link type="label" idref="fig_CMLexample"/>.</docml:label>
<docml:link type="code" idref="code_HTMLtable"/>
</docml:box>

<p>The example shown here (<docml:link type="label" idref="fig_HTMLtablecode"/>) contains three templates. The first template (@match="/" - the document root) starts the parsing process at the first level element in the document ([cml] in this example). A similar template is required for all XSL stylesheets. The second template (@match="cml") builds the start of a skeleton XHTML page and put the values of @title and @id within the [title] tags. [xsl:apply-templates select="molecule"/] instructs the parser to select child element(s) [molecule] and to find a template for it. Once that branch has been completed, the parser returns to the second template and completes the XHTML page: [html]]head[]title[Furan,tetrahydro-mol_thf_1[/title][/head][body][!--results of transforming [molecule] here--[/body][/html]. The third template recognises the chemical properties within [molecule] and formats their values to a simple XHTML table. Note how the alternate names are handled; the contents of [xsl:for-each select="list[@title='alternate names']/string[@title='name']"] is repeated each time the pattern value of @select matches an element in the XML document. The output from the complete stylesheet is shown in <docml:link type="label" idref="fig_HTMLtable"/>.</p>

<docml:box type="white" rows="1" cols="1">
<docml:label id="fig_HTMLtable" type="figure" index="8">Displaying a CML block as a simple XHTML table.</docml:label>
<docml:link type="molecule" idref="mol_tetrahydrofuran_karne" display="datasheet" altWeb="images\webimages/HTMLtable.gif" altPrint="images\printimages/HTMLtable.tif" width="787" height="145"/>
</docml:box>
</docml:subsection>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="Display of CML using applets" id="sub_displayApplet">

<p>More complex chemical data cannot be easily displayed using text and a more sophisticated solution is required. A hypothetical CML-aware parser might have this functionality built in, being able to recognise chemical components and display them appropriately. Using existing parsers, the problem is analogous to that encountered with normal HTML pages. Browser plugins and Java applets are used to provide additional display functionality and a wide range of these add-on programs have been developed, some of them very advanced. An efficient solution is to use a combination of stylesheets and applets to display the CML components contained within a mixed XML document. Using existing software is preferable as this allows faster development of a working application and is in the spirit of XML&apos;s reusability.</p>

<docml:box type="coloured" rows="1" cols="2">
<docml:label id="fig_dxapplet" type="figure" index="9">Applet code produced by the stylesheet and its display.</docml:label>
<docml:link type="code" idref="code_dxapplet"/>
<docml:link type="spectrum" idref="spect_furantetrah_ms_1" display="jspec" height="200" width="400" altWeb="images\webimages/dxapplet.gif" altPrint="images\printimages/dxapplet.tif"/>
</docml:box>

<p>Both plugins and Java applets are primarily intended to read external data files, normally in a legacy format (.mol, .pdb, .dx, <i>etc</i>.) and to embed a graphical display of this data within an HTML page (Fig. 9). In both cases, special tags are required: [embed name="Plugin" src=ldquo;datafile.mol" width="300" height="300"] and lang;applet name="Applet" code="applet.class" width="300" height="300"].</p>

<p>CML is normally embedded into a mixed XML document, and therefore it is not easily accessible by a plugin. Applets are more flexible and can receive data in a wider variety of ways, which makes them significantly more useful for XML display. Stylesheets can be written to recognise CML components and build appropriate [applet] tags to display them. Since all applets are designed to read legacy formats, the data within the components must also be transformed (called a CML to legacy conversion). The transformed data string can then be passed to the applet in two different ways (depending on which type the applet supports). The easiest technique is to place the string within the [param] declaration for an applet.</p>

<p>An alternative technique is to place the transformed string within a hidden [input] element. These are normally used within the (X)HTML [form] element and cannot be seen by the reader. Here, it becomes a convenient holder for the transformed string and JavaScript is then used to call a public function on the applet and pass it the contents of the [input] element. The JavaScript can be triggered by a button or when the page has completely loaded into the browser. This is less direct than using [param]s, but allows more powerful interactions between the page and the applet, since other functions can also be made accessible to JavaScript. This approach is used for the JME applet described in the next section.<docml:link type="ref" idref="ref_JME"/></p> 

<docml:box type="white" rows="1" cols="1">
<docml:label id="fig_flow" type="figure" index="10">Data flow in an XML/XSL system.</docml:label>
<docml:link type="external" display="svg" href="images\webimages/svg/flow.svg" title="Data Flows" altWeb="images\webimages/flow.gif" altPrint="images\printimages/flow.tif" width="900" height="500"/>
</docml:box>

<p>A selection of applets have been chosen depending on their suitability for XML integration. It is desirable  that the applets be small (faster downloads), flexible, easy to use and open source, since this allows changes to be made to the applet code if required. XSL 'template fragments' have been built for each of these applets and for several common CML to legacy conversions (available from http://www.xml-cml.org/chimeral). By combining these stylesheets with applets and the schema, complete CML applications can be built (<docml:link type="label" idref="fig_flow"/>).</p>
</docml:subsection>
</docml:chapter>	

<!-- ******************************************************** -->
<!-- *********************** chapter ************************-->
<!-- ******************************************************** -->
<docml:chapter title="Molecular structures" id="chap_molecules">
<p>The most commonly used file formats for molecular structures are the MDL Molfile<docml:link type="ref" idref="ref_mdl"/> and the Brookhaven Protein Database format. As its name suggests, the Brookhaven format is normally used for large molecules or proteins, but its use for expressing small- and medium-sized molecules (&lt; 500 atoms) along with the Molfile format
is increasingly common (supplementary Fig. 3).</p>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="MDL Molfile" id="sub_mol">
<p>The Molfile uses a strict new-line delimited structure with a heavily implied syntax. As a result, it is very sensitive to the amount of white (empty) space on each line. This can cause serious problems when converting to and from this format from CML. The format has the advantage of being extremely terse, relevant when it was developed, but much less so now. Other file formats tend to use rather similar syntaxes (<i>e.g.</i> the XYZ format lacks the additional atom columns and the bond data).</p>
</docml:subsection>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="CML: molecule" id="sub_CMLmole">
<p>CML molecular structures are reminiscent of the Molfile format, but with the data being fully marked up and explicitly defined. Implied syntax is reduced to a minimum and conventions are declared and not assumed. The aim is to make each chemical component (coordinate, atom, bond, <i>etc</i>.) completely separable from the rest of the document, allowing components to be easily added or removed without destroying the document tree. Since an XML document might contain a very large number of molecules (examples containing over 600 molecules have been built), each component requires a unique @id. A large collection of Molfile files can be easily converted to CML and then concatenated to a single XML document. A stylesheet can then pick out a single molecule and display its structure by searching against @id.</p> 

<docml:box type="coloured" rows="1" cols="1">
<docml:label id="fig_smmolecule" type="figure" index="11">An example of small molecule markup.</docml:label>
<docml:link type="code" idref="code_molecule"/>
</docml:box>

<p>As with the Molfile, lists of atoms and bonds are used. Atoms contain either 3 (<i>x</i>3, <i>y</i>3, <i>z</i>3) or 2 (<i>x</i>2, <i>y</i>2) Cartesian coordinates, an atom type and an 'atomID' (Fig. 11). This is a non-unique label referenced by the  'atomRef' values of the bond and are <i>not</i> the same as the atom&apos;s unique @id (hence [integer builtin="atomRef"]1[/integer] refers to an atom of [integer builtin="atomId"]1[/integer] not @id="1"). The same applies to 'bondId'. While not optimal, this greatly eases the conversion of CML to and from legacy formats. Coordinate units are no longer implied and, since this molecule was converted from a Molfile file, the bond order convention is 'MDL'.</p>

<p>Additional information (formula, CAS number) is not extracted from the Molfile file, since, although such information might be supplied using comments, it is not automatically identifiable.  In our case, it was acquired from various online databases such as ChemFinder.<docml:link type="ref" idref="ref_chemfinder"/> The author may decide to include any information they wish in this way, simply by adding additional elements at appropriate places in the CML document.</p>
</docml:subsection>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="Java Molecular Editor (JME)" id="sub_jme">
<p>The JME (Java Molecular Editor) applet is a simple and small (31K) 2D editor,<docml:link type="ref" idref="ref_JME"/> incorporating a  SMILES calculator (a widely used  standard for producing text descriptions of  molecular structure)<docml:link type="ref" idref="ref_SMILES"/>. Rather than including filters for legacy file formats at the expense of increasing the applet size, JME reads a simple coordinate and bond string. The syntax used is unique to JME and can be a problem for XHTML solutions since there is no way to dynamically calculate it from a standard data file. Using CML, this problem is solved with a trivial stylesheet transformation (Fig. 12). This makes the applet ideally suited for our purposes (supplementary Fig. 4).</p>

<docml:box type="coloured" rows="1" cols="1">
<docml:label id="fig_JMEcode" type="figure" index="12">JME stylesheet fragment, re-formatted for clarity, and an example of the resulting output.</docml:label>
<docml:link type="code" idref="code_JME"/>
</docml:box>

<p>The string read by JME uses the syntax n_atoms n_bonds {atomic_symbol x_coord y_coord}per atom {atom1 atom2 bond_order}per bond.</p>

<p>This string is built by the stylesheet and held in the hidden [input] tag labelled with the name 'jmeoutput'. A Java Script 'onLoad' function is also added to the XHTML [body] tag and this is called when the page has been completely loaded into the browser. The script takes the content of 'jmeoutput' and passes it to a public 'readMolecule' function in the applet, which proceeds to display it. Stereoisomers and simple reactions can also be displayed using JME, but have not yet been incorporated into ChiMeraL.</p>

<p>Some additional XSL commands should be explained at this point: [xsl:element] and [xsl:attribute] create new XHTML/XML tags in the output and are used as an alternative to writing the tags directly. For example, [xsl:element name="input"][xsl:attribute name="name"]jmeoutput[/xsl:attribute][/xsl:element] is equivalent to [input name="jmeoutput"/]. They are used to build complex tags that might otherwise cause the stylesheet to become invalid XML.</p>

<p>The [xsl:eval]formatIndex(childNumber(this), "1")[/xsl:eval] command uses Internet Explorer-specific functions to calculate the position of an element with respect to its siblings and return this as a formatted number. It is used in almost all the stylesheet fragments, normally to count the total numbers of atoms and bonds in the molecule. Non-Internet Explorer stylesheets would use different functions depending on the parser they are designed for.</p>
</docml:subsection>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="JMol 3D viewer" id="sub_jmol">
<p>JMol<docml:link type="ref" idref="ref_jmol"/> is a stand-alone Java application (not an applet) being developed by the Open Science project. It is designed to read and display molecules using a  variety of legacy formats. Its functionality is similar to the Chime plugin, but it is open source and platform independent. An experimental applet has been released and this has been adapted for use in this project. A stylesheet converts the CML [molecule] to a %-delimited .xyz string, which is then stored and transferred to the applet in a manner similar to JME. The '%' delimiters must be added because the converted string cannot replicate the line breaks required in the .xyz format (similar to Molfile). The applet has been slightly rewritten to recognise % as equivalent to a new line.</p> 

<p>Problems also occur with white space; both the .xyz and Molfile formats require strict space handling to ensure their data remains in straight columns. Both formats use <i>right</i> aligned text, in contrast to XML/HTML standard <i>left</i> alignment.</p>

<p>In both cases, the stylesheet (Fig. 13) must check each coordinate and add a varying amount of white space  depending on its size and sign (+ or -). As with JME, the converted string is contained within a named [INPUT] tag and then passed by onLoad="document.JMolApplet.setModelToRenderFromXYZString(jmoloutput.value,'T')"to the applet (supplementary Fig. 5).</p>

<docml:break/>

<docml:box type="coloured" rows="1" cols="1">
<docml:label id="fig_jmolcode" type="figure" index="13">JMol stylesheet fragment.</docml:label>
<docml:link type="code" idref="code_jmolcode"/>
</docml:box>
</docml:subsection>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="Marvin and Structure Drawing Applet (SDA)" id="sub_marvinandsda">
<p>Marvin is a commercial applet produced by Chemaxon<docml:link type="ref" idref="ref_marvin"/> and is free to academic users. It is a wire frame 3D viewer able to accept Molfile data using external files, as a [param] or <i>via</i> JavaScript. The applet is configurable and includes a 2D editing function. SDA (Structure Drawing Applet) is a freeware editor developed by ACD Labs and also accepts Molfile data <i>via</i> [param] elements (supplementary Fig. 6).</p>

<docml:break/>

<docml:box type="coloured" rows="1" cols="1">
<docml:label id="fig_marvinstyle" type="figure" index="14">Marvin stylesheet fragment, re-formatted for clarity.</docml:label>
<docml:link type="code" idref="code_marvinstyle"/>
</docml:box>

<p>The stylesheets (Fig. 14) for these applets are very similar and use the [param] mechanism. As with JMol, line delimitation is required for the Molfile and is built into both applets (Marvin uses "\" and SDA "|"). As with .xyz, handling white space is complex,  since Marvin in particular is intolerant of errors. The following XSL fragment works for most small molecules. Experiments have shown that the CML and Marvin applet scales well and can display over 300 molecules on a modern computer.</p>

</docml:subsection>
</docml:chapter>

<!-- ******************************************************** -->
<!-- *********************** chapter ************************-->
<!-- ******************************************************** -->
<docml:chapter title="Spectra" id="chap_spectra">
<p>Spectra are regularly stored and exchanged using an electronic format and modern spectrometers can save their data directly to disk. Electronically stored spectra can be easily indexed, searched against or otherwise manipulated and large databases of spectra files exist online (<i>e.g.</i> the NIST Webbook).<docml:link type="ref" idref="ref_NIST"/> As with molecular structures, a number of legacy formats are in use, the most common being JCAMP-DX<docml:link type="ref" idref="ref_JCAMP-DXforIR"/> and SPC.<docml:link type="ref" idref="ref_spc"/> In order to investigate the X (extensibility) of XML, we investigated mechanisms for extending CML  to incorporate spectral markup and to develop techniques for displaying it.</p>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="JCAMP-DX/CS" id="sub_jcamp">
<p>The JCAMP-DX format (supplementary Fig. 7) defines a series of conventions for the storage and exchange of spectral data. Files using this format are written using ASCII text and contain a series of labelled data records (LDR). Each LDR is delimited by a new line and a double hash: ##LDRname = value.</p>
 
<p>While having a much simpler structure than XML, these LDRs can be considered as a form of markup with the LDR name (data label) being equivalent to the element name. This is unsurprising, since the two formats share a number of important design criteria, such as extensibility, human/machine readability, flexibility and platform independency. Approximately 25 reserved data labels were originally defined for JCAMP-DX. These are intended to contain:</p>

<ul>
<li>(i) Metadata - (<i>e.g.</i> ##ORIGIN, ##OWNER, ##DATE).</li>
<li>(ii) Header information - (<i>e.g.</i> ##TITLE, ##DATA TYPE, ##BLOCKS, ##END).</li>
<li>(iii) Required spectral parameters - (<i>e.g.</i> ##XUNITS, ##FIRSTX, ##MAXX).</li>
<li>(iv) Optional spectral parameters - (<i>e.g.</i> ##RESOLUTION, ##DELTAX).</li>
<li>(v) Spectral data - (<i>e.g.</i> ##XYDATA, ##XYPOINTS, ##PEAK TABLE, ##PEAK ASSIGNMENTS).</li>
<li>(v) Equipment - (<i>e.g.</i> ##INSTRUMENT PARAMETERS).</li>
<li>(vi) Sample information - (<i>e.g.</i> ##CAS NAME, ##MOLFORM, ##MP).</li>
</ul>

<p>Important LDRs are ##DATA TYPE, which describes the type of spectrum, and ##PEAK TABLE, which contains the data points. A variable list label following ##PEAK TABLE describes how the data is tabulated. Data is grouped into <i>XY</i> or <i>XYZ</i>/<i>XYM</i> coordinates and separated by commas within the group, while groups are separated by semicolons or spaces. Any additional white space is ignored. Common variable lists are:</p>

<dl>
<dd>(<i>XY</i>..<i>XY</i>): grouped <i>XY</i> pairs.</dd>
<dd>23,102 19,89 15,87 .. </dd>
<dd>(<i>XYZ</i>..<i>XYZ</i>) or (<i>XYM</i>): grouped <i>XYZ</i> or <i>XYM</i> (can be used to give multiplicity).</dd>
<dd>23,102,S 19,89,S 15,87,D .. </dd>
<dd>[<i>X</i>++(<i>Y</i>..<i>Y</i>)]: more complex. Each line starts with an <i>X</i> value, then a series of <i>Y</i> values at equal <i>X</i> spacings, so</dd>
<dd>12 52 48 46 43 42</dd>
<dd>22 43 38 36 35 31</dd>
<dd>is equivalent to</dd>
<dd>12,52 14,48 16,46 18,43 20,42 22,43 24,38 26,36 28,35 30,31</dd>
</dl>

<p>JCAMP-DX also allows the use of user-defined data labels. These are distinguished by a $ prefix and are specific to a particular instrument, location, user, <i>etc</i>. This effectively means that, although JCAMP is an extensible language, it does not include any procedure for systematically describing the meaning of an LDR. This seriously limits the use of user-defined data labels beyond the original author. A number of JCAMP 'sub-languages' have been defined in an attempt to solve this issue.<docml:link type="ref" idref="ref_JCAMP-DXforNMR ref_JCAMP-DXforMS"/> These contain lists of LDRs intended for particular areas of spectroscopy (<i>e.g.</i> UV/vis, <sup>1</sup>H NMR, MS). Particularly interesting is JCAMP-CS,<docml:link type="ref" idref="ref_JCAMP-CS"/> which allows the addition of limited structural information. These JCAMP files are split into a number of separate blocks, each containing a different type of information (<i>e.g.</i> molecular structure, peak table and peak assignments). This information can be extracted and marked up as CML, and a JCAMP-CS to CML converter has been written for this purpose.</p> 
</docml:subsection>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="CML: spectrum" id="sub_cmlspectrum">
<p>Since a well established (if non-XML-based) markup language already exists, many technical difficulties have already been solved. Rather than develop new conventions for spectral markup, we have chosen to incorporate those used by JCAMP. It is expected that most users will wish to convert CML to and from JCAMP, so this needs to be as easy as possible. Once converted, spectra can incorporated into XML documents and displayed using techniques similar to those used for molecules.</p>

<p>Comparing JCAMP with <docml:link type="figure" idref="fig_spectrumCML"/> illustrates the approach used. A new element, [spectrum], is defined as an extension to CML, and this is given a new namespace, chimeral. The contents of the JCAMP labelled data records are then mapped to a [string] or [float] with an appropriate @title value. Reserved LDRs (##TITLE, ##XUNIT, <i>etc</i>.) are directly recognised and given lower case values to comply with XML conventions. User-defined or unrecognised LDRs can either be ignored or, more correctly, given @title="LDRname". This avoids any information loss on converting JCAMP to CML.</p>

<docml:box type="coloured" rows="1" cols="1">
<docml:label id="fig_spectrumCML" type="figure" index="15">An example of spectral markup.</docml:label>
<docml:link type="code" idref="code_spectrumCML"/>
</docml:box>

<p>The delimiters between data groups and between data <i>within</i> a group are only loosely defined in the JCAMP specifications. As a result, the syntax used for ##XYDATA and ##PEAKTABLE is very variable. In particular, while the [<i>X</i>++(<i>Y</i>..<i>Y</i>)] convention is common, it can be confusing for the non-specialist and is difficult to store using XML elements. It is suggested that CML spectra should only use the (<i>XY</i>..<i>XY</i>) or (<i>XYM</i>)/(<i>XYZ</i>) conventions and each pair or triplet be marked up using [coordinate2] and [coordinate3], respectively. Data within these elements is separated by the use of a comma and a white space (', '). More complex conventions are deconvoluted during the JCAMP to CML conversion process, <i>e.g.</i> (<i>X</i>++(<i>Y</i>..<i>Y</i>)] is expanded to (<i>XY</i>..<i>XY</i>).</p>

<p>Although a large number of LDRs have been defined, we have chosen to include only a small number of generic ones here. If an author wishes to use additional LDRs, these need to be included into the converter and stylesheets.</p>
</docml:subsection>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="JSpec - JCAMP and SPC display applet" id="sub_jspec">
<p>JSpec is a small open source applet<docml:link type="ref" idref="ref_jspec"/> designed to display JCAMP and SPC spectra files. It also incorporates a number of useful features, including zooming, peak finding and integration.</p>

<p>The stylesheet (Fig. 16) is similar to that used for the Marvin applet. CML is converted to a normalised JCAMP text string and incorporated into the applet&apos;s [param] declaration. Line delimitation is not required, since JCAMP already has a ## separator, but the applet was slightly adapted to accept comma-separated ##PEAKTABLE and ##XYDATA groups (supplementary Fig. 8).</p>

<docml:box type="coloured" rows="1" cols="1">
<docml:label id="fig_jspeccml" type="figure" index="16">JSpec stylesheet fragment, re-formatted for clarity.</docml:label>
<docml:link type="code" idref="code_jspeccml"/>
</docml:box>
</docml:subsection>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="Scalable vector graphics (SVG)" id="sub_svgspectra">
<p>Chemistry, in common with disciplines such as mathematics, conveys information through formal notation (often machine parsable) and more general graphical objects. In chemistry, these include full and dotted lines, straight and curly arrows with various types of arrowheads, links, braces, containers, specialised glyphs and pictorial objects (<i>e.g.</i> for surfaces, solids, <i>etc</i>.). Chemical schemes and diagrams are common and often consist of a mixture of graphics objects and formal notation. These enable great creativity of expression and several editing tools pay great attention to 
providing these. They are therefore difficult to capture accurately for machine processing using a markup language. The only current method, line art or pixel maps, loses much of the machine-readable semantics.</p>

<p>XML provides a very powerful graphics language, scalable vector graphics (SVG). Most web-based images  use bitmapped formats (.gif, .jpg, .png), which use a grid of coloured pixels to form the picture. In contrast, vector images use Cartesian descriptions of drawing objects (lines, polygons, fills, text) and overlays them onto a blank canvas. Vector formats are most efficient for simple line images and diagrams, where the files they produce will be significantly smaller than the equivalent bitmap. Since the drawing objects are described mathematically, vector images can also be zoomed and resized without pixellating. SVG uses a range of drawing 'primitives' (line, circle, path, <i>etc</i>. with fill, stroke, pattern, <i>etc</i>.) as elements. Being XML, it allows these to contain attributes and other element children, and SVG specifically anticipates that elements from other namespaces will be interspersed with its own information.</p>

<p>The natural use of SVG is for transmission of line art and other semantically rich graphics (2D only) over the web. For example, most of the diagrams in this manuscript have been created directly in SVG and can be viewed with widely available tools. SVG allows local and global rescaling, extraction of sub-components, and searches for text
strings. Filters allowing files to be exported as SVG are available for Corel Draw<docml:link type="ref" idref="ref_corelSVG"/> and Adobe Illustrator, and Adobe has released an SVG plugin<docml:link type="ref" idref="ref_adobeSVG"/> for Internet Explorer and Netscape Navigator. SVG can also be exported to various outputs, for example Acrobat or Postscript files.</p>

<p>A common use of graphics is to display instrumental output, such as spectra. SVG is a natural medium for this as the data are not corrupted and accurate values can be extracted from the spectrum if required. Moreover, the spectrum can have XML-based links to other elements such as molecules (<i>e.g.</i> in a chromatogram) or atoms (as in molecular
spectra).</p>

<p>We can therefore confidently use SVG as a semantically rich tool to co-exist with CML. A typical example is a scheme with several molecules, linked with lines, and surrounded by containers; this could denote reactions, interrelationships, systematisations, <i>etc</i>. The basic framework consists of an SVG element which contains [cml:molecule] elements or, even better, links to [cml:molecule] elements. The graphic elements can contain metadata stating their function (<i>e.g.</i> a 'curly arrow' denotes a 2-electron transfer from its tail to head). If the chemical community can converge on conventions for such metadata, it would allow searches of the documents for constructs such as that in <docml:link type="figure" idref="fig_exampleSVGcode"/>. This portrays the conformational interconversion of molecule 1 to molecule 2 at specific points in the scheme, using a curved line to link them.</p>

<docml:box type="coloured" rows="1" cols="1">
<docml:label id="fig_exampleSVGcode" type="figure" index="17">An example of combined SVG and CML.</docml:label>
<docml:link type="code" idref="code_exampleSVGCML"/>
</docml:box>

<p>CML containing 2- or 3D coordinates can be transformed to SVG with XSLT stylesheets. Since bonds contain references to atoms (atomRefs), it is possible to evaluate where the bonds should be drawn. Atom properties (<i>e.g.</i> calculated charge) can be simulated by spheres or other primitives, so XML/SVG-aware browsers already contain components for a simple molecular renderer.</p>

<p>The examples given in the supplementary materials (supplementary Fig. 9) were produced from CML using the XT parser. SVG promises to be an excellent alternative to applets for the display of static molecules, reactions and spectra.<docml:link type="ref" idref="ref_mayuraSVG ref_csiroSVG"/></p>
</docml:subsection>
</docml:chapter>

<!-- ******************************************************** -->
<!-- *********************** chapter ************************-->
<!-- ******************************************************** -->
<docml:chapter title="Reactions" id="chap_reactions">
<p>The [reaction] element was included in the CML DTD but not elaborated further. The techniques presented here are proofs-of-concept, and further work is required to develop robust and flexible reaction markup.</p>

<p>Reaction markup could potentially get extremely complicated, particularly if atom mapping or functional groups are included. For our initial experiments, we have concentrated on using CML to display simple reaction schemes within the IE browser. This can be considered as an extension of [molecule] markup and is approached in a similar way.</p>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="Linking via @id" id="sub_linking">
<p>A reaction is considered as a series of molecular species; potentially including reactants, products, reagents, intermediates, transition states, <i>etc</i>. These species are then grouped into reaction steps with suitable information given at each step such as reaction conditions, yield, reaction name. If the structure of each species is expressed as a CML [molecule] and supplied with a unique @id value, then a reaction step need only contain references to the @id of each species (<i>via</i> [@href="idname"]) and need not contain the entire molecule. This keeps the CML succinct, enhancing human readability. It also enhances the reusability of chemical components; a library of reactions using the same reactive species needs only contain one copy of its structure. An example of a simple CML reaction is given in <docml:link type="figure" idref="fig_stepwisecode"/> with the molecular structures omitted. A full description of our reaction markup can be found in the supplementary information.</p>

<p>The attribute names @id and @href are those chosen as linkers for CML. Other languages might use different attributes and the parser needs a definition of which these are. IE uses three data type declarations in the schema for this purpose. An attribute declared as dt:type="id" contains an element&apos;s unique identity, dt:type="idref" contains a reference and dt:type="idrefs" may contain one or more references (space separated). The parser is required to ensure all identities contain unique strings and that all references refer to an existing identity.</p> 

<docml:break/>

<docml:box type="coloured" rows="1" cols="1">
<docml:label id="fig_stepwisecode" type="figure" index="18">Simplified 'stepwise' reaction illustrating a Diels-Alder cycloaddition expressed using CML.</docml:label>
<docml:link type="code" idref="code_stepwise"/>
</docml:box>

<p>Links of this sort are particularly useful for comparing or indexing two sets of data against each other. Further chemical examples might be atom mapping in a reaction or peak assignment for a spectrum. Significantly more advanced linking techniques called XLink and XPointer are being developed by the W3C<docml:link type="ref" idref="ref_w3c"/>. These allow for one- or two-way linking between documents and complex one to many or many to one links. Using these techniques, a [reaction] in an XML document could reference data-sheets in a chemical archive. By clicking on a reaction species, the reader would then have access to full chemical data for that molecule.</p>

<docml:box type="white" rows="1" cols="1">
<docml:label id="fig_expoxidation" type="figure" index="19">Stepwise epoxidation reaction displayed in a browser using the Marvin applet (CML directly converted from a .rxn file).</docml:label>
<docml:link type="reaction" display="stepwise" idref="epoxidation_rxn_1" altWeb="images\webimages/styrene.gif" altPrint="images\printimages/styrene.tif" height="259" width="755"/>
</docml:box>

<p>Two stylesheets have been developed to display CML reactions. Both use the Marvin applet (in 2D mode) to display the reaction species and an XHTML table to format the applets into a reaction schema, using  .gif images to represent reaction arrows (Fig. 19). Additional information  such as reaction conditions <i>etc</i>., is displayed above each reaction step or below the arrow, as appropriate. The first stylesheet (<docml:link type="label" idref="fig_stepwisexsl"/>) is able to display multiple reaction steps of the form A + B + .. -> X + Y + ..</p>

<docml:box type="coloured" rows="1" cols="1">
<docml:label id="fig_stepwisexsl" type="figure" index="20">Stepwise reaction stylesheet fragment, re-formatted for clarity.</docml:label>
<docml:link type="code" idref="code_stepwisexsl"/>
</docml:box>

<p>The code to convert the molecular information to a Molfile and to build the invocation of the Marvin applet is almost identical to that described previously and has been omitted. The stylesheet is significantly more structured than previous examples, and contains larger amounts of XHTML. In particular, the requirement for [table] tags restricts the flexibility of the stylesheet. More complex reactions would require dedicated stylesheets written specially for them (supplementary Fig. 10). Alternative approaches would be to use the JME applet, which can handle limited reactions, or SVG, as noted above.</p>
</docml:subsection>
</docml:chapter>

<!-- ******************************************************** -->
<!-- *********************** chapter ************************-->
<!-- ******************************************************** -->
<docml:chapter title="Converting legacy formats to CML" id="chap_converting">
<p>Manually creating CML using simple text editors is laborious and so alternatives are needed. It is hoped that future chemistry software will include filters  saving data directly to CML, but until this occurs, the best solution is to convert existing legacy formats to CML. This has the advantage of normalising the existing range of diverse chemical files to a single format. The extensibility of XML (and hence CML) and the use of generic data holders means that any ASCII-text-based legacy file can be converted to CML without information loss.</p>

<p>CML has been designed to make these conversions as easy as possible. In most cases (<i>e.g.</i> Molfile or JCAMP), this involves identifying blocks of data and wrapping them in the appropriate CML elements. This is equivalent to a complex text search and replace operation. Perl (a widely used text manipulation and report language) is an excellent tool for carrying out exactly this sort of manipulation. Perl scripts are plain text files and are normally run from the command line. With slight alterations, they can also be be run as CGI (common gateway interface) programs on a web server. This allows text written into an online [form] to be sent to the server, converted and returned to the user as an XHTML page (supplementary Fig. 11).</p>

<p>A range of perl converters have been written and are available for use from the ChiMeraL site. Perl cannot easily access binary compressed data and since both Molfile and JCAMP files sometimes use compressed formats, they must be expanded before conversion.  Available converters include: (i) MDL .mol to CML; (ii) MDL .mol to the JME input string; (iii) .sd (archive format) to CML; (iv) .xyz to CML; (v) JCAMP .dx and .cs to CML (JCAMP-CS files produce both a [molecule] and a [spectrum]) (vi) REACSS .rxn (reaction format based on .mol) to CML.</p>
</docml:chapter>
	
<!-- ******************************************************** -->
<!-- *********************** chapter ************************-->
<!-- ******************************************************** -->
<docml:chapter title="Writing complete XML documents" id="chap_xmldoc">
<p>Pure CML documents are best suited to chemical data sheets or archived data. A more flexible approach is to combine chemistry with text and diagrams to from a report or scientific article. Namespacing allows different XML languages to be intimately mixed and an excellent text formatting language already exists in XHTML. A sophisticated XML scientific document might therefore consist of XHTML formatted text, chemistry using CML, symbolic theoretical expressions in MathML, and diagrams either as bitmaps (.gif or .jpg), or better, expressed as SVG. An XML document language is also needed to describe the document structure (Fig. 21) and to wrap these various components. A simple 'docML' language has been developed to illustrate these concepts and used to write several documents, including this article.</p> 

<docml:box type="coloured" rows="1" cols="1">
<docml:label id="fig_docuMLout" type="figure" index="21">Simplified XML document - outlines the document structure.</docml:label>
<docml:link type="code" idref="code_docuMLout"/>
</docml:box>

<p>An XSL stylesheet has been written combining the CML template fragments with a number of templates designed to format the various document components. The stylesheet is generic and able to display any document written using this docML language. In order to allow the author to use familiar XHTML for text formatting, the stylesheet has been designed to leave unrecognised elements unchanged. These pass through to the output, are recognised by the browser as XHTML and formatted appropriately. By setting the document default namespace to XHTML, no element prefixes are required and the document can be written using standard HTML editing tools. A CSS stylesheet is also used, allowing changes to the appearance of the transformed document without having to edit the significantly more complex XSL.</p> 

<p>Both CML and docML components have @id attributes, allowing sophisticated linking behaviour. The stylesheet can display components in any order and is not restricted by the physical order of the code in the XML source. CML molecules, spectra and blocks of sample code can be extremely long and would normally interrupt the chapter/subsection structure of the document. This makes it much harder for a human to read or edit. The preferred approach is to separate out CML data and sample code and move them to the end of the document. Links ([mrw:link builtin="molecule" display="jmol" idref="mol_thf_1"/]) can then be used  within text or figures, to reference these external blocks as they are required.</p>

<docml:box type="coloured" rows="1" cols="1">
<docml:label id="fig_docuMLlink" type="figure" index="22">Part of an XML document showing linking.</docml:label>
<docml:link type="code" idref="code_docuMLlink"/>
</docml:box>

<p>Links can also be used to automatically build and maintain literature or figure references. For example, the stylesheet can search for the start of each chapter, sub-section and figure, then use this information to automatically create an index of titles complete with hyperlinks. Document components can be reordered or even completely rewritten, and these links will be automatically updated. <docml:link type="figure" idref="fig_docuMLlink"/> shows references to a figure and the bibliography (lines 6 and 7) and a link to a CML molecule (line 17). Although the last instructs the stylesheet to use the Jmol applet to render the molecule, a different applet can be chosen simply by changing the value of @display.</p>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="Printing XML - formatting object and FOP" id="sub_FOP">
<p>Formatting objects (FO) is a sub-language of XSL, intended to describe the layout of document components on a printed page. It comprises formatting elements rather similar in concept to XHTML but describing exact positions and font sizes in contrast to relative positioning in XHTML. FOP is a Java application being developed by Apache.<docml:link type="ref" idref="ref_FOP"/> When it is combined with a Java XML/XSL parser (<i>e.g.</i> Xalan), it acts as a formatting object parser and can convert an FO file to an Adobe Acrobat .pdf file. Acrobat is a very widely used for exchanging 'ready for print' electronic documents and, being a read-only format, has important legal implications.</p>

<p>Using multiple stylesheets, an XML document can be transformed for browser display or converted to a FO file for printing. Since the stylesheets can optimise the document for each purpose, the results are far superior to printing directly from the browser. A printable version of this article was produced in this way. It is expected that further converters will become available as this technology matures.</p>
</docml:subsection>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="Reusable journals" id="sub_renewjournals">
<p>Journals and books are currently created for humans to read. Some contain machine-readable supplementary material, but the formats are not usually standardised. Articles in XML/CML have the potential to be entirely machine-processible, which means it would be easy to extract all the [cml:molecule] elements in an article or, indeed, in an entire book, journal, journal collection or publisher&apos;s output.</p>

<p>The reader can then ask sophisticated questions of this data, such as: what molecules contain a given functional group? Where do molecules and their spectra co-occur? Identify all molecules which are described as taking part in reactions.</p>

<p>Note that XML/CML allows flexible queries, so that the author of the article(s) need not necessarily anticipate the use that the publication will be put to. For example, given the relative cheapness of evaluating molecular wavefunctions, the orbitals of all molecules specified by criteria such as size could be computed and, from the resulting XML output, those with given energies or properties extracted. Similarly,  compounds not in the user&apos;s database could be listed for potential synthesis; in time the synthesis could be automatic!</p>

<p>This article is the first with a chemical theme to be expressed completely in XML, which we use here as one model for the future development of chemistry books and journals and which could enable data checking at authorship time, extensive crosslinking of information and normalisation of existing information.</p>
</docml:subsection>
</docml:chapter>	

<!-- ******************************************************** -->
<!-- *********************** chapter ************************-->
<!-- ******************************************************** -->
<docml:chapter title="Conclusion" id="chap_conclusion">
<p>Applications for the CML/XHTML system described here might include <i>inter alia</i> electronic journals, safety data sheets  as part of drug ratification procedures, patent processing, where microscopic capture of information is essential (and failure can lead to the patent being challenged), and e-commerce. One can envisage future parsers able to comprehend both CML and XHTML without the requirement for sophisticated stylesheets. By including CML support in  computational chemistry and modelling software, a 'rolling stone' approach can be taken whereby each process the molecule passes through (structure optimisation, property calculation, <i>etc</i>.) involves full information retention. This is in contrast to present solutions where information can be lost at every stage. Enhanced applet-CML communication and the possibility of producing CML from an editor<docml:link type="ref" idref="ref_JChemPaint"/> also have great potential. Ultimately, server-side processing of XML/XSL stylesheets will allow powerful stylesheet transformations to be accessible using any web browser.</p>

<!-- ******************************************* -->
<!-- **************** subsection *************** -->
<!-- ******************************************* -->
<docml:subsection title="Acknowledgement" id="sub_ack">
<p>M. W. would like to thank the Chemical Structure Association (CSA) for the award of a bursary and an ExemplarChem prize.</p>
</docml:subsection>
</docml:chapter>
	
<!-- ********************************************************* -->
<!-- *********************** bibliography ******************** -->
<!-- ********************************************************* -->
<docml:bibliography title="References and notes" id="bibliography">
<docml:ref id="ref_ChiMeraLsite" href="http://www.xml-cml.org/chimeral/">
	Demonstrations, examples and further information can be found in the 
	<docml:index>6</docml:index>
	<docml:title>ChiMeraL website</docml:title>
</docml:ref>
<docml:ref id="ref_CML1.0">
	For a formal description of CML version 1.0, see:
	<docml:index>5</docml:index>
	<docml:list type="authors">
		<docml:author><docml:name type="first">P.</docml:name><docml:name type="family">Murray-Rust</docml:name></docml:author>
		<docml:author><docml:name type="first">H. S.</docml:name><docml:name type="family">Rzepa</docml:name></docml:author>
	</docml:list>
	<docml:publication>J. Chem. Inf. Comput. Sci.</docml:publication>
	<docml:date>1999</docml:date>
	<docml:volume>39</docml:volume>
	<docml:page type="first">928</docml:page>
</docml:ref>
<docml:ref id="ref_CML2">
	<docml:index>2</docml:index>
	<docml:list type="authors">
		<docml:author><docml:name type="first">H. S.</docml:name><docml:name type="family">Rzepa</docml:name></docml:author>
		<docml:author><docml:name type="first">B. J.</docml:name><docml:name type="family">Whitaker</docml:name></docml:author>
		<docml:author><docml:name type="first">M. J.</docml:name><docml:name type="family">Winter</docml:name></docml:author>
	</docml:list>
	<docml:publication>J. Chem. Soc., Chem. Commun.</docml:publication>
	<docml:date>1994</docml:date>
	<docml:page type="first">1907</docml:page>
</docml:ref>
<docml:ref id="ref_CML3">
	<docml:index>3</docml:index>
	<docml:list type="authors">
		<docml:author><docml:name type="first">O.</docml:name><docml:name type="family">Casher</docml:name></docml:author>
		<docml:author><docml:name type="first">G.</docml:name><docml:name type="family">Chandramohan</docml:name></docml:author>
		<docml:author><docml:name type="first">M.</docml:name><docml:name type="family">Hargreaves</docml:name></docml:author>
		<docml:author><docml:name type="first">C.</docml:name><docml:name type="family">Leach</docml:name></docml:author>
		<docml:author><docml:name type="first">P.</docml:name><docml:name type="family">Murray-Rust</docml:name></docml:author>
		<docml:author><docml:name type="first">R.</docml:name><docml:name type="family">Sayle</docml:name></docml:author>
		<docml:author><docml:name type="first">H. S.</docml:name><docml:name type="family">Rzepa</docml:name></docml:author>
		<docml:author><docml:name type="first">B. J.</docml:name><docml:name type="family">Whitaker</docml:name></docml:author>
	</docml:list>
	<docml:publication>J. Chem. Soc., Perkin Trans 2</docml:publication>
	<docml:date>1995</docml:date>
	<docml:page type="first">7</docml:page>
</docml:ref>
<docml:ref id="ref_MIME">
	<docml:index>1</docml:index>
	<docml:list type="authors">
		<docml:author><docml:name type="first">H. S. </docml:name><docml:name type="family">Rzepa</docml:name></docml:author>
		<docml:author><docml:name type="first">P.</docml:name><docml:name type="family">Murray-Rust</docml:name></docml:author>
		<docml:author><docml:name type="first">B. J.</docml:name><docml:name type="family">Whitaker</docml:name></docml:author>
	</docml:list>
	<docml:publication>Chem. Soc. Revs.</docml:publication>
	<docml:date>1997</docml:date>
	<docml:page type="first">1</docml:page>
</docml:ref>




<docml:ref id="ref_CML4">
	<docml:index>4</docml:index>
	<docml:list type="authors">
		<docml:author><docml:name type="first">P.</docml:name><docml:name type="family">Murray-Rust</docml:name></docml:author>
		<docml:author><docml:name type="first">C.</docml:name><docml:name type="family">Leach</docml:name></docml:author>
		<docml:author><docml:name type="first">H. S.</docml:name><docml:name type="family">Rzepa</docml:name></docml:author>
	</docml:list>
	<docml:publication>Abs. Papers. Am . Chem. Soc.</docml:publication>
	<docml:date>1995</docml:date>
	<docml:volume>210</docml:volume>
	<docml:page type="first">40-COMP</docml:page>
</docml:ref>
<docml:ref id="ref_JCAMP-CS">
	<docml:index>27</docml:index>
	<docml:list type="authors">
		<docml:author><docml:name type="first">J.</docml:name><docml:name type="family">Gasteiger</docml:name></docml:author>
		<docml:author><docml:name type="first">B. M. P.</docml:name><docml:name type="family">Hendriks</docml:name></docml:author>
		<docml:author><docml:name type="first">P.</docml:name><docml:name type="family">Hoever</docml:name></docml:author>
		<docml:author><docml:name type="first">C.</docml:name><docml:name type="family">Jochum</docml:name></docml:author>
		<docml:author><docml:name type="first">H.</docml:name><docml:name type="family">Somberg</docml:name></docml:author>
	</docml:list>
	<docml:publication>Appl. Spectrosc.</docml:publication>
	<docml:date>1991</docml:date>
	<docml:volume>45</docml:volume>
	<docml:page type="first">4</docml:page>
	<docml:page type="last">11</docml:page>
</docml:ref>
<docml:ref id="ref_JCAMP-DXforNMR">
	<docml:index>25</docml:index>
	<docml:title></docml:title>
	<docml:list type="authors">
		<docml:author><docml:name type="first">A. N.</docml:name><docml:name type="family">Davies</docml:name></docml:author>
		<docml:author><docml:name type="first">P.</docml:name><docml:name type="family">Lampen</docml:name></docml:author>
	</docml:list>
	<docml:publication>Appl. Spectrosc.</docml:publication>
	<docml:date>1993</docml:date>
	<docml:volume>47</docml:volume>
	<docml:page type="first">1093</docml:page>
	<docml:page type="last">1099</docml:page>
</docml:ref>
<docml:ref id="ref_JCAMP-DXforMS">
	<docml:index>26</docml:index>
	<docml:title></docml:title>
	<docml:list type="authors">
		<docml:author><docml:name type="first">P.</docml:name><docml:name type="family">Lampen</docml:name></docml:author>
		<docml:author><docml:name type="first">H.</docml:name><docml:name type="family">Hillig</docml:name></docml:author>
		<docml:author><docml:name type="first">A. N.</docml:name><docml:name type="family">Davis</docml:name></docml:author>
		<docml:author><docml:name type="first">M.</docml:name><docml:name type="family">Linscheid</docml:name></docml:author>
	</docml:list>
	<docml:publication>Appl. Spectrosc.</docml:publication>
	<docml:date>1994</docml:date>
	<docml:volume>48</docml:volume>
	<docml:page type="first">1545</docml:page>
	<docml:page type="last">1552</docml:page>
</docml:ref>
<docml:ref id="ref_JCAMP-DXforIR">
	<docml:index>23</docml:index>
	<docml:title></docml:title>
	<docml:list type="authors">
		<docml:author><docml:name type="first">R. S.</docml:name><docml:name type="family">McDonald</docml:name></docml:author>
		<docml:author><docml:name type="first">P. A.</docml:name><docml:name type="family">Wilks Jr.</docml:name></docml:author>
	</docml:list>
	<docml:publication>Appl. Spectrosc.</docml:publication>
	<docml:date>1988</docml:date>
	<docml:volume>42</docml:volume>
	<docml:page type="first">151</docml:page>
	<docml:page type="last">162</docml:page>
</docml:ref>
<docml:ref id="ref_JME">
	<docml:index>16</docml:index>
	<docml:title></docml:title>
	<docml:list type="authors">
		<docml:author><docml:name type="first">P.</docml:name><docml:name type="family">Ertl</docml:name></docml:author>
		<docml:author><docml:name type="first">O.</docml:name><docml:name type="family">Jacob</docml:name></docml:author>
	</docml:list>
	<docml:publication>THEOCHEM</docml:publication>
	<docml:date>1997</docml:date>
	<docml:volume>419</docml:volume>
	<docml:page type="first">113</docml:page>
	<docml:page type="last">120</docml:page>
</docml:ref>
<docml:ref id="ref_msXML" href="http://msdn.microsoft.com/xml/">
	<docml:index>13</docml:index>
	<docml:title>Microsoft XML developer&apos;s site</docml:title>
</docml:ref>
<docml:ref id="ref_w3c" href="http://www.w3.org">
	<docml:index>9</docml:index>
	<docml:title>World Wide Web Consortium (W3C). Specifications for XML, XHTML, XSL, SVG, Schemas and other standards can be found at this site; A. Homer, XML IE5-Programmer's Reference, Wrox Press, Chicago, IL, USA, 1999; H. Dietel, P. Deitel, T. Lin and T. Neito, XML How to Program, Prentice Hall, Englewood Cliffs, NJ, USA, 2000; H. Dietel, P. Deitel, T. Lin and T. Neito, The Complete XML Training Course, Student Edition, Prentice Hall, Englewood Cliffs, NJ, USA, 2000.</docml:title>
</docml:ref>
	

<docml:ref id="ref_adobeSVG" href="http://www.adobe.com/svg/viewer/install/">
	<docml:index>30</docml:index>
	<docml:title>Adobe SVG browser plugin</docml:title>

</docml:ref>
<docml:ref id="ref_jmol" href="http://www.openscience.org/jmol/">
	<docml:index>19</docml:index>
	<docml:list type="authors">
		<docml:author><docml:name type="first">D.</docml:name><docml:name type="family">Gezelter</docml:name></docml:author>
	</docml:list>
	<docml:title>Jmol-Open source Java 3D viewer</docml:title>
</docml:ref>
<docml:ref id="ref_jspec" href="http://www.ch.ic.ac.uk/java/applets/jspec/spectra/">
	<docml:index>28</docml:index>
	<docml:list type="authors">
		<docml:author><docml:name type="first">G.</docml:name><docml:name type="family">Cottenceau</docml:name></docml:author>
		<docml:author><docml:name type="first">H. S.</docml:name><docml:name type="family">Rzepa</docml:name></docml:author>
	</docml:list>
	<docml:title>JSpec - Java spectral visualiser for JCAMP-DX and SPC format Files</docml:title>
</docml:ref>
<docml:ref id="ref_JChemPaint" href="http://www.ice.mpg.de/~stein/projects/JChemPaint/">
	JChemPaint - open source Java 2D editor
	<docml:index>34</docml:index>
	<docml:list type="authors">
		<docml:author><docml:name type="first">S.</docml:name><docml:name type="family">Krause</docml:name></docml:author>
		<docml:author><docml:name type="first">E.</docml:name><docml:name type="family">Willihagen</docml:name></docml:author>
		<docml:author><docml:name type="first">C.</docml:name><docml:name type="family">Steinbeck</docml:name></docml:author>
	</docml:list>
	<docml:publication>Molecules</docml:publication>
	<docml:date>2000</docml:date>
	<docml:volume>5</docml:volume>
	<docml:page type="first">93</docml:page>
	<docml:page type="last">98</docml:page>
</docml:ref>
<docml:ref id="ref_cmlorg" href="http://www.xml-cml.org/">
	<docml:index>11</docml:index>
	<docml:title>Chemical markup language homesite</docml:title>
</docml:ref>
<docml:ref id="ref_alphaworks" href="http://www.alphaworks.ibm.com/">
	<docml:index>14</docml:index>
	<docml:title>IBM alphaworks - XML/Java development site</docml:title>
</docml:ref>
<docml:ref id="ref_marvin" href="http://www.chemaxon.com/marvin/">
	<docml:index>20</docml:index>
	<docml:title>Marvin display and editing applet - Chemaxon</docml:title>
</docml:ref>
<docml:ref id="ref_mdl" href="http://www.mdli.com">
	<docml:index>7</docml:index>
	<docml:title>MDL Information Systems</docml:title>
</docml:ref>
<docml:ref id="ref_NIST" href="http://webbook.nist.gov/">
	<docml:index>22</docml:index>
	<docml:list type="authors">
		<docml:author><docml:name type="first">W. G.</docml:name><docml:name type="family">Mallard</docml:name></docml:author>
		<docml:author><docml:name type="first">P. J.</docml:name><docml:name type="family">Linstron</docml:name></docml:author>
	</docml:list>
	<docml:publication>Abstr. Pap. Am. Chem. Soc.</docml:publication>
	<docml:date>1998</docml:date>
	<docml:volume>216</docml:volume>
	<docml:page type="first">U526</docml:page>
	<docml:page type="last">U526</docml:page>
</docml:ref>
<docml:ref id="ref_corelSVG" href="http://venus.corel.com/nasapps/DrawSVGDownload">
	<docml:index>29</docml:index>
	<docml:title>Corel Draw 9 SVG plugin</docml:title>
</docml:ref>
<docml:ref id="ref_mayuraSVG" href="http://www.mayura.com/">
	<docml:index>31</docml:index>
	<docml:title>Mayura Draw - editor able to export SVG</docml:title>
</docml:ref>
<docml:ref id="ref_csiroSVG" href="http://sis.cmis.csiro.au/svg/index.html">
	<docml:index>32</docml:index>
	<docml:title>Csiro SVG Toolkit</docml:title>
</docml:ref>
<docml:ref id="ref_FOP" href="http://xml.apache.org/fop/">
	<docml:index>33</docml:index>
	<docml:title>Apache.com - FOP project: XML conversion to Adobe Acrobat</docml:title>
</docml:ref>
<docml:ref id="ref_brookhaven" href="http://www.rcsb.org/pdb/">
	<docml:index>8</docml:index>
	<docml:title>Brookhaven Protein Data Bank</docml:title>
</docml:ref>
<docml:ref id="ref_acrobat" href="http://www.adobe.com/products/acrobat/main.html">
	<docml:index>12</docml:index>
	<docml:title>Adobe Acrobat</docml:title>
</docml:ref>
<docml:ref id="ref_chemcom">
	<docml:index>10</docml:index>
	<docml:list type="authors">
		<docml:author><docml:name type="first">P.</docml:name><docml:name type="family">Murray-Rust</docml:name></docml:author>
		<docml:author><docml:name type="first">H. S.</docml:name><docml:name type="family">Rzepa</docml:name></docml:author>
		<docml:author><docml:name type="first">M.</docml:name><docml:name type="family">Wright</docml:name></docml:author>
	</docml:list>
	<docml:publication>Chem. Commun.</docml:publication>
	<docml:date>2000</docml:date>
	<docml:page type="first">1471</docml:page>
</docml:ref>
<docml:ref id="ref_java" href="http://java.sun.com/">
	<docml:index>15</docml:index>
	<docml:title>Sun - Java Technology Homepage</docml:title>
</docml:ref>
<docml:ref id="ref_chemfinder">
	<docml:index>17</docml:index>
	<docml:list type="authors">
		<docml:author><docml:name type="first">J.</docml:name><docml:name type="family">Brecher</docml:name></docml:author>
	</docml:list>
	<docml:publication>Chimia</docml:publication>
	<docml:date>1998</docml:date>
	<docml:volume>52</docml:volume>
	<docml:page type="first">658</docml:page>
</docml:ref>
<docml:ref id="ref_SDA" href="http://www.acdlabs.com/products/java/sda/">
	<docml:index>21</docml:index>
	<docml:title>ACD Labs - Structure Drawing Applet</docml:title>
</docml:ref>
<docml:ref id="ref_spc" href="http://www.galactic.com/">
	<docml:index>24</docml:index>
	<docml:title>SPC - Spectroscopy Software Solutions</docml:title>
</docml:ref>
<docml:ref id="ref_SMILES">
	<docml:index>18</docml:index>
	<docml:title></docml:title>
	<docml:list type="authors">
		<docml:author><docml:name type="first">D.</docml:name><docml:name type="family">Weininger</docml:name></docml:author>
	</docml:list>
	<docml:publication>J. Chem. Inf. Comput. Sci.</docml:publication>
	<docml:date>1988</docml:date>
	<docml:volume>28</docml:volume>
	<docml:page type="first">31</docml:page>
</docml:ref>

</docml:bibliography>	
	
<!-- ********************************************************** -->
<!-- ********************* Code Block ************************* -->
<!-- ********************************************************** -->

<!-- ****************************************************************** -->

<docml:code id="code_exampleSVGCML" xml:space="preserve">
<font class="strong">..</font>
<font class="em"><docml:lt/>svg:svg<docml:gt/></font>
  <docml:lt/>defs<docml:gt/>
    <font class="strong"><docml:lt/>cml:molecule id="mol1"<docml:gt/>...<docml:lt/>/cml:molecule<docml:gt/> 
    <docml:lt/>cml:molecule id="mol2"<docml:gt/>...<docml:lt/>/cml:molecule<docml:gt/></font> 
  <docml:lt/>/defs<docml:gt/>
  <docml:lt/>use href="#mol1" x="100" y="0"/<docml:gt/>
 <font class="em"> <docml:lt/>svg:path d="M 100 0 l 100 0 100 100 0 100 z"<docml:gt/></font>
    <docml:lt/>string type="metadata"<docml:gt/>Conformational change<docml:lt/>/string<docml:gt/>
    <font class="strong"><docml:lt/>cml:float name="temperature" units="Celsius"<docml:gt/>80<docml:lt/>/cml:float<docml:gt/></font>
  <font class="em"><docml:lt/>/svg:path<docml:gt/></font>
  <docml:lt/>use href="#mol2" x="0" y="100"/<docml:gt/>
<font class="em"><docml:lt/>/svg:svg<docml:gt/></font>
<font class="strong">..</font>
</docml:code>

<!-- ****************************************************************** -->

<docml:code id="code_treestructure2" xml:space="preserve">
<font class="em"><docml:lt/>?xml version="1.0"?<docml:gt/>
<docml:lt/>?xml-stylesheet type="text/xsl"
	href="http://www.ch.ic.ac.uk/chimeral/publications/document.xsl" ?<docml:gt/>
 
<docml:lt/>document title="</font>Simple example of an XML document<font class="em">" id="xmldoc_simpleEx"
	xmlns:xhtml="http://www.w3.org/1999/xhtml"
	xmlns:cml="x-schema:http://www.xml-cml.org/chimeral/cml_schema_ie_02.xml"<docml:gt/>

<docml:lt/>xhtml:p<docml:gt/></font>This is a block of text formatted using XHTML (HTML following
 	XML rules). Normal <font class="em"><docml:lt/>xhtml:i<docml:gt/></font>italic<font class="em"><docml:lt/>/xhtml:i<docml:gt/></font> and <font class="em"><docml:lt/>xhtml:b<docml:gt/></font>bold<font class="em"><docml:lt/>/xhtml:b<docml:gt/></font>
 	elements can be used as can more complex <font class="em"><docml:lt/>xhtml:font face="Helvetica"
 	color="#000080"<docml:gt/></font>fonts and colours.<font class="em"><docml:lt/>/xhtml:font<docml:gt/></font> Following this is a block
 	of molecular information marked up using CML. Additional blocks using
 	other XML languages could be added at will.<font class="em"><docml:lt/>xhtml:/p<docml:gt/></font>

<font class="em"><docml:lt/>cml:cml title="</font>Properties of Caffeine<font class="em">" id="cml_caffeine"<docml:gt/>
   	<docml:lt/>cml:molecule title="</font>caffeine<font class="em">" id="mol_caffeine"<docml:gt/>
      	<docml:lt/>cml:formula<docml:gt/></font>C8 H10 N4 O2<font class="em"><docml:lt/>/cml:formula<docml:gt/>
      	<docml:lt/>cml:string title="CAS"<docml:gt/></font>58-08-2<font class="em"><docml:lt/>/cml:string<docml:gt/>
      	<docml:lt/>cml:float title="molecule weight"<docml:gt/></font>194.19<font class="em"><docml:lt/>/cml:float<docml:gt/>
      	<docml:lt/>cml:float title="melting point" units="degC"<docml:gt/></font>238<font class="em"><docml:lt/>/cml:float<docml:gt/>
     		<docml:lt/>cml:string title="comments"<docml:gt/></font>White powder or white glistening needles
		 usually melted together. LIGHT SENSITIVE<font class="em"><docml:lt/>/cml:string<docml:gt/>
	  	<docml:lt/>cml:list title="alternate names"<docml:gt/>
			<docml:lt/>cml:string title="name"<docml:gt/></font>1,3,7-Trimethylxanthine<font class="em"><docml:lt/>/cml:string<docml:gt/>
			<docml:lt/>cml:string title="name"<docml:gt/></font>1,3,7-Trimethyl-2,6-dioxopurine<font class="em"><docml:lt/>/cml:string<docml:gt/>
			<docml:lt/>cml:string title="name"<docml:gt/></font>7-Methyltheophylline<font class="em"><docml:lt/>/cml:string<docml:gt/>
		<docml:lt/>/cml:list<docml:gt/>
	<docml:lt/>/cml:molecule<docml:gt/>
<docml:lt/>/cml:cml<docml:gt/>
<docml:lt/>/document<docml:gt/></font>
</docml:code>


<!-- ****************************************************************** -->

<docml:code id="code_namespace" xml:space="preserve">
<font class="em"><docml:lt/>?xml version="1.0"?<docml:gt/>
<docml:lt/>?xml-stylesheet type="text/xsl" href="document.xsl" ?<docml:gt/>
<docml:lt/>mrw:document
	<font class="comment">xmlns="http://www.w3.org/1999/xhtml"
	xmlns:mrw="x-schema:http://www.xml-cml.org/chimeral/mrw_schema_01.xml"
	xmlns:chimeral="x-schema:http://www.xml-cml.org/chimeral/spectrum_schema_ie_01.xml"</font><docml:gt/>

<docml:lt/>mrw:abstract<docml:gt/></font>We report the <font class="strong">..</font><font class="em"><docml:lt/>/mrw:abstract<docml:gt/>
	
<docml:lt/>mrw:chapter id="chap_introduction" title="</font>Introduction<font class="em">"<docml:gt/>
<docml:lt/>mrw:index<docml:gt/>1<docml:lt/>/mrw:index<docml:gt/>

<docml:lt/>p<docml:gt/></font>The <font class="em"><docml:lt/>b<docml:gt/></font>World-Wide-Web<font class="em"><docml:lt/>/b<docml:gt/></font> was originally developed as a collaborative tool
for scientists, allowing for rapid distribution and publication of results and
greatly improved communication by email. It has become increasingly common for
academic papers and results to be posted online, this being an extremely <font class="strong">..</font><font class="em"><docml:lt/>/p<docml:gt/>

<docml:lt/>/mrw:chapter<docml:gt/>

<docml:lt/>cml title="</font>cml data block<font class="em">" id="cml_moldata"
	<font class="comment">xmlns="x-schema:http://www.xml-cml.org/chimeral/cml_schema_ie_02.xml"</font><docml:gt/>
   	<docml:lt/>molecule title="</font>caffeine<font class="em">" id="mol_caffeine"<docml:gt/>
	<font class="strong">..</font>
	<docml:lt/>/molecule<docml:gt/>
	<docml:lt/>chimeral:spectrum title="</font>Furan, tetrahydro-<font class="em">" id="spect_furantetrah_ir_1"<docml:gt/>
	<font class="strong">..</font>
	<docml:lt/>/chimeral:spectrum<docml:gt/>
<docml:lt/>/cml<docml:gt/>

<docml:lt/>/mrw:document<docml:gt/></font>
</docml:code>


<!-- ****************************************************************** -->

<docml:code id="code_CMLexample" xml:space="preserve">
<font class="em"><docml:lt/>cml title="tetrahydrofuran" id="cml_THF"<docml:gt/></font>
	<font class="comment"><docml:lt/>molecule title="Furan, tetrahydro-" id="mol_thf_1"<docml:gt/></font><font class="em">
		<docml:lt/>formula<docml:gt/></font>C4 H8 O<font class="em"><docml:lt/>/formula<docml:gt/>
		<docml:lt/>string title="CAS"<docml:gt/></font>109-99-9<font class="em"><docml:lt/>/string<docml:gt/>
		<docml:lt/>float title="molecular weight"<docml:gt/></font>72.1066<font class="em"><docml:lt/>/float<docml:gt/>
		<docml:lt/>string title="ACX"<docml:gt/></font>I1001473<font class="em"><docml:lt/>/string<docml:gt/>
		<docml:lt/>string title="DOT"<docml:gt/></font>UN 2056<font class="em"><docml:lt/>/string<docml:gt/>
		<docml:lt/>string title="RTECS"<docml:gt/></font>LU5950000<font class="em"><docml:lt/>/string<docml:gt/>
		<docml:lt/>float title="melting point" units="degC"<docml:gt/></font>-108.3<font class="em"><docml:lt/>/float<docml:gt/>
		<docml:lt/>float title="boiling point" units="degC"<docml:gt/></font>65.0<font class="em"><docml:lt/>/float<docml:gt/>
		<docml:lt/>float title="specific gravity"<docml:gt/></font>0.886<font class="em"><docml:lt/>/float<docml:gt/>
		<docml:lt/>float title="water solubility" convention="g/100 mL at 23 degC"<docml:gt/></font>30.0<font class="em"><docml:lt/>/float<docml:gt/>
		<docml:lt/>string title="comments"<docml:gt/></font>
		Colorless liquid with an ether-like odor detectable at 2 to 50 ppm.
		HYGROSCOPIC<font class="em"><docml:lt/>/string<docml:gt/>
		<docml:lt/>list title="alternate names"<docml:gt/>
			<docml:lt/>string title="name"<docml:gt/></font>THF<font class="em"><docml:lt/>/string<docml:gt/>
			<docml:lt/>string title="name"<docml:gt/></font>1,4-Epoxybutane<font class="em"><docml:lt/>/string<docml:gt/>
			<docml:lt/>string title="name"<docml:gt/></font>Butylene oxide<font class="em"><docml:lt/>/string<docml:gt/>
			<docml:lt/>string title="name"<docml:gt/></font>Cyclotetramethylene<font class="em"><docml:lt/>/string<docml:gt/>
			<docml:lt/>string title="name"<docml:gt/></font>tetramethylene oxide<font class="em"><docml:lt/>/string<docml:gt/></font>
			<font class="strong"><docml:lt/>!-- etc --<docml:gt/></font>
		<font class="em"><docml:lt/>/list<docml:gt/></font>
	<font class="comment"><docml:lt/>/molecule<docml:gt/></font>
<docml:lt/>/cml<docml:gt/></docml:code>

<!-- ****************************************************************** -->

<docml:code id="code_HTMLtable" xml:space="preserve">
<font class="em"><docml:lt/>?xml version="1.0"?<docml:gt/>
<docml:lt/>xsl:stylesheet xmlns:xsl="http://www.w3.org/tr/WD-xsl"<docml:gt/></font>
<font class="strong"><docml:lt/>!-- root --<docml:gt/></font>
<font class="em"><docml:lt/>xsl:template match="/"<docml:gt/>
<docml:lt/>xsl:apply-templates select="*"/<docml:gt/>
<docml:lt/>/xsl:template<docml:gt/></font>

<font class="strong"><docml:lt/>!-- match <docml:lt/>cml<docml:gt/> and build XHTML page --<docml:gt/></font>
<font class="em"><docml:lt/>xsl:template match="cml"<docml:gt/></font>
<docml:lt/>!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 strict//EN"<docml:gt/>
<docml:lt/>html<docml:gt/>
	<docml:lt/>head<docml:gt/><docml:lt/>title<docml:gt/>
	<font class="em"><docml:lt/>xsl:value-of select="@title"/<docml:gt/></font> - <font class="em"><docml:lt/>xsl:value-of select="@id"/<docml:gt/></font><docml:lt/>/title<docml:gt/><docml:lt/>/head<docml:gt/>
	<docml:lt/>body<docml:gt/>
	<font class="em"><docml:lt/>xsl:apply-templates select="molecule"/<docml:gt/></font>
	<docml:lt/>/body<docml:gt/>
<docml:lt/>/html<docml:gt/>
<font class="em"><docml:lt/>/xsl:template<docml:gt/></font>
		
<font class="strong"><docml:lt/>!-- build xhtml table --<docml:gt/></font>
<font class="em"><docml:lt/>xsl:template match="molecule"<docml:gt/></font>
	<font class="strong"><docml:lt/>!-- Pull out @id="" etc --<docml:gt/></font>
	<docml:lt/>table<docml:gt/><docml:lt/>tr<docml:gt/>
		<docml:lt/>td<docml:gt/>Molecule ID:<docml:lt/>/td<docml:gt/>
		<docml:lt/>td<docml:gt/>Formula:<docml:lt/>/td<docml:gt/>
		<docml:lt/>td<docml:gt/>CAS:<docml:lt/>/td<docml:gt/>
		<font class="strong"><docml:lt/>!-- etc. --<docml:gt/></font>
		<docml:lt/>/tr<docml:gt/><docml:lt/>tr<docml:gt/>
		<docml:lt/>td<docml:gt/><font class="em"><docml:lt/>xsl:value-of select="@id"/<docml:gt/></font><docml:lt/>/td<docml:gt/>
		<docml:lt/>td<docml:gt/><font class="em"><docml:lt/>xsl:value-of select="formula"/<docml:gt/></font><docml:lt/>/td<docml:gt/>
		<docml:lt/>td<docml:gt/><font class="em"><docml:lt/>xsl:value-of select="*[@title = 'CAS']"/<docml:gt/></font><docml:lt/>/td<docml:gt/>
		<font class="strong"><docml:lt/>!-- etc. --<docml:gt/></font>
		<docml:lt/>/td<docml:gt/>
		<docml:lt/>/tr<docml:gt/><docml:lt/>tr<docml:gt/>
		<docml:lt/>td<docml:gt/>Alternate Names:<docml:lt/>/td<docml:gt/>
		<docml:lt/>td colspan="6"<docml:gt/>
		<font class="em"><docml:lt/>xsl:for-each select="list[@title = 'alternate names']/string[@title='name']"<docml:gt/></font>
		<font class="em"><docml:lt/>xsl:value-of select="text()"/<docml:gt/></font>, <font class="em"><docml:lt/>/xsl:for-each<docml:gt/></font>
		<docml:lt/>/td<docml:gt/>
		<docml:lt/>/tr<docml:gt/>
		<font class="strong"><docml:lt/>!-- etc --<docml:gt/></font>
	<docml:lt/>/table<docml:gt/>
<font class="em"><docml:lt/>/xsl:template<docml:gt/>
<docml:lt/>/xsl:stylesheet<docml:gt/></font>
</docml:code>

<!-- ****************************************************************** -->

<docml:code id="code_dxapplet" xml:space="preserve">
<font class="em"><docml:lt/>applet name="</font>jSpec<font class="em">" code="</font>Visua.class<font class="em">"
	width="400" height="250"<docml:gt/>
<docml:lt/>param name="SOURCE" value="</font>
	##TITLE=Furan, tetrahydro-
	##JCAMP-DX=4.24
	##DATA type=MASS SPECTRUM
	##CAS REGISTRY NO=109-99-9
	##EPA MASS SPEC NO=61352
	##MOLFORM=C4H8O
	etc."<font class="em"><docml:gt/>
<docml:lt/>/applet<docml:gt/></font>
</docml:code>

<!-- ****************************************************************** -->

<docml:code id="code_JME" xml:space="preserve">
<font class="strong">..</font>
<font class="strong"><docml:lt/>!-- match <docml:lt/>cml<docml:gt/> and build HTML page --<docml:gt/></font>
<font class="em"><docml:lt/>xsl:template match="cml"<docml:gt/></font>
<docml:lt/>!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 strict//EN"<docml:gt/>
<docml:lt/>html<docml:gt/>
	<docml:lt/>head<docml:gt/><docml:lt/>title<docml:gt/>
	<font class="em"><docml:lt/>xsl:value-of select="@title"/<docml:gt/></font> - <font class="em"><docml:lt/>xsl:value-of select="@id"/<docml:gt/></font><docml:lt/>/title<docml:gt/><docml:lt/>/head<docml:gt/>
	<docml:lt/>body onLoad="document.JME.readMolecule(jmeoutput.value)"<docml:gt/>
	<font class="em"><docml:lt/>xsl:apply-templates select="molecule"/<docml:gt/></font>
	<docml:lt/>/body<docml:gt/>
<docml:lt/>/html<docml:gt/>
<font class="em"><docml:lt/>/xsl:template<docml:gt/></font>
<font class="strong">..</font>
<font class="strong"><docml:lt/>!-- match molecule and display using JME --<docml:gt/></font>
<font class="em"><docml:lt/>xsl:template match="molecule"<docml:gt/>
	</font><docml:lt/>applet code="JME.class" name="JME" archive="JME.jar" width="400" height="300"<docml:gt/>
	You have to enable Java and JavaScript on your machine !
	<docml:lt/>/applet<docml:gt/><font class="em">
	<font class="strong"><docml:lt/>!-- hidden form element contains the JME data string --<docml:gt/></font>
	<docml:lt/>xsl:element name="input"<docml:gt/>
		<docml:lt/>xsl:attribute name="name"<docml:gt/></font>jmeoutput<font class="em"><docml:lt/>/xsl:attribute<docml:gt/>
		<docml:lt/>xsl:attribute name="type"<docml:gt/></font>hidden<font class="em"><docml:lt/>/xsl:attribute<docml:gt/>
		<docml:lt/>xsl:attribute name="value"<docml:gt/>
			<font class="strong"><docml:lt/>!-- select last atom and calculate its number --<docml:gt/></font>
			<docml:lt/>xsl:for-each select="list/atom[end()]" xml:space="preserve"<docml:gt/>
				<docml:lt/>xsl:eval<docml:gt/>formatIndex(childNumber(this), "1")<docml:lt/>/xsl:eval<docml:gt/> 
			<docml:lt/>/xsl:for-each<docml:gt/>
			<font class="strong"><docml:lt/>!-- select last bond and calculate its number --<docml:gt/></font>
			<docml:lt/>xsl:for-each select="list/bond[end()]" xml:space="preserve"<docml:gt/>
				<docml:lt/>xsl:eval<docml:gt/>formatIndex(childNumber(this), "1")<docml:lt/>/xsl:eval<docml:gt/>
			<docml:lt/>/xsl:for-each<docml:gt/>
			<font class="strong"><docml:lt/>!-- select each atom and extract coordinates and atom type --<docml:gt/></font>
			<docml:lt/>xsl:for-each select="list/atom" xml:space="preserve"<docml:gt/> 
				<docml:lt/>xsl:value-of select="*[@builtin = 'elementType']"/<docml:gt/> 		
				<docml:lt/>xsl:value-of select="*[@builtin = 'x3']"/<docml:gt/> 
				<docml:lt/>xsl:value-of select="*[@builtin = 'y3']"/<docml:gt/>
			<docml:lt/>/xsl:for-each<docml:gt/>
			<font class="strong"><docml:lt/>!-- select each bond and extract atom refs and bond order --<docml:gt/></font>
			<docml:lt/>xsl:for-each select="list/bond" xml:space="preserve"<docml:gt/>			
				<docml:lt/>xsl:value-of select="*[@builtin = 'atomRef']"/<docml:gt/>
				<docml:lt/>xsl:value-of select="*[@builtin = 'order']"/<docml:gt/>
			<docml:lt/>/xsl:for-each<docml:gt/>
		<docml:lt/>/xsl:attribute<docml:gt/>
	<docml:lt/>/xsl:element<docml:gt/>
<docml:lt/>/xsl:template<docml:gt/></font>
<font class="strong">..</font>
</docml:code>


<!-- ****************************************************************** -->

<docml:code id="code_molecule" xml:space="preserve">
<font class="strong">..</font>
<font class="em"><docml:lt/>molecule title="</font>ethanol<font class="em">" id="</font>mol_ethanol<font class="em">"<docml:gt/>
	<docml:lt/>formula<docml:gt/></font>C2 H6 O<font class="em"><docml:lt/>/formula<docml:gt/>
	<docml:lt/>string title="CAS"<docml:gt/><font class="em"></font>64-17-5<font class="em"></font><docml:lt/>/string<docml:gt/>
	<font class="strong"><docml:lt/>!-- etc --<docml:gt/></font>
	<docml:lt/>list title="atoms"<docml:gt/>
		<docml:lt/>atom id="</font>ethanol_a_1<font class="em">"<docml:gt/>
			<docml:lt/>integer builtin="atomId"<docml:gt/></font>1<font class="em"><docml:lt/>/integer<docml:gt/>
			<docml:lt/>float builtin="x3" units="A"<docml:gt/></font>1.0303<font class="em"><docml:lt/>/float<docml:gt/>
			<docml:lt/>float builtin="y3" units="A"<docml:gt/></font>0.8847<font class="em"><docml:lt/>/float<docml:gt/>
			<docml:lt/>float builtin="z3" units="A"<docml:gt/></font>0.9763<font class="em"><docml:lt/>/float<docml:gt/>
			<docml:lt/>string builtin="elementType"<docml:gt/></font>C<font class="em"><docml:lt/>/string<docml:gt/>
		<docml:lt/>/atom<docml:gt/>
		<font class="strong"><docml:lt/>!-- eight further atoms --<docml:gt/></font>
	<docml:lt/>/list<docml:gt/>
	<docml:lt/>list title="bonds"<docml:gt/>
		<docml:lt/>bond id="</font>ethanol_b_1<font class="em">"<docml:gt/>
			<docml:lt/>integer title="bondId"<docml:gt/></font>1<font class="em"><docml:lt/>/integer<docml:gt/>
			<docml:lt/>integer builtin="atomRef"<docml:gt/></font>1<font class="em"><docml:lt/>/integer<docml:gt/>
			<docml:lt/>integer builtin="atomRef"<docml:gt/></font>2<font class="em"><docml:lt/>/integer<docml:gt/>
			<docml:lt/>integer builtin="order" convention="MDL"<docml:gt/></font>1<font class="em"><docml:lt/>/integer<docml:gt/>
		<docml:lt/>/bond<docml:gt/>
		<font class="strong"><docml:lt/>!-- seven further bonds --<docml:gt/></font>
	<docml:lt/>/list<docml:gt/>
<docml:lt/>/molecule<docml:gt/></font>
<font class="strong">..</font>
</docml:code>

<!-- ****************************************************************** -->

<docml:code id="code_jmolcode" xml:space="preserve">
<font class="strong">..</font>
<font class="em"><docml:lt/>xsl:template match="molecule"<docml:gt/></font>
	<font class="strong"><docml:lt/>!-- build applet --<docml:gt/></font>
	<docml:lt/>applet code="org.openscience.miniJmol.JmolApplet.class" 
		name="JMolApplet" archive="JmolApplet.jar" 
		width="300" height="300"<docml:gt/>
	You have to enable Java and JavaScript on your machine !
	<docml:lt/>/applet<docml:gt/>
	<font class="em"><docml:lt/>xsl:for-each select="id(@idref)"<docml:gt/></font>
	<font class="strong"><docml:lt/>!-- build INPUT containing the xyz source --<docml:gt/></font>
	<font class="em"><docml:lt/>xsl:element name="input"<docml:gt/>
		<docml:lt/>xsl:attribute name="name"<docml:gt/></font>jmoloutput<font class="em"><docml:lt/>/xsl:attribute<docml:gt/>
		<docml:lt/>xsl:attribute name="type"<docml:gt/></font>hidden<font class="em"><docml:lt/>/xsl:attribute<docml:gt/>
		<docml:lt/>xsl:attribute name="value"<docml:gt/></font>
		<font class="strong"><docml:lt/>!-- start convertion to .xyz --<docml:gt/></font>
		<font class="strong"><docml:lt/>!-- select last atom and add its number --<docml:gt/></font> 
		<font class="em"><docml:lt/>xsl:for-each select="list/atom[end()]"xml:space="preserve"<docml:gt/>
		<docml:lt/>xsl:eval<docml:gt/>formatIndex(childNumber(this), "1")<docml:lt/>/xsl:eval<docml:gt/>
		<docml:lt/>/xsl:for-each<docml:gt/></font>%
		<font class="strong"><docml:lt/>!-- add title --<docml:gt/></font>
		<font class="em"><docml:lt/>xsl:value-of select="@title"/<docml:gt/></font> from CML%
		<font class="em"><docml:lt/>xsl:for-each select="list/atom" xml:space="preserve"<docml:gt/>
			<docml:lt/>xsl:for-each select="string[@builtin='elementType']"<docml:gt/>
				<docml:lt/>xsl:value-of select="."/<docml:gt/></font>
				<font class="strong"><docml:lt/>!-- single letter elements with require an additional space  --<docml:gt/></font>
				<font class="em"><docml:lt/>xsl:if test=".[. = 'H']"<docml:gt/> <docml:lt/>/xsl:if<docml:gt/>
				<docml:lt/>xsl:if test=".[. = 'B']"<docml:gt/> <docml:lt/>/xsl:if<docml:gt/>
				<docml:lt/>xsl:if test=".[. = 'C']"<docml:gt/> <docml:lt/>/xsl:if<docml:gt/>
				<docml:lt/>xsl:if test=".[. = 'N']"<docml:gt/> <docml:lt/>/xsl:if<docml:gt/>
				<docml:lt/>xsl:if test=".[. = 'O']"<docml:gt/> <docml:lt/>/xsl:if<docml:gt/></font>
				<font class="strong"><docml:lt/>!-- etc --<docml:gt/></font>
			<font class="em"><docml:lt/>/xsl:for-each<docml:gt/> </font>
		<font class="strong"><docml:lt/>!-- for each atom, extract coord adding white space as required --<docml:gt/></font>
		<font class="em"><docml:lt/>xsl:if test="float[@builtin='x3' and . $lt$ 10]"<docml:gt/> <docml:lt/>/xsl:if<docml:gt/>
		<docml:lt/>xsl:if test="float[@builtin='x3' and . <docml:gt/>= 0]"<docml:gt/> <docml:lt/>/xsl:if<docml:gt/>
		<docml:lt/>xsl:value-of select="float[@builtin='x3']"/<docml:gt/></font>
		<font class="strong"><docml:lt/>!-- repeat for y3 and z3 --<docml:gt/></font>
		%
		<font class="em"><docml:lt/>/xsl:for-each<docml:gt/>
		<font class="strong"><docml:lt/>!-- finish convertion to .xyz --<docml:gt/></font>
		<docml:lt/>/xsl:attribute<docml:gt/>
	<docml:lt/>/xsl:element<docml:gt/>
<docml:lt/>/xsl:template<docml:gt/></font>
<font class="strong">..</font>
</docml:code>

<!-- ****************************************************************** -->

<docml:code id="code_marvinstyle" xml:space="preserve">
<font class="strong">..</font>
<font class="em"><docml:lt/>xsl:template match="molecule"<docml:gt/>
	</font><docml:lt/>applet code="MView" archive="marvin.jar" width="300" height="300"<docml:gt/><font class="em">
		<docml:lt/>xsl:element name="param"<docml:gt/>
			<docml:lt/>xsl:attribute name="name"<docml:gt/></font>mol<font class="em"><docml:lt/>/xsl:attribute<docml:gt/>
			<docml:lt/>xsl:attribute name="value"<docml:gt/>
<font class="strong"><docml:lt/>!-- start conversion to .mol --<docml:gt/></font>
<docml:lt/>xsl:value-of select="@title"/<docml:gt/></font>\
  from CML\
\		<font class="em">
<font class="strong"><docml:lt/>!-- select last atom, calculate its number and required white space --<docml:gt/></font>
<docml:lt/>xsl:for-each select="list/atom[end()]/integer[@builtin='atomId']" xml:space="preserve"<docml:gt/>
	<docml:lt/>xsl:if test=".[text() $lt$ 100]"<docml:gt/> <docml:lt/>/xsl:if<docml:gt/>
	<docml:lt/>xsl:if test=".[text() $lt$ 10]"<docml:gt/> <docml:lt/>/xsl:if<docml:gt/>
	<docml:lt/>xsl:for-each select="../../atom[end()]"<docml:gt/>
		<docml:lt/>xsl:eval<docml:gt/>formatIndex(childNumber(this), "1")<docml:lt/>/xsl:eval<docml:gt/>
	<docml:lt/>/xsl:for-each<docml:gt/>
<docml:lt/>/xsl:for-each<docml:gt/>
<font class="strong"><docml:lt/>!-- select last bond, calculate its number and required white space --<docml:gt/></font>
<docml:lt/>xsl:for-each select="list/bond[end()]/integer[@title='bondId']" xml:space="preserve"<docml:gt/>
	<docml:lt/>xsl:if test=".[text() $lt$ 100]"<docml:gt/> <docml:lt/>/xsl:if<docml:gt/>
	<docml:lt/>xsl:if test=".[text() $lt$ 10]"<docml:gt/> <docml:lt/>/xsl:if<docml:gt/>
	<docml:lt/>xsl:for-each select="../../bond[end()]"<docml:gt/>
		<docml:lt/>xsl:eval<docml:gt/>formatIndex(childNumber(this), "1")<docml:lt/>/xsl:eval<docml:gt/>
	<docml:lt/>/xsl:for-each<docml:gt/>
<docml:lt/>/xsl:for-each<docml:gt/></font>\<font class="em">
<font class="strong"><docml:lt/>!-- for each atoms, extract coord and type, with required white space --<docml:gt/></font>
<docml:lt/>xsl:for-each select="list/atom" xml:space="preserve"<docml:gt/>
 	<docml:lt/>xsl:if test="float[@builtin='x3' and . $lt$ 10]"<docml:gt/> <docml:lt/>/xsl:if<docml:gt/>
	<docml:lt/>xsl:if test="float[@builtin='x3' and . <docml:gt/>= 0]"<docml:gt/> <docml:lt/>/xsl:if<docml:gt/>
	<docml:lt/>xsl:value-of select="float[@builtin='x3']"/<docml:gt/>  
	<font class="strong"><docml:lt/>!-- repeat for y3 and z3 --<docml:gt/></font> 
	<docml:lt/>xsl:for-each select="string[@builtin='elementType']"<docml:gt/>
		<docml:lt/>xsl:value-of select="."/<docml:gt/>
		<font class="strong"><docml:lt/>!-- elements with single letter names require an additional space --<docml:gt/></font>
		<docml:lt/>xsl:if test=".[. = 'H']"<docml:gt/> <docml:lt/>/xsl:if<docml:gt/>
		<docml:lt/>xsl:if test=".[. = 'B']"<docml:gt/> <docml:lt/>/xsl:if<docml:gt/>
		<docml:lt/>xsl:if test=".[. = 'C']"<docml:gt/> <docml:lt/>/xsl:if<docml:gt/>
		<docml:lt/>xsl:if test=".[. = 'N']"<docml:gt/> <docml:lt/>/xsl:if<docml:gt/>
		<docml:lt/>xsl:if test=".[. = 'O']"<docml:gt/> <docml:lt/>/xsl:if<docml:gt/>
		<font class="strong"><docml:lt/>!-- etc. --<docml:gt/></font></font>  0  0  0  0  0  0  0  0  0  0  0  0\<font class="em">
	<docml:lt/>/xsl:for-each<docml:gt/>
<docml:lt/>/xsl:for-each<docml:gt/>
<font class="strong"><docml:lt/>!-- for each bond, extract atomRefs and order, with required white space --<docml:gt/></font>
<docml:lt/>xsl:for-each select="list/bond" xml:space="preserve"<docml:gt/>
	<docml:lt/>xsl:for-each select="integer[@title='atomRef']"<docml:gt/>
		<docml:lt/>xsl:if test=".[. $lt$ 100]"<docml:gt/> <docml:lt/>/xsl:if<docml:gt/>
		<docml:lt/>xsl:if test=".[. $lt$ 10]"<docml:gt/> <docml:lt/>/xsl:if<docml:gt/>
		<docml:lt/>xsl:value-of select="."/<docml:gt/>
	<docml:lt/>/xsl:for-each<docml:gt/>
	<docml:lt/>xsl:value-of select="integer[@builtin='order']"/<docml:gt/> </font> 0  0  0  0\<font class="em">
<docml:lt/>/xsl:for-each<docml:gt/>
</font>M  END<font class="em">
<font class="strong"><docml:lt/>!-- finished convertion to mol --<docml:gt/></font>
			<docml:lt/>/xsl:attribute<docml:gt/>
		<docml:lt/>/xsl:element<docml:gt/>
	You must have Java turned on!
	<docml:lt/>/xsl:element<docml:gt/>
<docml:lt/>/xsl:template<docml:gt/></font>
<font class="strong">..</font>
</docml:code>


<!-- ****************************************************************** -->

<docml:code id="code_spectrumCML" xml:space="preserve">
<font class="strong">..</font>
<font class="em"><docml:lt/>chimeral:spectrum title="</font>Furan, tetrahydro-<font class="em">" id="spect_furantetrah_ir_1"
	convention="JCAMP-DX= 4.24"<docml:gt/>
	<docml:lt/>string title="datatype"<docml:gt/></font>MASS SPECTRUM<font class="em"><docml:lt/>/string<docml:gt/>
	<docml:lt/>string title="EPA"<docml:gt/></font>61352<font class="em"><docml:lt/>/string<docml:gt/>
	<docml:lt/>string title="origin"<docml:gt/></font>D.HENNEBERG, MAX-PLANCK INSTITUTE, MULHEIM, WEST GERMANY<font class="em"><docml:lt/>/string<docml:gt/>
	<docml:lt/>string title="owner"<docml:gt/></font>NIST Mass Spectrometry Data Center<font class="em"><docml:lt/>/string<docml:gt/>
	<docml:lt/>string title="xunits"<docml:gt/></font>M/Z<font class="em"><docml:lt/>/string<docml:gt/>
	<docml:lt/>string title="yunits"<docml:gt/></font>RELATIVE ABUNDANCE<font class="em"><docml:lt/>/string<docml:gt/>
	<docml:lt/>float title="firstx" convention="M/Z"<docml:gt/></font>24<font class="em"><docml:lt/>/float<docml:gt/>
	<docml:lt/>float title="lastx" convention="M/Z"<docml:gt/></font>73<font class="em"><docml:lt/>/float<docml:gt/>
	<docml:lt/>float title="xfactor"<docml:gt/></font>1<font class="em"><docml:lt/>/float<docml:gt/>
	<docml:lt/>float title="firsty" convention="RELATIVE ABUNDANCE"<docml:gt/></font>4<font class="em"><docml:lt/>/float<docml:gt/>
	<docml:lt/>float title="miny" convention="RELATIVE ABUNDANCE"<docml:gt/></font>3<font class="em"><docml:lt/>/float<docml:gt/>
	<docml:lt/>float title="maxy" convention="RELATIVE ABUNDANCE"<docml:gt/></font>9999<font class="em"><docml:lt/>/float<docml:gt/>
	<docml:lt/>float title="yfactor"<docml:gt/></font>1<font class="em"><docml:lt/>/float<docml:gt/>
	<docml:lt/>float title="npoints"<docml:gt/></font>32<font class="em"><docml:lt/>/float<docml:gt/>
	<docml:lt/>list title="peak table" convention="(XY..XY)"<docml:gt/>
		<docml:lt/>coordinate2 id="furantetrah_ir_c_1"<docml:gt/></font>24, 4<font class="em"><docml:lt/>/coordinate2<docml:gt/>
		<docml:lt/>coordinate2 id="furantetrah_ir_c_2"<docml:gt/></font>25, 30<font class="em"><docml:lt/>/coordinate2<docml:gt/>
		<docml:lt/>coordinate2 id="furantetrah_ir_c_3"<docml:gt/></font>26, 171<font class="em"><docml:lt/>/coordinate2<docml:gt/>
		<docml:lt/>coordinate2 id="furantetrah_ir_c_4"<docml:gt/></font>27, 1545<font class="em"><docml:lt/>/coordinate2<docml:gt/></font>
		<font class="strong"><docml:lt/>!-- 28 more coordinate2s --<docml:gt/></font>
	<font class="em"><docml:lt/>/list<docml:gt/>
<docml:lt/>/chimeral:spectrum<docml:gt/></font>
<font class="strong">..</font>
</docml:code>

<!-- ****************************************************************** -->

<docml:code id="code_jspeccml" xml:space="preserve">
<font class="strong">..</font>
<font class="strong"><docml:lt/>!-- you must include the namespace in the template match --<docml:gt/></font>
<font class="em"><docml:lt/>xsl:template match="chimeral:spectrum"<docml:gt/></font>
<font class="strong"><docml:lt/>!-- build applet --<docml:gt/></font>
	<docml:lt/>applet code="Visua.class" width="400" height="250"<docml:gt/>
	<font class="em"><docml:lt/>xsl:element name="param"<docml:gt/>
		<docml:lt/>xsl:attribute name="name"<docml:gt/>SOURCE<docml:lt/>/xsl:attribute<docml:gt/>
		<docml:lt/>xsl:attribute name="value" xml:space="preserve"<docml:gt/></font>
<font class="strong"><docml:lt/>!-- start conversion to JCAMP --<docml:gt/></font>
<font class="strong"><docml:lt/>!-- * means 'any' within a pattern match --<docml:gt/></font>
##TITLE= <font class="em"><docml:lt/>xsl:value-of select="@title"/<docml:gt/></font>
##<font class="em"><docml:lt/>xsl:value-of select="@convention"/<docml:gt/></font>
##DATA type= <font class="em"><docml:lt/>xsl:value-of select="*[@title='datatype']"/<docml:gt/></font>
##XUNITS= <font class="em"><docml:lt/>xsl:value-of select="*[@title='xunits']"/<docml:gt/></font>
##YUNITS= <font class="em"><docml:lt/>xsl:value-of select="*[@title='yunits']"/<docml:gt/></font>
##FIRSTX= <font class="em"><docml:lt/>xsl:value-of select="*[@title='firstx']"/<docml:gt/></font>
##LASTX= <font class="em"><docml:lt/>xsl:value-of select="*[@title='lastx']"/<docml:gt/></font>
##FIRSTY= <font class="em"><docml:lt/>xsl:value-of select="*[@title='firsty']"/<docml:gt/></font>
##MINY= <font class="em"><docml:lt/>xsl:value-of select="*[@title='miny']"/<docml:gt/></font>
##MAXY= <font class="em"><docml:lt/>xsl:value-of select="*[@title='miny']"/<docml:gt/></font>
##NPOINTS= <font class="em"><docml:lt/>xsl:value-of select="*[@title='npoints']"/<docml:gt/></font>
<font class="em"><docml:lt/>xsl:for-each select="*[@title='peak table' and @convention='(XY..XY)']"<docml:gt/></font>
##PEAK TABLE= (XY..XY)
<font class="em"><docml:lt/>xsl:for-each select="coordinate2"<docml:gt/>
<docml:lt/>xsl:value-of/<docml:gt/>,
<docml:lt/>/xsl:for-each<docml:gt/>
<docml:lt/>/xsl:for-each<docml:gt/></font>
<font class="strong"><docml:lt/>!-- repeat for 'xypairs (XY..XY)' and 'peak table (XYM)' --<docml:gt/></font>
##END=
<font class="strong"><docml:lt/>!-- end conversion' --<docml:gt/></font>
		<font class="em"><docml:lt/>/xsl:attribute<docml:gt/>
	<docml:lt/>/xsl:element<docml:gt/></font>
	<font class="strong"><docml:lt/>!-- Reverses IR spectra --<docml:gt/></font>
	<font class="em"><docml:lt/>xsl:if test="*[@title='datatype' and .='INFRARED SPECTRUM']"<docml:gt/></font>
		<docml:lt/>param name="WAY" value="REVERSE"/<docml:gt/>
	<font class="em"><docml:lt/>/xsl:if<docml:gt/></font>
<docml:lt/>/applet<docml:gt/>
<font class="em"><docml:lt/>/xsl:template<docml:gt/></font>
<font class="strong">..</font>
</docml:code>


<!-- ****************************************************************** -->

<docml:code id="code_stepwise" xml:space="preserve">
<font class="strong">..</font>
<font class="em"><docml:lt/>cml title="</font>Simple Reaction<font class="em">" id="cml_simple"<docml:gt/></font>
	<font class="strong">..</font>
	<font class="em"><docml:lt/>reaction title="</font>Diels-Alder cycloaddition<font class="em">" id="simple_rxn_1" convention="stepwise"<docml:gt/></font>
		<font class="strong"><docml:lt/>!-- overall information --<docml:gt/></font>
		<font class="em"><docml:lt/>string title="description"<docml:gt/></font>Simple example of a A + B -<docml:gt/> C reaction.<font class="em"><docml:lt/>/string<docml:gt/>
		<docml:lt/>float title="yield" units="%"<docml:gt/></font>88<font class="em"><docml:lt/>/float<docml:gt/>
		<docml:lt/>string title="notes"<docml:gt/></font>taken from Vollhardt and Schore<font class="em"><docml:lt/>/string<docml:gt/>
		<docml:lt/>list title="reactionStep" id="simple_s_1"<docml:gt/></font>
			<font class="strong"><docml:lt/>!-- reaction step information --<docml:gt/></font>
			<font class="em"><docml:lt/>string title="description"<docml:gt/></font>cycloaddition<font class="em"><docml:lt/>/string<docml:gt/>
			<docml:lt/>string title="notes"<docml:gt/></font>one step<font class="em"><docml:lt/>/string<docml:gt/></font>
			<font class="strong"><docml:lt/>!-- series of links to each reaction species --<docml:gt/></font>
			<font class="em"><docml:lt/>link title="reactant" </font><font class="comment">href="simple_mol_reactant1"</font><font class="em">/<docml:gt/></font>
			<font class="em"><docml:lt/>link title="reactant" </font><font class="comment">href="simple_mol_reactant2"</font><font class="em">/<docml:gt/></font>
			<font class="strong"><docml:lt/>!-- reagent could contain: a reagent name,
				 link to a structure or as here, a list of 
				 conditions. multiple reagents can be included 
				 if needed --<docml:gt/></font>
			<font class="em"><docml:lt/>link title="reagent"<docml:gt/>
				<docml:lt/>integer title="index"<docml:gt/></font>1<font class="em"><docml:lt/>/integer<docml:gt/>
				<docml:lt/>string title="solvent"<docml:gt/></font>Acetonitrile<font class="em"><docml:lt/>/string<docml:gt/>
				<docml:lt/>string title="temperature" convention="degC"<docml:gt/></font>100<font class="em"><docml:lt/>/string<docml:gt/>
				<docml:lt/>string title="duration" convention="hours"<docml:gt/></font>3<font class="em"><docml:lt/>/string<docml:gt/>
				<docml:lt/>string title="notes"<docml:gt/></font>reflux<font class="em"><docml:lt/>/string<docml:gt/>	
			<docml:lt/>/link<docml:gt/>
			<docml:lt/>link title="reagent"<docml:gt/>
				<docml:lt/>integer title="index"<docml:gt/></font>2<font class="em"><docml:lt/>/integer<docml:gt/>
				<docml:lt/>string title="notes"<docml:gt/></font>workup<font class="em"><docml:lt/>/string<docml:gt/>	
			<docml:lt/>/link<docml:gt/></font>
			<font class="em"><docml:lt/>link title="product" </font><font class="comment">href="simple_mol_product"</font><font class="em">/<docml:gt/></font>
			<font class="strong"><docml:lt/>!-- could also include catalyst, intermediate, 
				transition state etc. --<docml:gt/>	</font>
		<font class="em"><docml:lt/>/list<docml:gt/>
	<docml:lt/>/reaction<docml:gt/></font>
	<font class="strong">..</font>
	<font class="strong"><docml:lt/>!-- the actual molecules can be anywhere, even in a different cml block --<docml:gt/></font>
	<font class="em"><docml:lt/>molecule title="</font>2,3-Dimethyl-1,3-butadiene<font class="em">" <font class="comment">id="simple_mol_reactant1"</font><docml:gt/></font>
	<font class="strong"><docml:lt/>!-- etc. --<docml:gt/></font>
	<font class="em"><docml:lt/>/molecule<docml:gt/></font>
	<font class="strong">..</font>
	<font class="em"><docml:lt/>molecule title="</font>Propenal<font class="em">" <font class="comment">id="simple_mol_reactant2"</font><docml:gt/></font>
	<font class="strong"><docml:lt/>!-- etc. --<docml:gt/></font>
	<font class="em"><docml:lt/>/molecule<docml:gt/></font>
	<font class="strong">..</font>
	<font class="em"><docml:lt/>molecule title="</font>Diels-Alder adduct<font class="em">" <font class="comment">id="simple_mol_product"</font><docml:gt/></font>
	<font class="strong"><docml:lt/>!-- etc. --<docml:gt/></font>
	<font class="em"><docml:lt/>/molecule<docml:gt/></font>
	<font class="strong">..</font>
<font class="em"><docml:lt/>/cml<docml:gt/></font>
<font class="strong">..</font>
</docml:code>


<!-- ****************************************************************** -->

<docml:code id="code_stepwisexsl" xml:space="preserve">
<font class="strong">..</font>
<font class="strong"><docml:lt/>!-- use this template for a stepwise reaction --<docml:gt/></font>
<font class="em"><docml:lt/>xsl:template match="reaction[@convention='stepwise']"<docml:gt/></font>
<font class="strong">	<docml:lt/>!-- build HTML table --<docml:gt/></font>
	<docml:lt/>table<docml:gt/><docml:lt/>tr<docml:gt/>
	    <docml:lt/>td colspan="2"<docml:gt/><docml:lt/>B<docml:gt/>Stepwise Reaction:<docml:lt/>/B<docml:gt/> <font class="em"><docml:lt/>xsl:value-of select="@title"/<docml:gt/></font><docml:lt/>/td<docml:gt/>
    	<docml:lt/>td<docml:gt/><docml:lt/>B<docml:gt/>id:<docml:lt/>/B<docml:gt/> <font class="em"><docml:lt/>xsl:value-of select="@id"/<docml:gt/></font><docml:lt/>/td<docml:gt/>
	<docml:lt/>/tr<docml:gt/>
	<font class="strong"><docml:lt/>!-- etc. for 'description', 'yield' and 'notes' --<docml:gt/>
	<docml:lt/>!-- build a reaction scheme for each step --<docml:gt/></font>
	<font class="em"><docml:lt/>xsl:for-each select="list[@title='reactionStep']"<docml:gt/></font>
	<docml:lt/>tr<docml:gt/><docml:lt/>td colspan="3"<docml:gt/>
		<docml:lt/>table<docml:gt/><docml:lt/>tr<docml:gt/>
   		<docml:lt/>td<docml:gt/>
		<font class="strong"><docml:lt/>!-- select each link to a reactant, then find and select the elements 
		with matching @id (this is what id(@href) does) --<docml:gt/></font>
		<font class="em"><docml:lt/>xsl:for-each select="link[@title='reactant']"<docml:gt/> 
			<docml:lt/>xsl:for-each select="id(@href)"<docml:gt/></font>
				<font class="strong"><docml:lt/>!-- call a template that builds Marvin applet --<docml:gt/></font>
				<font class="em"><docml:lt/>xsl:apply-templates select="list[./atom/float/@builtin='x3']"/<docml:gt/>
			<docml:lt/>/xsl:for-each<docml:gt/>
		<docml:lt/>/xsl:for-each<docml:gt/></font>
		<docml:lt/>/td<docml:gt/><docml:lt/>td<docml:gt/>
		<font class="strong"><docml:lt/>!-- the arrow is a normal gifs --<docml:gt/></font>
		<docml:lt/>img src="writeupdata/arrow.gif" /<docml:gt/><docml:lt/>br/<docml:gt/>
		<font class="strong"><docml:lt/>!-- select each reagent in turn --<docml:gt/></font>
		<font class="em"><docml:lt/>xsl:for-each select="link[@title='reagent']"<docml:gt/> 
			<docml:lt/>xsl:if test="*[@title='index']"<docml:gt/></font>
				<font class="strong"><docml:lt/>!-- if an index number is given, include it --<docml:gt/></font>
				<font class="em"><docml:lt/>xsl:value-of select="integer[@title='index']"/<docml:gt/>)
			<font class="em"><docml:lt/>/xsl:if<docml:gt/> 
			<docml:lt/>xsl:for-each select="id(@href)"<docml:gt/></font></font>
				<font class="strong"><docml:lt/>!-- if a structure is given, include it --<docml:gt/></font>
				<font class="em"><docml:lt/>xsl:apply-templates select="list[./atom/float/@builtin='x3']"/<docml:gt/>, 
			<docml:lt/>/xsl:for-each<docml:gt/>
			<docml:lt/>xsl:for-each select="string[@title='solvent']"<docml:gt/></font> 
				<font class="strong"><docml:lt/>!-- if a solvent is given, include it --<docml:gt/></font>
				<font class="em"><docml:lt/>xsl:value-of select="text()"/<docml:gt/>, 
			<docml:lt/>/xsl:for-each<docml:gt/></font>
			<font class="strong"><docml:lt/>!-- etc. for temperature, duration and notes --<docml:gt/></font>
		<font class="em"><docml:lt/>/xsl:for-each<docml:gt/></font>
		<docml:lt/>/td<docml:gt/><docml:lt/>td<docml:gt/>
		<font class="strong"><docml:lt/>!-- select each link to a product --<docml:gt/></font>
		<font class="em"><docml:lt/>xsl:for-each select="link[@title='product']"<docml:gt/> 
			<docml:lt/>xsl:for-each select="id(@href)"<docml:gt/></font>
				<font class="strong"><docml:lt/>!-- call a template that builds the Marvin applet --<docml:gt/></font>
				<font class="em"><docml:lt/>xsl:apply-templates select="list[./atom/float/@builtin='x3']"/<docml:gt/>
			<docml:lt/>/xsl:for-each<docml:gt/>
		<docml:lt/>/xsl:for-each<docml:gt/></font>
		<docml:lt/>/td<docml:gt/>
		<docml:lt/>/tr<docml:gt/><docml:lt/>/table<docml:gt/>
	<docml:lt/>/td<docml:gt/><docml:lt/>/tr<docml:gt/>
	<font class="em"><docml:lt/>/xsl:for-each<docml:gt/></font>
	<docml:lt/>/table<docml:gt/>
<font class="em"><docml:lt/>/xsl:template<docml:gt/></font>
<font class="strong">..</font>
</docml:code>


<!-- ****************************************************************** -->

<docml:code id="code_docuMLout" xml:space="preserve">
<font class="em"><docml:lt/>?xml version="1.0"?<docml:gt/>
<docml:lt/>?xml-stylesheet type="text/xsl" href="document.xsl" ?<docml:gt/></font>
<font class="em"><docml:lt/>mrw:document title="</font>Skeleton<font class="em">" id="xmldoc_skele"
	xmlns="http://www.w3.org/1999/xhtml"
	xmlns:mrw="x-schema:http://www.xml-cml.org/chimeral/mrw_schema_01.xml"
	xmlns:chimeral="x-schema:http://www.xml-cml.org/chimeral/spectrum_schema_ie_01.xml"<docml:gt/></font>

<font class="strong"><docml:lt/>!-- *********************** metadata *********************** --<docml:gt/></font>
<font class="em"><docml:lt/>mrw:metadata<docml:gt/>
	<docml:lt/>mrw:date builtin="date:creation"<docml:gt/></font>June 12, 2000<font class="em"><docml:lt/>/mrw:date<docml:gt/>
	<docml:lt/>mrw:author idref="insti_ic" id="author_mw" email="</font>karne@innocent.com<font class="em">"
	 href="</font>http://www.ch.ic.ac.uk/chimeral<font class="em">"<docml:gt/></font>Michael Wright<font class="em"><docml:lt/>/mrw:author<docml:gt/>
	<docml:lt/>mrw:institution id="insti_ic" href="</font>http://www.ch.ic.ac.uk<font class="em">"<docml:gt/></font>
	Department of Chemistry, Imperial College of Science, Technology and Medicine, UK
	<font class="em"><docml:lt/>/mrw:institution<docml:gt/>
<docml:lt/>/mrw:metadata<docml:gt/></font>

<font class="strong"><docml:lt/>!-- *********************** abstract *********************** --<docml:gt/></font>
<font class="em"><docml:lt/>mrw:abstract<docml:gt/></font>Demonstrates the key elements of an XML document.<font class="em"><docml:lt/>/mrw:abstract<docml:gt/></font>

<font class="strong"><docml:lt/>!-- *********************** keywords *********************** --<docml:gt/></font>
<font class="em"><docml:lt/>mrw:keywords<docml:gt/></font>ChiMeraL, XML, CML, chemical markup language, chemistry<font class="em"><docml:lt/>/mrw:keywords<docml:gt/></font>

<font class="strong"><docml:lt/>!-- *********************** chapter *********************** --<docml:gt/></font>
<font class="em"><docml:lt/>mrw:chapter id="chap_introduction" title="</font>Introduction<font class="em">"<docml:gt/>
	<docml:lt/>mrw:index/<docml:gt/></font>
	<font class="em"><docml:lt/>p<docml:gt/></font>A document is made up of nested chapters and subsection.<font class="em"><docml:lt/>/p<docml:gt/></font>

<font class="strong"><docml:lt/>!-- *********************** subsection *********************** --<docml:gt/></font>
<font class="em"><docml:lt/>mrw:subsection id="sub_xhtml" title="</font>XHTML<font class="em">"<docml:gt/>
	<docml:lt/>mrw:index/<docml:gt/>
	<docml:lt/>p<docml:gt/></font>Elements with no prefix are assumed to be XHTML by the stylesheet and 
passed directly to the output. This allows the author to use familiar <font class="em"><docml:lt/>i<docml:gt/></font>'HTML 
like'<font class="em"><docml:lt/>/i<docml:gt/></font> formatting without disrupting other XML blocks. Example code needs to 
be escaped; 
<font class="em"><docml:lt/>div class="code"<docml:gt/><docml:lt/>docml:lt/<docml:gt/></font>formula<font class="em"><docml:lt/>docml:gt/<docml:gt/></font>C4 H8 O<font class="em"><docml:lt/>docml:lt/<docml:gt/></font>/formula<font class="em"><docml:lt/>docml:gt/<docml:gt/><docml:lt/>/div<docml:gt/>
<docml:lt/>/p<docml:gt/>
<docml:lt/>/mrw:subsection<docml:gt/>
<docml:lt/>/mrw:chapter<docml:gt/>
</font>
<font class="strong"><docml:lt/>!-- *********************** bibliography *********************** --<docml:gt/></font>
<font class="em"><docml:lt/>mrw:bibliography title="</font>References<font class="em">"<docml:gt/>
	<docml:lt/>mrw:ref id="ref_CML1.0"<docml:gt/></font>For a formal description of CML version 1.0, see
	<font class="em"><docml:lt/>mrw:index<docml:gt/></font>1<font class="em"><docml:lt/>/mrw:index<docml:gt/>
		<docml:lt/>mrw:author href="</font>http://www.xml-cml.org/<font class="em">"<docml:gt/></font>
			P. Murray-Rust and H. S. Rzepa<font class="em"><docml:lt/>/mrw:author<docml:gt/>
		<docml:lt/>mrw:publication<docml:gt/></font>J. Chem. Inf. Comp. Sci.<font class="em"><docml:lt/>/mrw:publication<docml:gt/>
		<docml:lt/>mrw:date<docml:gt/></font>1999<font class="em"><docml:lt/>/mrw:date<docml:gt/>
		<docml:lt/>mrw:volume<docml:gt/></font>39<font class="em"><docml:lt/>/mrw:volume<docml:gt/>
		<docml:lt/>mrw:pages<docml:gt/></font>928<font class="em"><docml:lt/>/mrw:pages<docml:gt/>
	<docml:lt/>/mrw:ref<docml:gt/>
<docml:lt/>/mrw:bibliography<docml:gt/>

<docml:lt/>/mrw:document<docml:gt/></font>
</docml:code>


<!-- ****************************************************************** -->

<docml:code id="code_docuMLlink" xml:space="preserve">
<font class="strong">..</font>
<font class="strong"><docml:lt/>!-- *********************** subsection *********************** --<docml:gt/></font>
<font class="em"><docml:lt/>mrw:subsection id="sub_idlinks" title="</font>Linking<font class="em">"<docml:gt/>
<docml:lt/>mrw:index/<docml:gt/>
	<docml:lt/>p<docml:gt/></font>Links between @id and @idref are used to automatically build references 
to the bibliography<font class="comment"><docml:lt/>mrw:link builtin="ref" idref="ref_CML1.0"/<docml:gt/></font> or 
<font class="comment"><docml:lt/>mrw:link builtin="figure" idref="fig_Jmol"/<docml:gt/></font>. The reference will include the 
correct index number, hyperlinks and mouse-over effects, even if the target is 
moved or completely rewritten. This helps avoid the notorious HTML problem - 
"broken links". Links are also used to build the document's index.<font class="em"><docml:lt/>/p<docml:gt/></font>

<font class="strong"><docml:lt/>!-- figure title --<docml:gt/></font>
<font class="em"><docml:lt/>mrw:figure id="fig_Jmol" builtin="showLabel"<docml:gt/></font>Tetrahydrofuran using Jmol<font class="em"><docml:lt/>/mrw:figure<docml:gt/></font>

<font class="strong"><docml:lt/>!-- this tells the stylesheet to render the CML object with @id="mol_thf_1" 
using Jmol, changing @display changes the applet used --<docml:gt/></font>
<font class="comment"><docml:lt/>mrw:link builtin="molecule" display="jmol" idref="mol_thf_1"/<docml:gt/></font>
<font class="em"><docml:lt/>/mrw:subsection<docml:gt/></font>
<font class="strong">..</font>
<font class="strong"><docml:lt/>!-- *********************** CML data block *********************** --<docml:gt/></font>
<font class="em"><docml:lt/>cml title="</font>cml data block<font class="em">" id="cml_moldata" xmlns="x-schema:cml_schema_ie_02.xml"<docml:gt/>
	<docml:lt/>molecule title="</font>Furan, tetrahydro-<font class="em">" id="mol_thf_1"<docml:gt/></font>
		<font class="strong">..</font>
	<font class="em"><docml:lt/>/molecule<docml:gt/>
	<docml:lt/>chimeral:spectrum title="</font>Caffeine<font class="em">" id="spect_caffeine_ms_1" convention="JCAMP-DX= 4.24"<docml:gt/></font>
		<font class="strong">..</font>
	<font class="em"><docml:lt/>/chimeral:spectrum<docml:gt/>
<docml:lt/>/cml<docml:gt/></font>
<font class="strong">..</font>
</docml:code>	
	
<!-- ********************************************************** -->
<!-- ********************* CML Block ************************** -->
<!-- ********************************************************** -->
<cml title="Example CML code - used for real" id="cml_article" docml:display="hide" xmlns="x-schema:http://www.xml-cml.org/cml_schema_ie_02.xml">
	<molecule title="tetrahydrofuran" id="mol_tetrahydrofuran_karne">
		<formula>C4 H8 O</formula>
		<string title="CAS">109-99-9</string>
		<float title="molecular weight">72.1066</float>
      	<string title="ACX">I1001473</string>
     	<string title="DOT">UN 2056</string>
     	<string title="RTECS">LU5950000</string>
		<float title="melting point" units="degC">-108.3</float>
		<float title="boiling point" units="degC">65</float>
   	   	<float title="specific gravity">0.886</float>
      	<float title="water solubility" convention="g/100 mL at 23 degC">30</float>
      	<string title="comments">
		Colorless liquid with an ether-like odor detectable at 2 to 50 ppm.
		HYGROSCOPIC</string>
		<list title="alternate names">
			<string title="name">THF</string>
			<string title="name">1,4-Epoxybutane</string>
			<string title="name">Butylene oxide</string>
			<string title="name">Cyclotetramethylene</string>
			<string title="name">tetramethylene oxide</string>
		</list>
		<atomArray>
			<atom id="tetrahydrofuran_karne_a_1">
				<float builtin="x2" units="A">0.0300</float>
				<float builtin="y2" units="A">-1.1700</float>
				<string builtin="elementType">O</string>
			</atom>
			<atom id="tetrahydrofuran_karne_a_2">
				<float builtin="x2" units="A">-1.2200</float>
				<float builtin="y2" units="A">-0.2900</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="tetrahydrofuran_karne_a_3">
				<float builtin="x2" units="A">1.2400</float>
				<float builtin="y2" units="A">-0.2800</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="tetrahydrofuran_karne_a_4">
				<float builtin="x2" units="A">-0.7700</float>
				<float builtin="y2" units="A">1.1600</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="tetrahydrofuran_karne_a_5">
				<float builtin="x2" units="A">0.7700</float>
				<float builtin="y2" units="A">1.1600</float>
				<string builtin="elementType">C</string>
			</atom>
		</atomArray>
		<bondArray>
			<bond id="tetrahydrofuran_karne_b_1">
				<string builtin="atomRef">tetrahydrofuran_karne_a_2</string>
				<string builtin="atomRef">tetrahydrofuran_karne_a_1</string>
				<string builtin="order" convention="MDL">1</string>
			</bond>
			<bond id="tetrahydrofuran_karne_b_2">
				<string builtin="atomRef">tetrahydrofuran_karne_a_3</string>
				<string builtin="atomRef">tetrahydrofuran_karne_a_1</string>
				<string builtin="order" convention="MDL">1</string>
			</bond>
			<bond id="tetrahydrofuran_karne_b_3">
				<string builtin="atomRef">tetrahydrofuran_karne_a_4</string>
				<string builtin="atomRef">tetrahydrofuran_karne_a_2</string>
				<string builtin="order" convention="MDL">1</string>
			</bond>
			<bond id="tetrahydrofuran_karne_b_4">
				<string builtin="atomRef">tetrahydrofuran_karne_a_5</string>
				<string builtin="atomRef">tetrahydrofuran_karne_a_3</string>
				<string builtin="order" convention="MDL">1</string>
			</bond>
			<bond id="tetrahydrofuran_karne_b_5">
				<string builtin="atomRef">tetrahydrofuran_karne_a_4</string>
				<string builtin="atomRef">tetrahydrofuran_karne_a_5</string>
				<string builtin="order" convention="MDL">1</string>
			</bond>
		</bondArray>
	</molecule>
<chimeral:spectrum title="Furan, tetrahydro-" id="spect_furantetrah_ms_1" convention="JCAMP-DX= 4.24">
		<string title="datatype">MASS SPECTRUM</string>
		<string title="EPA">61352</string>
		<string title="origin">D.HENNEBERG, MAX-PLANCK INSTITUTE, MULHEIM, WEST GERMANY</string>
		<string title="owner">NIST Mass Spectrometry Data Center</string>
		<float title="xunits">M/Z</float>
		<float title="yunits">RELATIVE ABUNDANCE</float>
		<float title="firstx" convention="M/Z">24</float>
		<float title="lastx" convention="M/Z">73</float>
		<float title="deltax" convention="M/Z"></float>
		<float title="xfactor">1</float>
		<float title="firsty" convention="RELATIVE ABUNDANCE">4</float>
		<float title="miny" convention="RELATIVE ABUNDANCE">3</float>
		<float title="maxy" convention="RELATIVE ABUNDANCE">9999</float>
		<float title="yfactor">1</float>
		<float title="npoints">32</float>
		<list title="peak table" convention="(XY..XY)">
			<coordinate2 id="furantetrah_ir_c_1">24, 4</coordinate2>
			<coordinate2 id="furantetrah_ir_c_2">25, 30</coordinate2>
			<coordinate2 id="furantetrah_ir_c_3">26, 171</coordinate2>
			<coordinate2 id="furantetrah_ir_c_4">27, 1545</coordinate2>
			<coordinate2 id="furantetrah_ir_c_5">29, 792</coordinate2>
			<coordinate2 id="furantetrah_ir_c_6">30, 21</coordinate2>
			<coordinate2 id="furantetrah_ir_c_7">31, 258</coordinate2>
			<coordinate2 id="furantetrah_ir_c_8">33, 5</coordinate2>
			<coordinate2 id="furantetrah_ir_c_9">34, 26</coordinate2>
			<coordinate2 id="furantetrah_ir_c_10">35, 10</coordinate2>
			<coordinate2 id="furantetrah_ir_c_11">37, 105</coordinate2>
			<coordinate2 id="furantetrah_ir_c_12">38, 165</coordinate2>
			<coordinate2 id="furantetrah_ir_c_13">39, 1182</coordinate2>
			<coordinate2 id="furantetrah_ir_c_14">40, 906</coordinate2>
			<coordinate2 id="furantetrah_ir_c_15">41, 4060</coordinate2>
			<coordinate2 id="furantetrah_ir_c_16">42, 9999</coordinate2>
			<coordinate2 id="furantetrah_ir_c_17">43, 1586</coordinate2>
			<coordinate2 id="furantetrah_ir_c_18">44, 325</coordinate2>
			<coordinate2 id="furantetrah_ir_c_19">45, 100</coordinate2>
			<coordinate2 id="furantetrah_ir_c_20">46, 3</coordinate2>
			<coordinate2 id="furantetrah_ir_c_21">49, 7</coordinate2>
			<coordinate2 id="furantetrah_ir_c_22">50, 11</coordinate2>
			<coordinate2 id="furantetrah_ir_c_23">51, 19</coordinate2>
			<coordinate2 id="furantetrah_ir_c_24">53, 27</coordinate2>
			<coordinate2 id="furantetrah_ir_c_25">54, 10</coordinate2>
			<coordinate2 id="furantetrah_ir_c_26">55, 6</coordinate2>
			<coordinate2 id="furantetrah_ir_c_27">68, 7</coordinate2>
			<coordinate2 id="furantetrah_ir_c_28">69, 20</coordinate2>
			<coordinate2 id="furantetrah_ir_c_29">70, 107</coordinate2>
			<coordinate2 id="furantetrah_ir_c_30">71, 2557</coordinate2>
			<coordinate2 id="furantetrah_ir_c_31">72, 2868</coordinate2>
			<coordinate2 id="furantetrah_ir_c_32">73, 147</coordinate2>
		</list>
	</chimeral:spectrum>
		<reaction title="Epoxidation of Styrene" id="epoxidation_rxn_1" convention="stepwise">
		<string title="description">Example of a simple A + B -> C + D reaction.</string>
		<float title="yield" units="%">75</float>
		<string title="notes">taken from Warren</string>
		<list title="reactionStep" id="epoxidation_s_1">
			<link title="reactant" href="mol_styrene" id="simple_lk_1"/>
			<link title="reactant" href="mol_MCPBA" id="simple_lk_2"/>
			<link title="reagent" id="simple_lk_3">
				<string title="notes">reflux</string>	
			</link>
			<link title="product" href="mol_epoxide" id="simple_lk_5"/>
			<link title="product" href="mol_MCPBA_waste" id="simple_lk_6"/>
		</list>
	</reaction>
	<molecule title="epoxide" id="mol_epoxide">
		<atomArray>
			<atom id="epoxide_a_1">
				<float builtin="x2" units="A">8.4076</float>
				<float builtin="y2" units="A">-1.0878</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="epoxide_a_2">
				<float builtin="x2" units="A">7.6930</float>
				<float builtin="y2" units="A">-0.6752</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="epoxide_a_3">
				<float builtin="x2" units="A">6.9806</float>
				<float builtin="y2" units="A">-1.0876</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="epoxide_a_4">
				<float builtin="x2" units="A">6.9814</float>
				<float builtin="y2" units="A">-1.9125</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="epoxide_a_5">
				<float builtin="x2" units="A">7.7007</float>
				<float builtin="y2" units="A">-2.3232</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="epoxide_a_6">
				<float builtin="x2" units="A">8.4102</float>
				<float builtin="y2" units="A">-1.9084</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="epoxide_a_7">
				<float builtin="x2" units="A">9.1208</float>
				<float builtin="y2" units="A">-0.6708</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="epoxide_a_8">
				<float builtin="x2" units="A">9.8333</float>
				<float builtin="y2" units="A">-1.0833</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="epoxide_a_9">
				<float builtin="x2" units="A">9.8333</float>
				<float builtin="y2" units="A">-0.2542</float>
				<string builtin="elementType">O</string>
			</atom>
		</atomArray>
		<bondArray>
			<bond id="epoxide_b_1">
				<integer builtin="atomRef">epoxide_a_4</integer>
				<integer builtin="atomRef">epoxide_a_5</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="epoxide_b_2">
				<integer builtin="atomRef">epoxide_a_2</integer>
				<integer builtin="atomRef">epoxide_a_3</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="epoxide_b_3">
				<integer builtin="atomRef">epoxide_a_5</integer>
				<integer builtin="atomRef">epoxide_a_6</integer>
				<integer builtin="order" convention="MDL">2</integer>
			</bond>
			<bond id="epoxide_b_4">
				<integer builtin="atomRef">epoxide_a_6</integer>
				<integer builtin="atomRef">epoxide_a_1</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="epoxide_b_5">
				<integer builtin="atomRef">epoxide_a_1</integer>
				<integer builtin="atomRef">epoxide_a_2</integer>
				<integer builtin="order" convention="MDL">2</integer>
			</bond>
			<bond id="epoxide_b_6">
				<integer builtin="atomRef">epoxide_a_1</integer>
				<integer builtin="atomRef">epoxide_a_7</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="epoxide_b_7">
				<integer builtin="atomRef">epoxide_a_3</integer>
				<integer builtin="atomRef">epoxide_a_4</integer>
				<integer builtin="order" convention="MDL">2</integer>
			</bond>
			<bond id="epoxide_b_8">
				<integer builtin="atomRef">epoxide_a_7</integer>
				<integer builtin="atomRef">epoxide_a_8</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="epoxide_b_9">
				<integer builtin="atomRef">epoxide_a_7</integer>
				<integer builtin="atomRef">epoxide_a_9</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="epoxide_b_10">
				<integer builtin="atomRef">epoxide_a_9</integer>
				<integer builtin="atomRef">epoxide_a_8</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
		</bondArray>
	</molecule>
	<molecule title="MCPBA" id="mol_MCPBA">
		<atomArray>
			<atom id="MCPBA_a_1">
				<float builtin="x2" units="A">-0.7348</float>
				<float builtin="y2" units="A">-0.9750</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="MCPBA_a_2">
				<float builtin="x2" units="A">-0.7359</float>
				<float builtin="y2" units="A">-1.8023</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="MCPBA_a_3">
				<float builtin="x2" units="A">-0.0211</float>
				<float builtin="y2" units="A">-2.2152</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="MCPBA_a_4">
				<float builtin="x2" units="A">0.6953</float>
				<float builtin="y2" units="A">-1.8019</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="MCPBA_a_5">
				<float builtin="x2" units="A">0.6925</float>
				<float builtin="y2" units="A">-0.9713</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="MCPBA_a_6">
				<float builtin="x2" units="A">-0.0229</float>
				<float builtin="y2" units="A">-0.5622</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="MCPBA_a_7">
				<float builtin="x2" units="A">1.4042</float>
				<float builtin="y2" units="A">-0.5542</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="MCPBA_a_8">
				<float builtin="x2" units="A">2.1167</float>
				<float builtin="y2" units="A">-0.9667</float>
				<string builtin="elementType">O</string>
			</atom>
			<atom id="MCPBA_a_9">
				<float builtin="x2" units="A">2.8292</float>
				<float builtin="y2" units="A">-0.5500</float>
				<string builtin="elementType">O</string>
			</atom>
			<atom id="MCPBA_a_10">
				<float builtin="x2" units="A">3.5417</float>
				<float builtin="y2" units="A">-0.9625</float>
				<string builtin="elementType">H</string>
			</atom>
			<atom id="MCPBA_a_11">
				<float builtin="x2" units="A">1.4000</float>
				<float builtin="y2" units="A">0.2708</float>
				<string builtin="elementType">O</string>
			</atom>
			<atom id="MCPBA_a_12">
				<float builtin="x2" units="A">-0.0292</float>
				<float builtin="y2" units="A">-3.0375</float>
				<string builtin="elementType">Cl</string>
			</atom>
		</atomArray>
		<bondArray>
			<bond id="MCPBA_b_1">
				<integer builtin="atomRef">MCPBA_a_6</integer>
				<integer builtin="atomRef">MCPBA_a_1</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="MCPBA_b_2">
				<integer builtin="atomRef">MCPBA_a_1</integer>
				<integer builtin="atomRef">MCPBA_a_2</integer>
				<integer builtin="order" convention="MDL">2</integer>
			</bond>
			<bond id="MCPBA_b_3">
				<integer builtin="atomRef">MCPBA_a_5</integer>
				<integer builtin="atomRef">MCPBA_a_7</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="MCPBA_b_4">
				<integer builtin="atomRef">MCPBA_a_3</integer>
				<integer builtin="atomRef">MCPBA_a_4</integer>
				<integer builtin="order" convention="MDL">2</integer>
			</bond>
			<bond id="MCPBA_b_5">
				<integer builtin="atomRef">MCPBA_a_7</integer>
				<integer builtin="atomRef">MCPBA_a_8</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="MCPBA_b_6">
				<integer builtin="atomRef">MCPBA_a_8</integer>
				<integer builtin="atomRef">MCPBA_a_9</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="MCPBA_b_7">
				<integer builtin="atomRef">MCPBA_a_4</integer>
				<integer builtin="atomRef">MCPBA_a_5</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="MCPBA_b_8">
				<integer builtin="atomRef">MCPBA_a_9</integer>
				<integer builtin="atomRef">MCPBA_a_10</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="MCPBA_b_9">
				<integer builtin="atomRef">MCPBA_a_2</integer>
				<integer builtin="atomRef">MCPBA_a_3</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="MCPBA_b_10">
				<integer builtin="atomRef">MCPBA_a_7</integer>
				<integer builtin="atomRef">MCPBA_a_11</integer>
				<integer builtin="order" convention="MDL">2</integer>
			</bond>
			<bond id="MCPBA_b_11">
				<integer builtin="atomRef">MCPBA_a_5</integer>
				<integer builtin="atomRef">MCPBA_a_6</integer>
				<integer builtin="order" convention="MDL">2</integer>
			</bond>
			<bond id="MCPBA_b_12">
				<integer builtin="atomRef">MCPBA_a_3</integer>
				<integer builtin="atomRef">MCPBA_a_12</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
		</bondArray>
	</molecule>
	<molecule title="MCPBA_waste" id="mol_MCPBA_waste">
		<atomArray>
			<atom id="MCPBA_waste_a_1">
				<float builtin="x2" units="A">12.3069</float>
				<float builtin="y2" units="A">-1.0750</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="MCPBA_waste_a_2">
				<float builtin="x2" units="A">12.3016</float>
				<float builtin="y2" units="A">-1.8982</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="MCPBA_waste_a_3">
				<float builtin="x2" units="A">13.0107</float>
				<float builtin="y2" units="A">-2.3125</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="MCPBA_waste_a_4">
				<float builtin="x2" units="A">13.7256</float>
				<float builtin="y2" units="A">-1.9049</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="MCPBA_waste_a_5">
				<float builtin="x2" units="A">13.7270</float>
				<float builtin="y2" units="A">-1.0785</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="MCPBA_waste_a_6">
				<float builtin="x2" units="A">13.0172</float>
				<float builtin="y2" units="A">-0.6678</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="MCPBA_waste_a_7">
				<float builtin="x2" units="A">13.0042</float>
				<float builtin="y2" units="A">-3.1375</float>
				<string builtin="elementType">Cl</string>
			</atom>
			<atom id="MCPBA_waste_a_8">
				<float builtin="x2" units="A">14.4375</float>
				<float builtin="y2" units="A">-0.6583</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="MCPBA_waste_a_9">
				<float builtin="x2" units="A">15.0208</float>
				<float builtin="y2" units="A">-1.2417</float>
				<string builtin="elementType">O</string>
			</atom>
			<atom id="MCPBA_waste_a_10">
				<float builtin="x2" units="A">14.4333</float>
				<float builtin="y2" units="A">0.1667</float>
				<string builtin="elementType">O</string>
			</atom>
			<atom id="MCPBA_waste_a_11">
				<float builtin="x2" units="A">15.8458</float>
				<float builtin="y2" units="A">-1.2417</float>
				<string builtin="elementType">H</string>
			</atom>
		</atomArray>
		<bondArray>
			<bond id="MCPBA_waste_b_1">
				<integer builtin="atomRef">MCPBA_waste_a_5</integer>
				<integer builtin="atomRef">MCPBA_waste_a_6</integer>
				<integer builtin="order" convention="MDL">2</integer>
			</bond>
			<bond id="MCPBA_waste_b_2">
				<integer builtin="atomRef">MCPBA_waste_a_6</integer>
				<integer builtin="atomRef">MCPBA_waste_a_1</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="MCPBA_waste_b_3">
				<integer builtin="atomRef">MCPBA_waste_a_1</integer>
				<integer builtin="atomRef">MCPBA_waste_a_2</integer>
				<integer builtin="order" convention="MDL">2</integer>
			</bond>
			<bond id="MCPBA_waste_b_4">
				<integer builtin="atomRef">MCPBA_waste_a_3</integer>
				<integer builtin="atomRef">MCPBA_waste_a_7</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="MCPBA_waste_b_5">
				<integer builtin="atomRef">MCPBA_waste_a_3</integer>
				<integer builtin="atomRef">MCPBA_waste_a_4</integer>
				<integer builtin="order" convention="MDL">2</integer>
			</bond>
			<bond id="MCPBA_waste_b_6">
				<integer builtin="atomRef">MCPBA_waste_a_5</integer>
				<integer builtin="atomRef">MCPBA_waste_a_8</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="MCPBA_waste_b_7">
				<integer builtin="atomRef">MCPBA_waste_a_8</integer>
				<integer builtin="atomRef">MCPBA_waste_a_9</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="MCPBA_waste_b_8">
				<integer builtin="atomRef">MCPBA_waste_a_4</integer>
				<integer builtin="atomRef">MCPBA_waste_a_5</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="MCPBA_waste_b_9">
				<integer builtin="atomRef">MCPBA_waste_a_8</integer>
				<integer builtin="atomRef">MCPBA_waste_a_10</integer>
				<integer builtin="order" convention="MDL">2</integer>
			</bond>
			<bond id="MCPBA_waste_b_10">
				<integer builtin="atomRef">MCPBA_waste_a_2</integer>
				<integer builtin="atomRef">MCPBA_waste_a_3</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="MCPBA_waste_b_11">
				<integer builtin="atomRef">MCPBA_waste_a_9</integer>
				<integer builtin="atomRef">MCPBA_waste_a_11</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
		</bondArray>
	</molecule>
	<molecule title="styrene" id="mol_styrene">
		<atomArray>
			<atom id="styrene_a_1">
				<float builtin="x2" units="A">-4.1716</float>
				<float builtin="y2" units="A">-0.8711</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="styrene_a_2">
				<float builtin="x2" units="A">-4.8861</float>
				<float builtin="y2" units="A">-0.4585</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="styrene_a_3">
				<float builtin="x2" units="A">-5.5986</float>
				<float builtin="y2" units="A">-0.8710</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="styrene_a_4">
				<float builtin="x2" units="A">-5.5978</float>
				<float builtin="y2" units="A">-1.6958</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="styrene_a_5">
				<float builtin="x2" units="A">-4.8785</float>
				<float builtin="y2" units="A">-2.1065</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="styrene_a_6">
				<float builtin="x2" units="A">-4.1690</float>
				<float builtin="y2" units="A">-1.6918</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="styrene_a_7">
				<float builtin="x2" units="A">-3.4583</float>
				<float builtin="y2" units="A">-0.4542</float>
				<string builtin="elementType">C</string>
			</atom>
			<atom id="styrene_a_8">
				<float builtin="x2" units="A">-2.7458</float>
				<float builtin="y2" units="A">-0.8667</float>
				<string builtin="elementType">C</string>
			</atom>
		</atomArray>
		<bondArray>
			<bond id="styrene_b_1">
				<integer builtin="atomRef">styrene_a_4</integer>
				<integer builtin="atomRef">styrene_a_5</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="styrene_b_2">
				<integer builtin="atomRef">styrene_a_2</integer>
				<integer builtin="atomRef">styrene_a_3</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="styrene_b_3">
				<integer builtin="atomRef">styrene_a_5</integer>
				<integer builtin="atomRef">styrene_a_6</integer>
				<integer builtin="order" convention="MDL">2</integer>
			</bond>
			<bond id="styrene_b_4">
				<integer builtin="atomRef">styrene_a_6</integer>
				<integer builtin="atomRef">styrene_a_1</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="styrene_b_5">
				<integer builtin="atomRef">styrene_a_1</integer>
				<integer builtin="atomRef">styrene_a_2</integer>
				<integer builtin="order" convention="MDL">2</integer>
			</bond>
			<bond id="styrene_b_6">
				<integer builtin="atomRef">styrene_a_1</integer>
				<integer builtin="atomRef">styrene_a_7</integer>
				<integer builtin="order" convention="MDL">1</integer>
			</bond>
			<bond id="styrene_b_7">
				<integer builtin="atomRef">styrene_a_3</integer>
				<integer builtin="atomRef">styrene_a_4</integer>
				<integer builtin="order" convention="MDL">2</integer>
			</bond>
			<bond id="styrene_b_8">
				<integer builtin="atomRef">styrene_a_7</integer>
				<integer builtin="atomRef">styrene_a_8</integer>
				<integer builtin="order" convention="MDL">2</integer>
			</bond>
		</bondArray>
	</molecule>
</cml>	

</docml:document>