views:

809

answers:

1

I have this in my xsd:

<xsd:simpleType name="line_action">
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="add"/>
        <xsd:enumeration value="delete"/>
        <xsd:enumeration value="remove"/>
        <xsd:enumeration value="suspend"/>
        <xsd:enumeration value="restore"/>
        <xsd:enumeration value="update"/>
    </xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="action_enum_5">
    <xsd:restriction base="tns:line_action">
        <xsd:enumeration value="add"/>
        <xsd:enumeration value="remove"/>
    </xsd:restriction>
</xsd:simpleType>


    <xsd:element name="call_forward_dont_answer">
        <xsd:complexType>
            <xsd:complexContent>
                <xsd:restriction base="tns:basic_option">
                    <xsd:sequence>
                        <xsd:element name="paths" type="tns:path_type"/>
                        <xsd:element name="number_of_rings" type="tns:number_of_rings_type"/>
                        <xsd:element name="ring_to_number" type="tns:telephone_number_type"/>
                    </xsd:sequence>
                    <xsd:attribute name="action" type="tns:action_enum_5"/>
                </xsd:restriction>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:element>

So for call_forward_dont_answer, I want to extend basic option and a few more elements/fields, but then the action should only be add and Remove. If I do extension then I can't change the attribute type, but then if I do restriction then I can't add new elements/fields?

What should I do?

+1  A: 

Well I fixed it myself. By making a restriction and then extending that restriction.

<xsd:simpleType name="line_action">
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="add"/>
        <xsd:enumeration value="delete"/>
        <xsd:enumeration value="remove"/>
        <xsd:enumeration value="suspend"/>
        <xsd:enumeration value="restore"/>
        <xsd:enumeration value="update"/>
    </xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="super_option">
    <xsd:attribute name="action" type="tns:line_action"/>
</xsd:complexType>

        <xsd:element name="call_forward_dont_answer">
            <xsd:complexType>
                <xsd:complexContent>
                    <xsd:extension base="tns:updatable_option">
                        <xsd:sequence>
                            <xsd:element name="paths" type="tns:path_type"/>
                            <xsd:element name="number_of_rings" type="tns:number_of_rings_type"/>
                            <xsd:element name="ring_to_number" type="tns:telephone_number_type"/>
                        </xsd:sequence>
                    </xsd:extension>
                </xsd:complexContent>
            </xsd:complexType>
        </xsd:element>


<xsd:complexType name="basic_option">
    <xsd:complexContent>
        <xsd:restriction base="tns:super_option">
            <xsd:attribute name="action" type="tns:action_enum_1"/>
        </xsd:restriction>
    </xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="updatable_option">
    <xsd:complexContent>
        <xsd:restriction base="tns:super_option">
            <xsd:attribute name="action" type="tns:action_enum_5"/>
        </xsd:restriction>
    </xsd:complexContent>
</xsd:complexType>
arinte