Любой, кто читает мой вопрос, может захотеть прочитать также эту ветку ( Дэмиен ). Кажется, мой ответ не совсем верен: парсеры / валидаторы не обрабатывают смешанные объявления атрибутов для базовых / производных элементов одинаково.
Относительно расширенных сложных типов, подраздел 1.4.3.2.2.1 раздела 3.4.6 в часть 1 спецификации XML-схемы W3C гласит, что
Оба [производные и базовые] {типы содержимого} должны быть смешаны или оба должны быть только для элементов.
Так что да, он наследуется (или, скорее, вы не можете перезаписать его - то же самое в конце).
По сути, вы описали желаемое (и, насколько мне известно) наиболее логичное поведение.
Я создал простую схему для запуска небольшого теста с помощью инструментов Eclipse XML.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="c">
<xs:complexType>
<xs:complexContent mixed="false">
<xs:extension base="a"/>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:complexType name="a" mixed="true">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="b"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Приведенная выше схема действительна в том смысле, что ни Eclipse, ни «официальный» валидатор XML-схемы W3C не замечают никаких проблем с ней.
Следующий XML проходит проверку по вышеупомянутой схеме.
<?xml version="1.0" encoding="UTF-8"?>
<c xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="test.xsd">
x
<b/>
y
</c>
Таким образом, вы не можете перезаписать смешанность сложного базового типа. Чтобы поддержать это утверждение далее, попробуйте поменять местами базовые и смешанные типы. В этом случае XML не проходит проверку, потому что производный тип не будет смешан, так как он (еще раз) не может перезаписать смешанность базы.
Вы также сказали, что
Некоторые парсеры разрешают PCDATA непосредственно в элементе, в то время как другие не
Не помешает уточнить, о каких парсерах вы говорите. Анализатор good не должен завершаться ошибкой при обнаружении смешанного содержимого. Проверяющий синтаксический анализатор при наличии правильной схемы завершится ошибкой, если встретится со смешанным содержимым, когда схема не позволяет этого.