﻿<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://tonicafugata.com/TcaXML/1.0"
            xmlns="http://tonicafugata.com/TcaXML/1.0"
            elementFormDefault="qualified">

    <!-- root element -->
    <xsd:element name="score" type="Score"/>

    <!-- main type -->
    <xsd:complexType name="Score">

        <xsd:annotation>
            <xsd:documentation>Tonica score format introduced with version 17</xsd:documentation>
        </xsd:annotation>

        <xsd:sequence>
            <xsd:element name="info" type="Info"/>
            <xsd:element name="documentSettings" type="DocumentSettings"/>
            <xsd:element name="composeSettings" type="ComposeSettings"/>
        </xsd:sequence>

    </xsd:complexType>

    <!-- complex types -->

    <xsd:complexType name="Info">
        <xsd:annotation>
            <xsd:documentation>Basic metadata about the score</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="encodingSoftware" type="xsd:string" minOccurs="0"/>
            <xsd:element name="author" type="xsd:string" minOccurs="0"/>
            <xsd:element name="rights" type="xsd:string" minOccurs="0"/>
            <xsd:element name="comment" type="xsd:string" minOccurs="0"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="DocumentSettings">
        <xsd:annotation>
            <xsd:documentation>Tonica document settings</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="title" type="Title"/>
            <xsd:element name="layout" type="Layout"/>
            <xsd:element name="pageNumPos" type="PageNumPos"/>
            <xsd:element name="mainTime" type="Time"/>
            <xsd:element name="mainKey" type="Key"/>
            <xsd:element name="timeResolution" type="TimeResolution"/>
            <xsd:element name="harmonyRepresentation" type="HarmonyRepresentation"/>
            <xsd:element name="soundMap" type="SoundMap"/>
            <xsd:element name="tempo" type="Tempo"/>
            <xsd:element name="notes" type="Notes" minOccurs="0" maxOccurs="unbounded"/>
            <xsd:element name="harmonies" type="Harmonies"/>
            <xsd:element name="barlines">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="barline" type="Barline" minOccurs="0" maxOccurs="unbounded"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="Title">
        <xsd:annotation>
            <xsd:documentation>Score title with placement</xsd:documentation>
        </xsd:annotation>
        <xsd:simpleContent>
            <xsd:extension base="xsd:string">
                <xsd:attribute name="x" type="Gap32" use="required"/>
                <xsd:attribute name="y" type="Gap32" use="required"/>
                <xsd:attribute name="align" type="HorizAlign"/>
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>

    <xsd:complexType name="Layout">
        <xsd:annotation>
            <xsd:documentation>Score layout</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="pages" type="Pages"/>
            <xsd:element name="staves" type="Staves"/>
            <xsd:element name="brackets" type="Brackets"/>
        </xsd:sequence>
        <xsd:attribute name="systemsTop" type="xsd:int" use="required"/>
        <xsd:attribute name="systemsBetween" type="xsd:int" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="Pages">
        <xsd:annotation>
            <xsd:documentation>Page layout</xsd:documentation>
        </xsd:annotation>
        <xsd:attribute name="paperSize" type="PaperNorm" use="required"/>
        <xsd:attribute name="landscape" type="xsd:boolean" default="false"/>
    </xsd:complexType>

    <xsd:complexType name="Staves">
        <xsd:sequence>
            <xsd:element name="staffLayout" type="StaffLayout" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="StaffLayout">
        <xsd:annotation>
            <xsd:documentation>Staff layout</xsd:documentation>
        </xsd:annotation>
        <xsd:attribute name="top" type="Gap" use="required"/>
        <xsd:attribute name="bottom" type="Gap" use="required"/>
        <xsd:attribute name="defaultClef" type="Clef" use="required"/>
        <xsd:attribute name="instrumentName" type="xsd:string" use="required"/>
        <xsd:attribute name="instrumentAbbrev" type="xsd:string" use="required"/>
        <xsd:attribute name="pairName" type="xsd:string"/>
        <xsd:attribute name="pairAbbrev" type="xsd:string"/>
    </xsd:complexType>

    <xsd:complexType name="Brackets">
        <xsd:annotation>
            <xsd:documentation>Brackets</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="bracket" minOccurs="0" maxOccurs="unbounded">
                <xsd:complexType>
                    <xsd:attribute name="from" type="xsd:int" use="required"/>
                    <xsd:attribute name="to" type="xsd:int" use="required"/>
                    <xsd:attribute name="curly" type="xsd:boolean" default="false"/>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="PageNumPos">
        <xsd:annotation>
            <xsd:documentation>Page numbers position</xsd:documentation>
        </xsd:annotation>
        <xsd:attribute name="x" type="Gap32" use="required"/>
        <xsd:attribute name="y" type="Gap32" use="required"/>
        <xsd:attribute name="align" type="HorizAlign"/>
    </xsd:complexType>

    <xsd:complexType name="Key">
        <xsd:annotation>
            <xsd:documentation>
                Key signature specified by position in the circle of fifths and by mode.
                Example "F minor": fifths = -4, mode = minor
            </xsd:documentation>
        </xsd:annotation>
        <xsd:attribute name="fifths" use="required">
            <xsd:simpleType>
                <xsd:restriction base="xsd:int">
                    <xsd:minInclusive value="-7"/>
                    <xsd:maxInclusive value="7"/>
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:attribute>
        <xsd:attribute name="mode" type="Mode" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="SoundMap">
        <xsd:sequence>
            <xsd:element name="map" maxOccurs="unbounded">
                <xsd:complexType>
                    <xsd:annotation>
                        <xsd:documentation>Sound mapping for voice number. Transpose is used for transposing instruments.</xsd:documentation>
                    </xsd:annotation>
                    <xsd:sequence>
                    </xsd:sequence>
                    <xsd:attribute name="voice" type="xsd:int" use="required"/>
                    <xsd:attribute name="instrument" type="MidiNumber" use="required"/>
                    <xsd:attribute name="device" type="xsd:string"/>
                    <xsd:attribute name="sound" type="xsd:string"/>
                    <xsd:attribute name="genericSound" type="xsd:string"/>
                    <xsd:attribute name="volume" type="xsd:int" use="required"/>
                    <xsd:attribute name="transpose" type="xsd:int"/>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="Notes">
        <xsd:annotation>
            <xsd:documentation>Chord notes for voice in staff</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="chord" type="Chord" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="voice" type="xsd:int" use="required"/>
        <xsd:attribute name="staff" type="xsd:int" use="required"/>
        <xsd:attribute name="composeVoice" type="xsd:boolean" use="required">
            <xsd:annotation>
                <xsd:documentation>Specifies whether voice is used for composition</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="melodyVoice" type="xsd:boolean" default="false">
            <xsd:annotation>
                <xsd:documentation>Is set when voice is the melody voice. Only one voice can be the melody voice.</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
    </xsd:complexType>

    <xsd:complexType name="Chord">
        <xsd:annotation>
            <xsd:documentation>Chord properties</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="note" type="Note" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="duration" type="TimeUnit" use="required"/>
        <xsd:attribute name="fermata" type="xsd:boolean" default="false"/>
        <xsd:attribute name="beamed" type="xsd:boolean" default="false"/>
        <xsd:attribute name="tied" type="xsd:boolean" default="false"/>
        <xsd:attribute name="triplet" type="Triplet" default="none"/>
        <xsd:attribute name="volta" type="Volta" default="none"/>
        <xsd:attribute name="filler" type="xsd:boolean" default="false">
            <xsd:annotation>
                <xsd:documentation>Is used for filler rests which are invisible in print</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="trill" type="xsd:boolean" default="false"/>
    </xsd:complexType>

    <xsd:complexType name="Note">
        <xsd:annotation>
            <xsd:documentation>Chord note properties</xsd:documentation>
        </xsd:annotation>
        <xsd:attribute name="pitch" type="Pitch" use="required"/>
        <xsd:attribute name="accidental" type="NoteAlteration" use="required"/>
        <xsd:attribute name="line" type="Staffline" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="Harmonies">
        <xsd:annotation>
            <xsd:documentation>Harmonies</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="harmony" type="Harmony" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="Harmony">
        <xsd:annotation>
            <xsd:documentation>Harmony (function, jazz or figured bass)</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:choice>
                <xsd:element name="function" type="Function"/>
                <xsd:element name="jazz" type="Jazz"/>
                <xsd:element name="figuredBass" type="FiguredBass"/>
            </xsd:choice>
            <xsd:element name="modulation" type="Key"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="Function">
        <xsd:annotation>
            <xsd:documentation>Function according to function theory, degree theory or Roman numeral notation</xsd:documentation>
        </xsd:annotation>
        <xsd:attribute name="functionType" type="FunctionType" default="none"/>
        <xsd:attribute name="parallel" type="Parallel" default="none"/>
        <xsd:attribute name="secondaryDominant" type="SecondaryDominant" default="none"/>
        <xsd:attribute name="bass" type="Degree" default="0"/>
        <xsd:attribute name="add1" default="0">
            <xsd:simpleType>
                <xsd:annotation>
                    <xsd:documentation>First additional tone: number 1-9 (e.g. 7), n = neapolitan chord (s n), 0 = none</xsd:documentation>
                </xsd:annotation>
                <xsd:restriction base="xsd:string">
                    <xsd:pattern value="[0-9]"/>
                    <xsd:pattern value="n"/>
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:attribute>
        <xsd:attribute name="alter1" type="FunctionAlteration" default="0">
            <xsd:annotation>
                <xsd:documentation>Alteration of first additional tone (e.g. 7>)</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="add2" default="0">
            <xsd:simpleType>
                <xsd:annotation>
                    <xsd:documentation>Second additional tone: number 1-9 (e.g. 9), 0 = none</xsd:documentation>
                </xsd:annotation>
                <xsd:restriction base="xsd:int">
                    <xsd:minInclusive value="0"/>
                    <xsd:maxInclusive value="9"/>
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:attribute>
        <xsd:attribute name="alter2" type="FunctionAlteration" default="0">
            <xsd:annotation>
                <xsd:documentation>Alteration of second additional tone</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="shortened" type="xsd:boolean" default="false">
            <xsd:annotation>
                <xsd:documentation>Shortened, i.e. base tone missing (e.g. \D7)</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
    </xsd:complexType>

    <xsd:complexType name="Jazz">
        <xsd:annotation>
            <xsd:documentation>Jazz notation</xsd:documentation>
        </xsd:annotation>
        <xsd:attribute name="root" type="Degree" default="0"/>
        <xsd:attribute name="rootShift" type="JazzAlteration" default="0"/>
        <xsd:attribute name="modifier1" type="xsd:string" default="">
            <xsd:annotation>
                <xsd:documentation>First modification of basic chord (e.g. maj7)</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="modifier2" type="xsd:string" default="">
            <xsd:annotation>
                <xsd:documentation>Second modification of basic chord (e.g. b9)</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="bass" type="Degree" default="0"/>
        <xsd:attribute name="bassShift" type="JazzAlteration" default="0"/>
    </xsd:complexType>

    <xsd:complexType name="FiguredBass">
        <xsd:annotation>
            <xsd:documentation>Figured bass notation</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="numerals" minOccurs="0">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="numeral" type="xsd:string" minOccurs="0" maxOccurs="3"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="chord" type="xsd:boolean" default="true">
            <xsd:annotation>
                <xsd:documentation>Does bass note have a chord?</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="anticipation" type="xsd:boolean" default="false">
            <xsd:annotation>
                <xsd:documentation>Does bass note have an anticipated chord?</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
    </xsd:complexType>

    <xsd:complexType name="Barline">
        <xsd:annotation>
            <xsd:documentation>Explicit barline, e.g. used for upbeat and repetition</xsd:documentation>
        </xsd:annotation>
        <xsd:attribute name="time" type="TimeUnit" use="required"/>
        <xsd:attribute name="barlineType" type="BarlineType" default="single"/>
    </xsd:complexType>

    <xsd:complexType name="ComposeSettings">
        <xsd:annotation>
            <xsd:documentation>Settings for tonica composition and analysis</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="composeOptions" type="ComposeOptions"/>
            <xsd:element name="analyzeOptions" type="AnalyzeOptions"/>
            <xsd:element name="variationOptions" type="VariationOptions"/>
            <xsd:element name="patternOptions" type="PatternOptions"/>
            <xsd:element name="canonOptions" type="CanonOptions"/>
            <xsd:element name="fugueOptions" type="FugueOptions"/>
            <xsd:element name="figuredBassOptions" type="FiguredBassOptions"/>
            <xsd:element name="doubleVoiceOptions" type="DoubleVoiceOptions"/>
            <xsd:element name="voiceLeadingOptions" type="VoiceLeadingOptions"/>
            <xsd:element name="diceGameOptions" type="DiceGameOptions"/>
            <xsd:element name="composeAmbitus" type="Ambitus"/>
            <xsd:element name="variationAmbitus" type="Ambitus"/>
            <xsd:element name="counterpointAmbitus" type="Ambitus"/>
            <xsd:element name="voiceAmbitus" type="Ambitus"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="ComposeOptions">
        <xsd:annotation>
            <xsd:documentation>Options for composing</xsd:documentation>
        </xsd:annotation>
        <xsd:attribute name="harmonizationStyle" type="xsd:string" use="required"/>
        <xsd:attribute name="harmonizationRhythm" type="HarmonizationRhythm" use="required"/>
        <xsd:attribute name="strategy" type="Strategy" use="required"/>
        <xsd:attribute name="preferNarrowRange" type="xsd:boolean" use="required"/>
        <xsd:attribute name="insertCadences" type="InsertCadences" use="required"/>
        <xsd:attribute name="randomCadences" type="xsd:boolean" use="required"/>
        <xsd:attribute name="considerSpecifiedModulations" type="xsd:boolean" use="required"/>
        <xsd:attribute name="fastComputation" type="xsd:boolean" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="AnalyzeOptions">
        <xsd:annotation>
            <xsd:documentation>Options for harmonic analysis</xsd:documentation>
        </xsd:annotation>
        <xsd:attribute name="harmonicAnalysisDistance" type="HarmonicAnalysisDistance" use="required"/>
        <xsd:attribute name="selectDistanceDynamically" type="xsd:boolean" use="required"/>
        <xsd:attribute name="chordScheme" type="ChordScheme" use="required"/>
        <xsd:attribute name="detectModulations" type="xsd:boolean" use="required"/>
        <xsd:attribute name="considerSpecifiedModulations" type="xsd:boolean" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="VariationOptions">
        <xsd:annotation>
            <xsd:documentation>Options for variations</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="voiceOptions" type="VariationVoiceOptions"/>
        </xsd:sequence>
        <xsd:attribute name="variationStyle" type="xsd:string" use="required"/>
        <xsd:attribute name="variationRhythm" type="VariationRhythm" use="required"/>
        <xsd:attribute name="determineFirstMotifTone" type="xsd:boolean" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="VariationVoiceOptions">
        <xsd:annotation>
            <xsd:documentation>
                Voice options for variations. This may be a fixed voice, a list of randomly alternating voices, or sequence of repeating voices defined by an alternation pattern.
                If you select -1 as an alternating voice it may happen that no variation motif appears at a time.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:choice>
                <xsd:element name="fixedVoice" type="xsd:int"/>
                <xsd:element name="alternatingVoice" type="xsd:int" minOccurs="0" maxOccurs="unbounded"/>
                <xsd:element name="alternationPattern" type="AlternationPattern"/>
            </xsd:choice>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="PatternOptions">
        <xsd:annotation>
            <xsd:documentation>Options for accompanying patterns</xsd:documentation>
        </xsd:annotation>
        <xsd:attribute name="accompanyingStyle" type="xsd:string" use="required"/>
        <xsd:attribute name="harmonizationRhythm" type="HarmonizationRhythm"/>
        <xsd:attribute name="tempo" type="Tempo"/>
        <xsd:attribute name="accompanyingInstrument" type="MidiNumber"/>
    </xsd:complexType>

    <xsd:complexType name="CanonOptions">
        <xsd:annotation>
            <xsd:documentation>Canon options</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="voiceOptions" type="CanonVoiceOptions"/>
        </xsd:sequence>
        <xsd:attribute name="varyAccompaniment" type="xsd:boolean" use="required"/>
        <xsd:attribute name="voiceCount" type="xsd:int" use="required"/>
        <xsd:attribute name="entranceInterval" type="EntranceInterval" use="required"/>
        <xsd:attribute name="maxMeasures" type="MaxMeasures" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="CanonVoiceOptions">  
        <xsd:annotation>
            <xsd:documentation>Voice options for canons</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="canonVoice" type="CanonVoice" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="CanonVoice">  
        <xsd:annotation>
            <xsd:documentation>Canon voice</xsd:documentation>
        </xsd:annotation>
        <xsd:attribute name="voice" type="xsd:int" use="required"/>
        <xsd:attribute name="entranceVoice" type="xsd:int" use="required"/>
        <xsd:attribute name="subjectForm" type="SubjectForm" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="FugueOptions">
        <xsd:annotation>
            <xsd:documentation>Fugue options</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="voiceOptions" type="FugueVoiceOptions" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="formScheme" type="xsd:string" use="required"/>
        <xsd:attribute name="varyAccompaniment" type="xsd:boolean" use="required"/>
        <xsd:attribute name="subjectOverlap" type="TimeUnit16" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="FugueVoiceOptions">
        <xsd:annotation>
            <xsd:documentation>Voice options for fugues</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="fugueVoice" type="FugueVoice" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="FugueVoice">
        <xsd:annotation>
            <xsd:documentation>Fugue voice</xsd:documentation>
        </xsd:annotation>
        <xsd:attribute name="voice" type="xsd:int" use="required"/>
        <xsd:attribute name="allocatedVoice" type="xsd:int" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="FiguredBassOptions">
        <xsd:annotation>
            <xsd:documentation>Figured bass options</xsd:documentation>
        </xsd:annotation>
        <xsd:attribute name="openPosition" type="xsd:boolean" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="DoubleVoiceOptions">
        <xsd:annotation>
            <xsd:documentation>Double voice options</xsd:documentation>
        </xsd:annotation>
        <xsd:attribute name="doubleVoice" type="xsd:int" use="required"/>
        <xsd:attribute name="interval" type="DoubleInterval" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="VoiceLeadingOptions">
        <xsd:annotation>
            <xsd:documentation>Voice leading options</xsd:documentation>
        </xsd:annotation>
        <xsd:attribute name="displayParallels" type="DisplayParallels" use="required"/>
        <xsd:attribute name="checkPhraseTransitions" type="xsd:boolean" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="DiceGameOptions">
        <xsd:annotation>
            <xsd:documentation>Dice game options</xsd:documentation>
        </xsd:annotation>
        <xsd:attribute name="diceGameStyle" type="xsd:string" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="Ambitus">
        <xsd:annotation>
            <xsd:documentation>Ambitus (voice ranges)</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence maxOccurs="unbounded">
            <xsd:element name="voiceRange" type="VoiceRange"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="VoiceRange">
        <xsd:annotation>
            <xsd:documentation>Ambitus (voice ranges)</xsd:documentation>
        </xsd:annotation>
        <xsd:attribute name="voice" type="xsd:int" use="required"/>
        <xsd:attribute name="maxPitch" type="MidiNumber" use="required"/>
        <xsd:attribute name="minPitch" type="MidiNumber" use="required"/>
    </xsd:complexType>

    <!-- simple types -->

    <xsd:simpleType name="Time">
        <xsd:annotation>
            <xsd:documentation>
                Allowed values:<br/>
                "C", "allaBreve", or n/d with
                <ul>
                    <li>n in {1,...,16}</li>
                    <li>d in {1,2,4,8,16}</li>
                </ul>
                e.g.: "3/4", "7/16"
            </xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="allaBreve"/>
            <xsd:pattern value="C"/>
            <xsd:pattern value="([1-9]|1[0-6])/(1|2|4|8|16)"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="TimeResolution">
        <xsd:annotation>
            <xsd:documentation>Number of time units per whole note, e.g. 48 = 16th triplet resolution</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:int"/>
    </xsd:simpleType>

    <xsd:simpleType name="HarmonyRepresentation">
        <xsd:annotation>
            <xsd:documentation>
                Harmony representations supported in tonica:<br/>
                <ul>
                    <li>Riemann Functional notation</li>
                    <li>Roman Numeral notation</li>
                    <li>Scale degrees notation</li>
                    <li>Jazz notation</li>
                    <li>Baroque Figured Bass notation</li>
                </ul>
            </xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="functionalTheory"/>
            <xsd:enumeration value="romanNumeral"/>
            <xsd:enumeration value="degrees"/>
            <xsd:enumeration value="jazz"/>
            <xsd:enumeration value="figuredBass"/>
            <xsd:enumeration value="none"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Tempo">
        <xsd:annotation>
            <xsd:documentation>Tempo in quarters per minute</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:int">
            <xsd:minInclusive value="30"/>
            <xsd:maxInclusive value="300"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Gap32">
        <xsd:annotation>
            <xsd:documentation>Staffline distance. tonica uses multiples of .03125 = 1/32.</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:decimal"/>
    </xsd:simpleType>

    <xsd:simpleType name="HorizAlign">
        <xsd:annotation>
            <xsd:documentation>Horizontal text alignment</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="left"/>
            <xsd:enumeration value="center"/>
            <xsd:enumeration value="right"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="PaperNorm">
        <xsd:annotation>
            <xsd:documentation>Paper formats</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="A4"/>
            <xsd:enumeration value="B4"/>
            <xsd:enumeration value="A5"/>
            <xsd:enumeration value="B5"/>
            <xsd:enumeration value="A3"/>
            <xsd:enumeration value="Letter"/>
            <xsd:enumeration value="Legal"/>
            <xsd:enumeration value="Tabloid"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Gap">
        <xsd:annotation>
            <xsd:documentation>Staffline distance</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:int"/>
    </xsd:simpleType>

    <xsd:simpleType name="Clef">
        <xsd:annotation>
            <xsd:documentation>
                one of the 4 common clefs or a concatenation of
                <ul>
                  <li>one of G,C,F,P,N,U (clef type)</li>
                  <li>one of 1,2,3,4,5 (line)</li>
                  <li>[one of -,0,+ (octave)]</li>
                </ul>
                e.g.: "G3-" (G-clef on middle line, octava bassa)
            </xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="treble"/>
            <xsd:pattern value="bass"/>
            <xsd:pattern value="alto"/>
            <xsd:pattern value="tenor"/>
            <xsd:pattern value="[GCFPNU][12345][\-0\+]?"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Mode">
        <xsd:annotation>
            <xsd:documentation>Key modes</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="major"/>
            <xsd:enumeration value="minor"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="MidiNumber">
        <xsd:annotation>
            <xsd:documentation>MIDI numbers</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:int">
            <xsd:minInclusive value="0"/>
            <xsd:maxInclusive value="127"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="TimeUnit">
        <xsd:annotation>
            <xsd:documentation>Number of time units (duration) in time resolution</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:int"/>
    </xsd:simpleType>

    <xsd:simpleType name="Triplet">
        <xsd:annotation>
            <xsd:documentation>Note triplet position</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="none"/>
            <xsd:enumeration value="start"/>
            <xsd:enumeration value="middle"/>
            <xsd:enumeration value="end"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Volta">
        <xsd:annotation>
            <xsd:documentation>Note volta number</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="none"/>
            <xsd:enumeration value="first"/>
            <xsd:enumeration value="second"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Pitch">
        <xsd:annotation>
            <xsd:documentation>Chromatic pitch number relative to key root. For C major a' = 57. -1 is used for rests.</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:int">
            <xsd:minInclusive value="-1"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="NoteAlteration">
        <xsd:annotation>
            <xsd:documentation>Note alteration</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="doubleFlat"/>
            <xsd:enumeration value="flat"/>
            <xsd:enumeration value="none"/>
            <xsd:enumeration value="sharp"/>
            <xsd:enumeration value="doubleSharp"/>
            <xsd:enumeration value="natural"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Staffline">
        <xsd:annotation>
            <xsd:documentation>
                Staff line position:<br/>
                <pre>
                    28		--<br/>
                    26		--<br/>
                    24		--<br/>
                    22		--<br/>
                    20		--<br/>
                    18	------------------------------------<br/>
                    16	------------------------------------<br/>
                    14	------------------------------------<br/>
                    12	------------------------------------<br/>
                    10	------------------------------------<br/>
                    8		--<br/>
                    6		--<br/>
                    4		--<br/>
                    2		--<br/>
                    0		--<br/>
                </pre>
            </xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:int"/>
    </xsd:simpleType>

    <xsd:simpleType name="FunctionType">
        <xsd:annotation>
            <xsd:documentation>Harmonic functions, i.e. T, S, D, t, s, d, SS, DD</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="none"/>
            <xsd:enumeration value="tonic"/>
            <xsd:enumeration value="subdominant"/>
            <xsd:enumeration value="dominant"/>
            <xsd:enumeration value="tonicMinor"/>
            <xsd:enumeration value="subdominantMinor"/>
            <xsd:enumeration value="dominantMinor"/>
            <xsd:enumeration value="doubleSubdominant"/>
            <xsd:enumeration value="doubleDominant"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Parallel">
        <xsd:annotation>
            <xsd:documentation>Function parallels, e.g. tP, Tp, tG, Tg</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="none"/>
            <xsd:enumeration value="major"/>
            <xsd:enumeration value="minor"/>
            <xsd:enumeration value="counterMajor"/>
            <xsd:enumeration value="counterMinor"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="SecondaryDominant">
        <xsd:annotation>
            <xsd:documentation>Secondary dominants, e.g. (D)S, (D)D = DD, (D)Tp, (D)Sp, (D)Dp</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="none"/>
            <xsd:enumeration value="subdominant"/>
            <xsd:enumeration value="dominant"/>
            <xsd:enumeration value="tonicParallel"/>
            <xsd:enumeration value="subdominantParallel"/>
            <xsd:enumeration value="dominantParallel"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Degree">
        <xsd:annotation>
            <xsd:documentation>Scale degree (1-7), 0 = none</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:int">
            <xsd:minInclusive value="0"/>
            <xsd:maxInclusive value="7"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="FunctionAlteration">
        <xsd:annotation>
            <xsd:documentation>Function alteration: -1 = b, 0 = none, 1 = #</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:int">
            <xsd:minInclusive value="-1"/>
            <xsd:maxInclusive value="1"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="JazzAlteration">
        <xsd:annotation>
            <xsd:documentation>Double alteration: i.e. -2 = bb, -1 = b, 0 = none, 1 = #, 2 = x</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:int">
            <xsd:minInclusive value="-2"/>
            <xsd:maxInclusive value="2"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="BarlineType">
        <xsd:annotation>
            <xsd:documentation>Barline types</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="single"/>
            <xsd:enumeration value="double"/>
            <xsd:enumeration value="end"/>
            <xsd:enumeration value="repEnd"/>
            <xsd:enumeration value="repBegin"/>
            <xsd:enumeration value="repEndBegin"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="HarmonizationRhythm">
        <xsd:annotation>
            <xsd:documentation>Determines the rhythm of the harmonization (such as quarter notes or dotted rhythms)</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="TimeUnit16">
            <xsd:enumeration value="16"/>
            <xsd:enumeration value="12"/>
            <xsd:enumeration value="8"/>
            <xsd:enumeration value="6"/>
            <xsd:enumeration value="4"/>
            <xsd:enumeration value="3"/>
            <xsd:enumeration value="2"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Strategy">
        <xsd:annotation>
            <xsd:documentation>
                Generally tonica will determine a composition by choosing the most likely harmony (best solution).
                Alternative solutions are created by interpreting the neural network output as estimated posterior probabilities.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="bestSolution"/>
            <xsd:enumeration value="alternativeSolutions"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="InsertCadences">
        <xsd:annotation>
            <xsd:documentation>
                Determines if or where tonica may insert cadences. You can choose between overall and at phrase end.
                Phrase ends must be marked by fermata.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="anywhere"/>
            <xsd:enumeration value="atPhraseEnd"/>
            <xsd:enumeration value="never"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="HarmonicAnalysisDistance">
        <xsd:annotation>
            <xsd:documentation>
                Determines the distance of the harmonic analysis (such as quarter notes).
            </xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="TimeUnit16">
            <xsd:enumeration value="16"/>
            <xsd:enumeration value="12"/>
            <xsd:enumeration value="8"/>
            <xsd:enumeration value="6"/>
            <xsd:enumeration value="4"/>
            <xsd:enumeration value="3"/>
            <xsd:enumeration value="2"/>
            <xsd:enumeration value="1"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="ChordScheme">
        <xsd:annotation>
            <xsd:documentation>Determines the style on which harmonic analysis is based</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="baroqueStyle"/>
            <xsd:enumeration value="romanticStyle"/>
            <xsd:enumeration value="classicalMusic"/>
            <xsd:enumeration value="jazz"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="VariationRhythm">
        <xsd:annotation>
            <xsd:documentation>Determines the duration of a variation motif (e.g. quarter notes).</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="TimeUnit16">
            <xsd:enumeration value="8"/>
            <xsd:enumeration value="6"/>
            <xsd:enumeration value="4"/>
            <xsd:enumeration value="3"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="AlternationPattern">
        <xsd:annotation>
            <xsd:documentation>
                Specifies the order in which voices are used create variations.
                "03 012" for example means that the first variation motif is to be in the first used voice, the second in the fourth voice, the next motif is not varied (Space), then again the first, second and third voice. This sequence will be repeated until the end of the variation.
                Works for up to ten voices.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="([0-9]| )*"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="EntranceInterval">
        <xsd:annotation>
            <xsd:documentation>Determines how many semitones away from the previous voice a voice shall enter</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:int">
            <xsd:minInclusive value="0"/>
            <xsd:maxInclusive value="11"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="MaxMeasures">
        <xsd:annotation>
            <xsd:documentation>Maximum duration in number of measures</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:int">
            <xsd:minInclusive value="0"/>
            <xsd:maxInclusive value="9999"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="SubjectForm">
        <xsd:annotation>
            <xsd:documentation>
                Determines a subject form.
                This can be the original form (rectus) or vertically/horizontally mirrored (inversus, retrograde, inverse retrograde).
            </xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="rectus"/>
            <xsd:enumeration value="inversus"/>
            <xsd:enumeration value="retrograde"/>
            <xsd:enumeration value="inverseRetrograde"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="TimeUnit16">
        <xsd:annotation>
            <xsd:documentation>Number of time units (duration) in 16th notes</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:int"/>
    </xsd:simpleType>

    <xsd:simpleType name="DoubleInterval">
        <xsd:annotation>
            <xsd:documentation>Interval for voice doubling in number of diatonic steps. e.g. 2 = third</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:int">
            <xsd:minInclusive value="1"/>
            <xsd:maxInclusive value="7"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="DisplayParallels">
        <xsd:annotation>
            <xsd:documentation>Determines which parallels are considered during score check</xsd:documentation>
        </xsd:annotation>
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="doNotShow"/>
            <xsd:enumeration value="onlyShowGenuineParallels"/>
            <xsd:enumeration value="showHiddenParallelsInOuterVoices"/>
            <xsd:enumeration value="showHiddenParallelsInAllVoices"/>
        </xsd:restriction>
    </xsd:simpleType>

</xsd:schema>
