Say that I wanted to let the borrower borrow not just books, but also a magazine. To do that, I can create a new group named booksAndMagazine . A group collects elements together, and you can name groups. You can then include a group in other elements using the <xsd:group> element and referring to the group by name: <xsd:complexType name="transactionType"> <xsd:sequence> <xsd:element name="Lender" type="address"/> <xsd:element name="Borrower" type="address"/> <xsd:element ref="note" minOccurs="0"/> <xsd:choice> <xsd:element name="books" type="books"/> <xsd:element ref="book"/> <xsd:group ref="booksAndMagazine"/> <xsd:choice> </xsd:sequence> <xsd:attribute name="borrowDate" type="xsd:date"/> </xsd:complexType> To create the group named booksAndMagazine , I use the <xsd:group> element; to ensure that the elements inside that group appear in a specific sequence, I use the <xsd:sequence> element this way: <xsd:complexType name="transactionType"> <xsd:sequence> <xsd:element name="Lender" type="address"/> <xsd:element name="Borrower" type="address"/> <xsd:element ref="note" minOccurs="0"/> <xsd:choice> <xsd:element name="books" type="books"/> <xsd:element ref="book"/> <xsd:group ref="booksAndMagazine"/> <xsd:choice> </xsd:sequence> <xsd:attribute name="borrowDate" type="xsd:date"/> </xsd:complexType> <xsd:group name="booksAndMagazine"> <xsd:sequence> <xsd:element ref="books"/> <xsd:element ref="magazine"/> </xsd:sequence> </xsd:group> |