Das ist nicht so schwierig, du rufst den type einfach innerhalb der type deklarierung wieder auf. Allerdings hat dein xml beispiel konzeptionelle schwächen.
Deine xml sollte etwa so aussehen (reihenfolge von dir und file beachten!):
<tree xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="test.xsd">
<dir>
<dir>
<dir>
<file>12</file>
</dir>
<file>1</file>
<file>2</file>
</dir>
<file>17</file>
</dir>
<dir/>
<file>28</file>
</tree>
Ein einfaches Schema test.xsd zu deinem Beispiel koennte so aussehen:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="tree">
xs:complexType
xs:sequence
<xs:element name="dir" type="directoryType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="file" type="fileType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="directoryType">
xs:sequence
<xs:element name="dir" type="directoryType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="file" type="fileType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="fileType">
<xs:restriction base="xs:double"/>
</xs:simpleType>
</xs:schema>
Ein gute vorlage gibt es im cocoon framework, da gibt es ein gutes beispiel, wie inhaltsverzeichnisse in xml abgebildet werden sollten. Schaue mal und Dir generator beispiele an.
Gruss, Holge r