Причина, по которой вы получаете ошибку проверки, состоит в том, что ваша схема на самом деле является двумя схемами. У вас есть два корневых элемента, A и B. Корневой элемент не может быть неявно использован как тип. Вам нужно сообщить XSD, что вы хотите использовать типы из другой схемы (используя импорт), или сделать эти типы локальными для схемы (используя определение complexType).
Пример : извлечь B в его собственную схему. Он не может использовать одно и то же пространство имен:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="myns2">
<xs:element name="B" type="xs:string" />
</xs:schema>
Затем вы можете ссылаться на B из вашего типа A, используя import:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="myns" xmlns:myns2="myns2">
<xs:import namespace="myns2" />
<xs:element name="A">
<xs:complexType>
<xs:sequence>
<xs:element ref="myns2:B" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Это позволяет вам иметь следующий действительный экземпляр XML:
<?xml version="1.0" encoding="utf-8" ?>
<A xmlns="myns">
<B xmlns="myns2">sdf</B>
</A>
Причина, по которой вы смогли проверить версии типов, не относящиеся к пространству имен, заключалась в том, что для того, чтобы быть действительным XML, необходимо быть верным две вещи:
- Хорошо сформированный XML
- Должен соответствовать любым ссылочным типам схем
В XML-файле, не принадлежащем пространству имен, по определению нет ссылок на какие-либо типы схем, поэтому документ является допустимым XML.