All of these structures can nest straight-forwardly
<?xml version="1.0"?>
<element name="SONG" xmlns="http://relaxng.org/ns/structure/1.0">
<element name="TITLE">
<text/>
</element>
<oneOrMore>
<element name="COMPOSER">
<element name="NAME">
<element name="GIVEN">
<text/>
</element>
<element name="FAMILY">
<text/>
</element>
</element>
</element>
</oneOrMore>
<zeroOrMore>
<element name="PRODUCER">
<element name="NAME">
<element name="GIVEN">
<text/>
</element>
<element name="FAMILY">
<text/>
</element>
</element>
</element>
</zeroOrMore>
<optional>
<element name="PUBLISHER">
<text/>
</element>
</optional>
<optional>
<element name="LENGTH">
<text/>
</element>
</optional>
<optional>
<element name="YEAR">
<text/>
</element>
</optional>
<oneOrMore>
<element name="ARTIST">
<text/>
</element>
</oneOrMore>
</element>
element SONG {
element TITLE { text },
element COMPOSER {
element NAME {
element GIVEN { text },
element FAMILY { text }
}
}+,
element PRODUCER {
element NAME {
element GIVEN { text },
element FAMILY { text }
}
}*,
element PUBLISHER { text }?,
element LENGTH { text }?,
element YEAR { text }?,
element ARTIST { text }+
}