attribute based on simpleType
File: Data.xml
<?xml version="1.0" encoding="UTF-8"?>
<data>
<firstelement position="1">
<level1 children="0">
This is level 1 of the nested elements
</level1>
</firstelement>
<secondelement position="2">
<level1 children="1">
<level2>This is level 2 of the nested elements</level2>
</level1>
</secondelement>
</data>
File: Schema.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="firstelement">
<xs:complexType>
<xs:sequence>
<xs:element ref="level1" />
</xs:sequence>
<xs:attribute name="position" type="xs:boolean"
use="required" />
</xs:complexType>
</xs:element>
<xs:element name="level1">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="level2" />
</xs:choice>
<xs:attribute name="children" use="required">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="0" />
<xs:enumeration value="1" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="level2" type="xs:string" />
<xs:element name="data">
<xs:complexType>
<xs:sequence>
<xs:element ref="firstelement" />
<xs:element ref="secondelement" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="secondelement">
<xs:complexType>
<xs:sequence>
<xs:element ref="level1" />
</xs:sequence>
<xs:attribute name="position" type="xs:byte" use="required" />
</xs:complexType>
</xs:element>
</xs:schema>
Related examples in the same category