Используйте <xs:element ref="bla" />
для рекурсивного обращения к элементам.
Простой пример:
<xs:element name="recursive">
<xs:complexType>
<xs:sequence>
<xs:element ref="recursive" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
Позволяет написать это:
<recursive>
<recursive>
<recursive />
</recursive>
<recursive />
<recursive>
<recursive>
<recursive />
</recursive>
</recursive>
</recursive>
Использование атрибута 'ref' также очень помогает в улучшении читаемости вашего XSD. Вот как бы я написал ваше:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="SampleXml">
<xs:complexType>
<xs:sequence>
<xs:element ref="Items" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Items">
<xs:complexType>
<xs:sequence>
<xs:element ref="Item" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Item">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element ref="Items" minOccurs="0" />
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="type" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:schema>
Обратите внимание, что использование 'ref', даже когда оно не является строго необходимым (например, когда SampleXml ссылается на Items), делает XSD менее сложным и более читабельным.