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.