It's my first time making an XML schema so I wanted to make sure I'm doing it right. Critiques and comments are more then welcome.
Code:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="[URL unfurl="true"]http://www.w3.org/2001/XMLSchema"[/URL] targetNamespace="[URL unfurl="true"]http://www.w3schools.com"[/URL] xmlns="[URL unfurl="true"]http://www.w3schools.com"[/URL] elementFormDefault="qualified">
<xs:complexType name="genreList">
<xs:restriction base="xs:string">
<xs:pattern value="a|b"/> <!--make comprehensive-->
</xs:restriction>
</xs:complexType>
<xs:complexType name="languageList">
<xs:restriction base="xs:string">
<xs:pattern value="a|b"/> <!--make comprehensive-->
</xs:restriction>
</xs:complexType>
<xs:element name="name"> <!--need a name for my new format-->
<xs:complexType>
<sequence>
<xs:element name="album" maxOccurs="1">
<xs:complexType>
<xs:element name="metadata">
<xs:complexType>
<xs:sequence>
<xs:element name="content"> <!--needs better name-->
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="genre" type="genreList"/>
<xs:element name="year" type="xs:integer"/>
<xs:element name="bpm" type="xs:integer"/>
<xs:element name="length" type="xs:time"/>
<xs:element name="language" type="languageList"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="involvedPersons">
<xs:complexType>
<xs:sequence>
<xs:element name="artist" type="xs:string"/>
<xs:element name="accompaniment" type="xs:string"/>
<xs:element name="remix" type="xs:string"/>
<xs:element name="originalArtist" type="xs:string"/>
<xs:element name="lyricist" type="xs:string"/>
<xs:element name="composer" type="xs:string"/>
<xs:element name="conductor" type="xs:string"/>
<xs:element name="musicianList"/>
<xs:complexType>
<xs:element name="person">
<xs:complexType>
<xs:element name="name" type="xs:string" maxOccurs="1"/>
<xs:element name="instrument" type="xs:string" maxOccurs="unbounded"/>
</xs:complexType>
</xs:element>
</xs:complexType>
<xs:element name="involvedList" type="xs:string"/>
<xs:complexType>
<xs:element name="person">
<xs:complexType>
<xs:element name="name" type="xs:string" maxOccurs="1"/>
<xs:element name="role" type="xs:string" maxOccurs="unbounded"/>
</xs:complexType>
</xs:element>
</xs:complexType>
<xs:element name="encodedBy" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="pictures" minOccurs="0"> <!--force PNG?-->
<xs:complexType>
<xs:sequence>
<xs:element name="frontCover" type="base64Binary" minOccurs="0"/>
<xs:element name="backCover" type="base64Binary" minOccurs="0"/>
<xs:element name="fileIcon" type="base64Binary" minOccurs="0"/>
<xs:element name="leafletPage" type="base64Binary" minOccurs="0"/>
<xs:element name="media" type="base64Binary" minOccurs="0"/>
<xs:element name="leadArtist" type="base64Binary" minOccurs="0"/>
<xs:element name="artist" type="base64Binary" minOccurs="0"/>
<xs:element name="conductor" type="base64Binary" minOccurs="0"/>
<xs:element name="accompaniment" type="base64Binary" minOccurs="0"/>
<xs:element name="composer" type="base64Binary" minOccurs="0"/>
<xs:element name="lyricist" type="base64Binary" minOccurs="0"/>
<xs:element name="recordingLocation" type="base64Binary" minOccurs="0"/>
<xs:element name="recording" type="base64Binary" minOccurs="0"/>
<xs:element name="performance" type="base64Binary" minOccurs="0"/>
<xs:element name="illustration" type="base64Binary" minOccurs="0"/>
<xs:element name="artistLogotype" type="base64Binary" minOccurs="0"/>
<xs:element name="publisherLogotype" type="base64Binary" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:complexType>
</xs:element>
<xs:element name="track" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="number" type="xs:integer"/>
<xs:element name="title" type="xs:string" />
<xs:element name="file">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="0"/>
<xs:element name="start" type="xs:string" minOccurs="0"/> <!--MSF-->
<xs:element name="break" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <!--MSF-->
<xs:element name="end" type="xs:string" minOccurs="0"/> <!--MSF-->
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</sequence>
</xs:complexType>
</xs:element>
</xs:schema>