Solución:
Para agregar atributos, debe derivar por extensión, para agregar facetas, debe derivar por restricción. Por lo tanto, esto debe realizarse en dos pasos para el contenido secundario del elemento. El atributo se puede definir en línea:
<xsd:simpleType name="timeValueType">
<xsd:restriction base="xsd:token">
<xsd:pattern value="d{2}:d{2}"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="timeType">
<xsd:simpleContent>
<xsd:extension base="timeValueType">
<xsd:attribute name="format">
<xsd:simpleType>
<xsd:restriction base="xsd:token">
<xsd:enumeration value="seconds"/>
<xsd:enumeration value="minutes"/>
<xsd:enumeration value="hours"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
Me gustaría proponer mi ejemplo con una explicación más detallada de lo que realmente se requiere para mezclar el tipo heredado con restricciones al agregar un atributo.
este es el lugar donde define su tipo heredado (en mi caso, es xs: string basado en uno con una restricción de longitud de campo de 1024 aplicada). no puede tener esto como un tipo estándar para su campo, ya que también agregará un “atributo” a su campo.
<xs:simpleType name="string1024Type">
<xs:restriction base="xs:string">
<xs:maxLength value="1024"/>
</xs:restriction>
</xs:simpleType>
este es el lugar donde se define su elemento en función de su tipo privado (en mi caso es “string1024Type”) y el atributo necesario agregado:
<xs:element maxOccurs="unbounded" name="event">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="string1024Type">
<xs:attribute default="list" name="node" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
ambos bloques pueden estar en lugares completamente separados de su esquema. el punto importante es seguir una vez más: no se puede mezclar herencia y atribución en la misma definición de elemento.