How do you nest complexType elements in an xsd?

Ian Campbell picture Ian Campbell · Jun 22, 2012 · Viewed 21.2k times · Source

I have an xml and xsd file that both validate correctly (tested at http://xsdvalidation.utilities-online.info/).

However, the xml does not validate against the xsd. I think this is because I am incorrectly nesting complexType elements in the xsd, as compared to the xml. The outer element of people seems to be causing the problem...

Here is the xml:

<?xml version = "1.0"?>

<people>
    <person>
        <firstname>Joe</firstname>
        <lastname>Schmoe</lastname>
    </person>

    <person>
        <firstname>Cletus</firstname>
        <lastname>Jenkins</lastname>
    </person>
</people>

...and here is the xsd:

<?xml version = "1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name = "people">
        <xs:complexType>
            <xs:sequence>

                <xs:element name = "person">
                    <xs:complexType>
                        <xs:sequence>

                            <xs:element name = "firstname" type = "xs:string" />
                            <xs:element name = "lastname" type = "xs:string" />

                        </xs:sequence>
                    </xs:complexType>
                </xs:element>

            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>

Answer

John Watts picture John Watts · Jun 22, 2012

Add maxOccurs="unbounded" to the element named "person". It is a sequence of one or more person elements.

Note: write maxOccurs in lowerCamelCase not in lower case