I want to add a attribute with restriction, to an element that has a sequence of child nodes. Element 'car' has a sequence for its child nodes. And attribute 'condition' for element car, has a enumeration restriction. I am not sure where to put the created complex type 'atr' in the 'car' element.
This is what I have come up so far:
<test>
<car condition = "new">
<brand>audi</brand>
<engine>diesel</engine>
</car>
</test>
XSD:
<xs:element name = "car">
<xs:complexType>
<xs:sequence>
<xs:element name = "brand" type = "xs:string"/>
<xs:element name = "engine" type = "xs:string"/>
</xs:sequence>
<xs:attribute name = "condition" type = "atr"/>
</xs:complexType>
</xs:element>
<xs:complexType name = "atr">
<xs:simpleContent>
<xs:extension base = "xs:string">
<xs:attribute name = "condition">
<xs:simpleType>
<xs:restriction base = "xs:string">
<xs:enumeration value = "new"/>
<xs:enumeration value = "used"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name = "test">
<xs:complexType>
<xs:sequence>
<xs:element ref = "car" maxOccurs = "unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
An attribute has a simple type always so just use
<xs:element name = "car">
<xs:complexType>
<xs:sequence>
<xs:element name = "brand" type = "xs:string"/>
<xs:element name = "engine" type = "xs:string"/>
</xs:sequence>
<xs:attribute name = "condition" type = "atr"/>
</xs:complexType>
</xs:element>
<xs:simpleType name = "atr">
<xs:restriction base = "xs:string">
<xs:enumeration value = "new"/>
<xs:enumeration value = "used"/>
</xs:restriction>
</xs:simpleType>