<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2005 rel. 3 U (http://www.altova.com) by John Cottrell (Matrix Science) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:umd="http://www.unimod.org/xmlns/schema/unimod_1" targetNamespace="http://www.unimod.org/xmlns/schema/unimod_1" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:element name="unimod">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="alt_names">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="alt_names_row" maxOccurs="unbounded">
								<xs:complexType>
									<xs:attribute name="alt_name" type="xs:string" use="required"/>
									<xs:attribute name="record_id" type="xs:long" use="required"/>
									<xs:attribute name="mod_key" type="xs:long" use="required"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="amino_acids">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="amino_acids_row" maxOccurs="unbounded">
								<xs:complexType>
									<xs:attribute name="num_H" type="xs:integer" use="required"/>
									<xs:attribute name="num_O" type="xs:integer" use="required"/>
									<xs:attribute name="num_C" type="xs:integer" use="required"/>
									<xs:attribute name="record_id" type="xs:long" use="required"/>
									<xs:attribute name="full_name" type="xs:string" use="required"/>
									<xs:attribute name="one_letter" type="xs:string" use="required"/>
									<xs:attribute name="num_N" type="xs:integer" use="required"/>
									<xs:attribute name="three_letter" type="xs:string" use="required"/>
									<xs:attribute name="num_S" type="xs:integer" use="required"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="brick2element">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="brick2element_row" maxOccurs="unbounded">
								<xs:complexType>
									<xs:attribute name="brick_key" type="xs:long" use="required"/>
									<xs:attribute name="num_element" type="xs:integer" use="required"/>
									<xs:attribute name="record_id" type="xs:long" use="required"/>
									<xs:attribute name="element" type="xs:string" use="required"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="bricks">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="bricks_row" maxOccurs="unbounded">
								<xs:complexType>
									<xs:attribute name="brick" type="xs:string" use="required"/>
									<xs:attribute name="record_id" type="xs:long" use="required"/>
									<xs:attribute name="full_name" type="xs:string" use="required"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="classifications">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="classifications_row" maxOccurs="unbounded">
								<xs:complexType>
									<xs:attribute name="record_id" type="xs:long" use="required"/>
									<xs:attribute name="classification" type="xs:string" use="required"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="elements">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="elements_row" maxOccurs="unbounded">
								<xs:complexType>
									<xs:attribute name="avge_mass" type="xs:double" use="required"/>
									<xs:attribute name="mono_mass" type="xs:double" use="required"/>
									<xs:attribute name="record_id" type="xs:long" use="required"/>
									<xs:attribute name="full_name" type="xs:string" use="required"/>
									<xs:attribute name="element" type="xs:string" use="required"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="fragment_comp">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="fragment_comp_row" maxOccurs="unbounded">
								<xs:complexType>
									<xs:attribute name="brick" type="xs:string" use="required"/>
									<xs:attribute name="record_id" type="xs:long" use="required"/>
									<xs:attribute name="fragments_key" type="xs:long" use="required"/>
									<xs:attribute name="num_brick" type="xs:integer" use="required"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="fragments">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="fragments_row" maxOccurs="unbounded">
								<xs:complexType>
									<xs:attribute name="record_id" type="xs:long" use="required"/>
									<xs:attribute name="mod_key" type="xs:long" use="required"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="mod2brick">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="mod2brick_row" maxOccurs="unbounded">
								<xs:complexType>
									<xs:attribute name="brick" type="xs:string" use="required"/>
									<xs:attribute name="record_id" type="xs:long" use="required"/>
									<xs:attribute name="mod_key" type="xs:long" use="required"/>
									<xs:attribute name="num_brick" type="xs:integer" use="required"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="modifications">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="modifications_row" maxOccurs="unbounded">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="misc_notes" type="xs:string"/>
									</xs:sequence>
									<xs:attribute name="username_of_poster" type="xs:string" use="required"/>
									<xs:attribute name="avge_mass" type="xs:double" use="required"/>
									<xs:attribute name="mono_mass" type="xs:double" use="required"/>
									<xs:attribute name="record_id" type="xs:long" use="required"/>
									<xs:attribute name="full_name" type="xs:string" use="required"/>
									<xs:attribute name="code_name" type="xs:string" use="required"/>
									<xs:attribute name="date_time_modified" type="xs:string" use="required"/>
									<xs:attribute name="date_time_posted" type="xs:string" use="required"/>
									<xs:attribute name="composition" type="xs:string" use="required"/>
									<xs:attribute name="group_of_poster" type="xs:string" use="required"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="neutral_losses">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="neutral_losses_row" maxOccurs="unbounded">
								<xs:complexType>
									<xs:attribute name="brick" type="xs:string" use="required"/>
									<xs:attribute name="spec_key" type="xs:long" use="required"/>
									<xs:attribute name="record_id" type="xs:long" use="required"/>
									<xs:attribute name="num_brick" type="xs:integer" use="required"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="positions">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="positions_row" maxOccurs="unbounded">
								<xs:complexType>
									<xs:attribute name="position" type="xs:string" use="required"/>
									<xs:attribute name="record_id" type="xs:long" use="required"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="specificity">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="specificity_row" maxOccurs="unbounded">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="misc_notes" type="xs:string"/>
									</xs:sequence>
									<xs:attribute name="position_key" type="xs:long" use="required"/>
									<xs:attribute name="nl_mono_mass" type="xs:double" use="required"/>
									<xs:attribute name="classifications_key" type="xs:long" use="required"/>
									<xs:attribute name="record_id" type="xs:long" use="required"/>
									<xs:attribute name="one_letter" type="xs:string" use="required"/>
									<xs:attribute name="mod_key" type="xs:long" use="required"/>
									<xs:attribute name="nl_composition" type="xs:string" use="required"/>
									<xs:attribute name="hidden" type="xs:byte" use="required"/>
									<xs:attribute name="nl_avge_mass" type="xs:double" use="required"/>
									<xs:attribute name="spec_group" type="xs:integer" use="required"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="xref_sources">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="xref_sources_row" maxOccurs="unbounded">
								<xs:complexType>
									<xs:attribute name="record_id" type="xs:long" use="required"/>
									<xs:attribute name="xref_source" type="xs:string" use="required"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="xrefs">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="xrefs_row" maxOccurs="unbounded">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="xref_text" type="xs:string"/>
									</xs:sequence>
									<xs:attribute name="record_id" type="xs:long" use="required"/>
									<xs:attribute name="xref_source_key" type="xs:long" use="required"/>
									<xs:attribute name="mod_key" type="xs:long" use="required"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="majorVersion" type="xs:unsignedShort" use="required" fixed="1"/>
			<xs:attribute name="minorVersion" type="umd:minorVersion_t" use="required"/>
		</xs:complexType>
		<!-- Now we have keyref-constraints -->
		<!-- Table 'alt_names' -->
		<xs:key name="AltNamesRecordID">
			<xs:selector xpath="umd:alt_names/umd:alt_names_row"/>
			<xs:field xpath="@record_id"/>
		</xs:key>
		<xs:keyref name="AltNames_Modifications" refer="umd:ModificationsRecordID">
			<xs:selector xpath="umd:alt_names/umd:alt_names_row"/>
			<xs:field xpath="@mod_key"/>
		</xs:keyref>
		<!-- Table 'amino_acids' -->
		<xs:key name="AminoAcidsRecordID">
			<xs:selector xpath="umd:amino_acids/umd:amino_acids_row"/>
			<xs:field xpath="@record_id"/>
		</xs:key>
		<xs:unique name="AminoAcidsOneLetter">
			<xs:selector xpath="umd:amino_acids/umd:amino_acids_row"/>
			<xs:field xpath="@one_letter"/>
		</xs:unique>
		<xs:unique name="AminoAcidsThreeLetter">
			<xs:selector xpath="umd:amino_acids/umd:amino_acids_row"/>
			<xs:field xpath="@three_letter"/>
		</xs:unique>
		<!-- Table 'brick2element' -->
		<xs:key name="Brick2ElementRecordID">
			<xs:selector xpath="umd:brick2element/umd:brick2element_row"/>
			<xs:field xpath="@record_id"/>
		</xs:key>
		<xs:keyref name="Brick2Element_Elements" refer="umd:ElementsElement">
			<xs:selector xpath="umd:brick2element/umd:brick2element_row"/>
			<xs:field xpath="@element"/>
		</xs:keyref>
		<xs:keyref name="Brick2Element_Bricks" refer="umd:BricksRecordID">
			<xs:selector xpath="umd:brick2element/umd:brick2element_row"/>
			<xs:field xpath="@brick_key"/>
		</xs:keyref>
		<!-- Table 'bricks' -->
		<xs:key name="BricksRecordID">
			<xs:selector xpath="umd:bricks/umd:bricks_row"/>
			<xs:field xpath="@record_id"/>
		</xs:key>
		<xs:unique name="BricksBrick">
			<xs:selector xpath="umd:bricks/umd:bricks_row"/>
			<xs:field xpath="@brick"/>
		</xs:unique>
		<!-- Table 'classifications' -->
		<xs:key name="ClassificationsRecordID">
			<xs:selector xpath="umd:classifications/umd:classifications_row"/>
			<xs:field xpath="@record_id"/>
		</xs:key>
		<xs:unique name="ClassificationsClassification">
			<xs:selector xpath="umd:classifications/umd:classifications_row"/>
			<xs:field xpath="@classification"/>
		</xs:unique>
		<!-- Table 'elements' -->
		<xs:key name="ElementsRecordID">
			<xs:selector xpath="umd:elements/umd:elements_row"/>
			<xs:field xpath="@record_id"/>
		</xs:key>
		<xs:unique name="ElementsElement">
			<xs:selector xpath="umd:elements/umd:elements_row"/>
			<xs:field xpath="@element"/>
		</xs:unique>
		<!-- Table 'fragment_comp' -->
		<xs:key name="FragmentCompRecordID">
			<xs:selector xpath="umd:fragment_comp/umd:fragment_comp_row"/>
			<xs:field xpath="@record_id"/>
		</xs:key>
		<xs:keyref name="FragmentComp_Bricks" refer="umd:BricksBrick">
			<xs:selector xpath="umd:fragment_comp/umd:fragment_comp_row"/>
			<xs:field xpath="@brick"/>
		</xs:keyref>
		<xs:keyref name="FragmentComp_Fragments" refer="umd:FragmentsRecordID">
			<xs:selector xpath="umd:fragment_comp/umd:fragment_comp_row"/>
			<xs:field xpath="@fragments_key"/>
		</xs:keyref>
		<!-- Table 'fragments' -->
		<xs:key name="FragmentsRecordID">
			<xs:selector xpath="umd:fragments/umd:fragments_row"/>
			<xs:field xpath="@record_id"/>
		</xs:key>
		<xs:keyref name="Fragments_Modifications" refer="umd:ModificationsRecordID">
			<xs:selector xpath="umd:fragments/umd:fragments_row"/>
			<xs:field xpath="@mod_key"/>
		</xs:keyref>
		<!-- Table 'mod2brick' -->
		<xs:key name="Mod2BrickRecordID">
			<xs:selector xpath="umd:mod2brick/umd:mod2brick_row"/>
			<xs:field xpath="@record_id"/>
		</xs:key>
		<xs:keyref name="Mod2Brick_Modifications" refer="umd:ModificationsRecordID">
			<xs:selector xpath="umd:mod2brick/umd:mod2brick_row"/>
			<xs:field xpath="@mod_key"/>
		</xs:keyref>
		<xs:keyref name="Mod2Brick_Bricks" refer="umd:BricksBrick">
			<xs:selector xpath="umd:mod2brick/umd:mod2brick_row"/>
			<xs:field xpath="@brick"/>
		</xs:keyref>
		<!-- Table 'modifications' -->
		<xs:key name="ModificationsRecordID">
			<xs:selector xpath="umd:modifications/umd:modifications_row"/>
			<xs:field xpath="@record_id"/>
		</xs:key>
		<xs:unique name="ModificationsCodeName">
			<xs:selector xpath="umd:modifications/umd:modifications_row"/>
			<xs:field xpath="@code_name"/>
		</xs:unique>
		<!-- Table 'neutral_losses' -->
		<xs:key name="NeutralLossesRecordID">
			<xs:selector xpath="umd:neutral_losses/umd:neutral_losses_row"/>
			<xs:field xpath="@record_id"/>
		</xs:key>
		<xs:keyref name="NeutralLosses_Bricks" refer="umd:BricksBrick">
			<xs:selector xpath="umd:neutral_losses/umd:neutral_losses_row"/>
			<xs:field xpath="@brick"/>
		</xs:keyref>
		<xs:keyref name="NeutralLosses_Specificity" refer="umd:SpecificityRecordID">
			<xs:selector xpath="umd:neutral_losses/umd:neutral_losses_row"/>
			<xs:field xpath="@spec_key"/>
		</xs:keyref>
		<!-- Table 'positions' -->
		<xs:key name="PositionsRecordID">
			<xs:selector xpath="umd:positions/umd:positions_row"/>
			<xs:field xpath="@record_id"/>
		</xs:key>
		<xs:unique name="PositionsPosition">
			<xs:selector xpath="umd:positions/umd:positions_row"/>
			<xs:field xpath="@position"/>
		</xs:unique>
		<!-- Table 'specificity' -->
		<xs:key name="SpecificityRecordID">
			<xs:selector xpath="umd:specificity/umd:specificity_row"/>
			<xs:field xpath="@record_id"/>
		</xs:key>
		<xs:keyref name="Specificity_Modifications" refer="umd:ModificationsRecordID">
			<xs:selector xpath="umd:specificity/umd:specificity_row"/>
			<xs:field xpath="@mod_key"/>
		</xs:keyref>
		<xs:keyref name="Specificity_AminoAcids" refer="umd:AminoAcidsOneLetter">
			<xs:selector xpath="umd:specificity/umd:specificity_row"/>
			<xs:field xpath="@one_letter"/>
		</xs:keyref>
		<xs:keyref name="Specificity_Positions" refer="umd:PositionsRecordID">
			<xs:selector xpath="umd:specificity/umd:specificity_row"/>
			<xs:field xpath="@position_key"/>
		</xs:keyref>
		<xs:keyref name="Specificity_Classicifations" refer="umd:ClassificationsRecordID">
			<xs:selector xpath="umd:specificity/umd:specificity_row"/>
			<xs:field xpath="@classifications_key"/>
		</xs:keyref>
		<!-- Table 'xref_sources' -->
		<xs:key name="XrefSourcesRecordID">
			<xs:selector xpath="umd:xref_sources/umd:xref_sources_row"/>
			<xs:field xpath="@record_id"/>
		</xs:key>
		<xs:unique name="XrefSourcesXrefSource">
			<xs:selector xpath="umd:xref_sources/umd:xref_sources_row"/>
			<xs:field xpath="@xref_source"/>
		</xs:unique>
		<!-- Table 'xrefs' -->
		<xs:key name="XrefsRecordID">
			<xs:selector xpath="umd:xrefs/umd:xrefs_row"/>
			<xs:field xpath="@record_id"/>
		</xs:key>
		<xs:keyref name="Xrefs_Modifications" refer="umd:ModificationsRecordID">
			<xs:selector xpath="umd:xrefs/umd:xrefs_row"/>
			<xs:field xpath="@mod_key"/>
		</xs:keyref>
		<xs:keyref name="Xrefs_XrefSources" refer="umd:XrefSourcesRecordID">
			<xs:selector xpath="umd:xrefs/umd:xrefs_row"/>
			<xs:field xpath="@xref_source_key"/>
		</xs:keyref>
	</xs:element>
	<xs:simpleType name="minorVersion_t">
		<xs:annotation>
			<xs:documentation>Schema minor version number</xs:documentation>
		</xs:annotation>
		<xs:restriction base="xs:unsignedShort">
			<xs:maxInclusive value="0"/>
		</xs:restriction>
	</xs:simpleType>
</xs:schema>
