<!ENTITY % boolean "(false | true)">
<!ELEMENT MIDIDeviceTypes (Author, MIDIDeviceType+)>
<!ELEMENT Author (#PCDATA)>
<!ELEMENT MIDIDeviceType (InquiryResponse?, DeviceID?,
MIDIPortGroup*,
Receives?, Transmits?)>
<!ATTLIST MIDIDeviceType
Manufacturer CDATA #REQUIRED
Model CDATA #REQUIRED
Image CDATA #IMPLIED
SupportsGeneralMIDI %boolean; #IMPLIED
SupportsMMC %boolean; #IMPLIED
CanRoute %boolean; #IMPLIED
IsSampler %boolean; #IMPLIED
IsDrumMachine %boolean; #IMPLIED
IsMixer %boolean; #IMPLIED
IsEffectUnit %boolean; #IMPLIED>
<!ELEMENT InquiryResponse EMPTY>
<!ATTLIST InquiryResponse
Manufacturer CDATA #REQUIRED
Family CDATA #REQUIRED
Member CDATA #REQUIRED>
<!ELEMENT DeviceID EMPTY>
<!ATTLIST DeviceID
Min NMTOKEN #REQUIRED
Max NMTOKEN #REQUIRED
Default NMTOKEN #REQUIRED
Base NMTOKEN #REQUIRED>
<!ELEMENT MIDIPortGroup (MIDIIn, MIDIOut)+>
<!ATTLIST MIDIPortGroup
Name CDATA "">
<!ELEMENT MIDIIn EMPTY>
<!ATTLIST MIDIIn
Name CDATA ""
NumberOfThrus NMTOKEN "0">
<!ELEMENT MIDIOut EMPTY>
<!ATTLIST MIDIOut
Name CDATA "">
<!ELEMENT Receives EMPTY>
<!ATTLIST Receives
MaxChannels NMTOKEN "16"
MTC %boolean; #IMPLIED
Clock %boolean; #IMPLIED
Notes %boolean; #IMPLIED
ProgramChanges %boolean; #IMPLIED
BankSelectMSB %boolean; #IMPLIED
BankSelectLSB %boolean; #IMPLIED
PanDisruptsStereo %boolean; #IMPLIED>
<!ELEMENT Transmits EMPTY>
<!ATTLIST Transmits
MaxChannels NMTOKEN "16"
MTC %boolean; #IMPLIED
Clock %boolean; #IMPLIED
Notes %boolean; #IMPLIED
ProgramChanges %boolean; #IMPLIED
BankSelectMSB %boolean; #IMPLIED
BankSelectLSB %boolean; #IMPLIED>