xsd: Cómo extender un tipo con una lista desordenada de elementos

Esto es parte de mi esquema xml

<xs:complexType name="Friend">
    <xs:all>
        <xs:element name="name" type="xs:string" />
        <xs:element name="phone" type="xs:string" />
        <xs:element name="address" type="xs:string" />
    </xs:all>
</xs:complexType>

<xs:complexType name="Coworker">
    <xs:all>
        <xs:element name="name" type="xs:string" />
        <xs:element name="phone" type="xs:string" />
        <xs:element name="office" type="xs:string" />
    </xs:all>
</xs:complexType>

Para una mejor mantenibilidad, me gustaría tener los atributos compartidos en un supertipo (abstracto) o algo así. Pero más importante, quiero que todos los elementos estén desordenados y también sean opcionales.

¿Es esto posible y cuál es la mejor manera de hacerlo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta