Атрибуты или элементы не могут быть «переопределены»; поэтому вам нужно убедиться, что ваш атрибут имеет простой тип, который определен глобально; является ли атрибут глобальным или нет, это не имеет значения. Атрибуты, в отличие от элементов, не могут быть помечены как абстрактные.
Я буквально пойму, что вы хотите изменить область значений для атрибута, связанного с элементом в basic.xsd, и ничего больше. Вот как бы я это сделал:
basic.xsd
<?xml version="1.0" encoding="utf-8" ?>
<!--XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com)-->
<xsd:schema targetNamespace="http://tempuri.org/XMLSchema.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/XMLSchema.xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="myElement">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="myAttribute" type="tmyAttribute"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="tmyAttribute">
<xsd:restriction base="xsd:string"/>
</xsd:simpleType>
</xsd:schema>
Допустимый образец XML:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<myElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" myAttribute="myAttribute1" xmlns="http://tempuri.org/XMLSchema.xsd">myElement1</myElement>
special.xsd
<?xml version="1.0" encoding="utf-8" ?>
<!--XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com)-->
<xsd:schema targetNamespace="http://tempuri.org/XMLSchema.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/XMLSchema.xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:redefine schemaLocation="basic.xsd">
<xsd:simpleType name="tmyAttribute">
<xsd:restriction base="tmyAttribute">
<xsd:enumeration value="a"/>
<xsd:enumeration value="b"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:redefine>
</xsd:schema>
При проверке в файле special.xsd приведенный выше XML теперь недействителен; измените значение атрибута myAttribute в примере XML на a, и оно будет работать.
Если у кого-то, использующего этот XSD, возникла проблема с переопределением, например, например, инструменты, которые связывают XSD с кодом, тогда я бы посмотрел на инструмент рефакторинга XML-схемы, который может взять ваш special.xsd и автоматически преобразовать его в эквивалентный формат без xsd: redefine. Что бы вы практически делали, это держали «интеллектуальную собственность», которая находится в special.xsd отдельно от basic.xsd; в то время как изменения в basic.xsd могут автоматически поддерживаться и быть видимыми для потребителей special.xsd без необходимости «перекодировать» XSD снова и снова ...