XML schémata většinou nabízejí několik možností, jak něco definovat. U elementů je asi nejjednodušší případ, když element nemůže obsahovat již žádné další elementy, pouze nějakou konkrétní hodnotu. Definice elementu nazev, který může obsahovat textový řetězec, může vypadat třeba takto:
<element name="nazev" type="string"/>
Pokud má element obsahovat ještě nějaké další vnořené elementy, uvedou se jako součást definice typu elementu.
<element name="odberatel"> <type> <element name="nazev" type="string"/> <element name="adresa" type="string"/> <element name="ico" type="string"/> <element name="dic" type="string"/> </type> </element>
Pokud by elementy nazev, adresa atd. byly nějakého složitějšího typu a obsahovaly by další elementy, použil by se v definici elementu pouze odkaz na jejich podrobnou definici.
<element name="odberatel"> <type> <element ref="nazev"/> <element ref="adresa"/> <element ref="ico"/> <element ref="dic"/> </type> </element> <element name="nazev" type="string"/> <element name="adresa" type="string"/> <element name="ico" type="string"/> <element name="dic" type="string"/>
Narozdíl od DTD je ve schématech velice jednoduché určit počet opakování nějakého elementu. Slouží k tomu atributy minOccurs a maxOccurs, který určují minimální a maximální počet výskytů. Můžeme v nich použít libovolné hodnoty, u maxOccurs můžeme navíc uvést i hodnotu *, která zastupuje nekonečno.
<element name="faktura"> <type> <element ref="odberatel"/> <element ref="dodavatel"/> <element ref="polozka" minOccurs="1" maxOccurs="*"/> </type> </element>
Samozřejmě, že můžeme vytvářet i složitější modely obsahu. Pokud bychom chtěli vytvořit element para se smíšeným obsahem, použijeme přídavný atribut u definice typu elementu:
<element name="para"> <type content="mixed"> <element name="em" type="string"/> </type> </element>
Obvykle se mají elementy v dokumentu vyskytovat v pořadí, které specifikujeme ve schématu. Někdy se může hodit, aby se vyskytly v libovolném pořadí. Třeba u jména je nám jedno, zda je nejprve uvedeno křestní jméno nebo příjmení. Tuto možnost nám již DTD v XML nenabízejí.
<element name="jméno"> <type> <group order="all"> <element name="křestní" type="string"/> <element name="příjmení" type="string"/> </group> </type> </element>
Element group může v atributu order obsahovat ještě hodnoty seq a choice. První z nich říká, že elementy se musí v dokumentu vyskytovat ve stejném pořadí jako ve schématu. Druhá varianta pak říká, že v dokumentu se smí vyskytnout jen jeden z elementů definovaných ve skupině. Samozřejmě, že skupiny lze podle potřeby do sebe vzájemně zanořovat.