Возможная проблема с пространством имен во время проверки XML

Следующий XML с XSD вызывает ошибку проверки:

Элемент 'choices' в пространстве имен 'http://www.test.it' имеет недопустимый дочерний элемент 'choice' в пространстве имен 'http://www.test.it'. Ожидается список возможных элементов: «выбор».

Это choices.xml:

<?xml version="1.0" encoding="utf-8"?>
<choices xmlns="http://www.test.it"
         xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance"
         xsd:schemaLocation="http://www.test.it ./schema/choices.xsd">
    <choice>yes</choice>
</choices>

Это schema/choices.xsd:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema  xmlns="http://www.test.it"
            xmlns:xs="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.test.it">

    <xs:simpleType name="yes_or_no_t">
        <xs:restriction base="xs:string">
            <xs:enumeration value="yes" />
            <xs:enumeration value="no" />
        </xs:restriction>
    </xs:simpleType>

    <xs:element name="choices" >
        <xs:complexType>
            <xs:all>
                <xs:element name="choice" type="yes_or_no_t" />
            </xs:all>
        </xs:complexType>
    </xs:element>

</xs:schema>

Я должен сохранить xmlns="http://www.test.it" в XML. XML и XSD предназначены для локальных файлов (не публикуются по сети). Я бы предпочел хранить XSD в подкаталоге schema.


person Eleno    schedule 06.04.2021    source источник


Ответы (1)


Было две проблемы ...

В поисках XSD

Используйте xsi:schemaLocation для XML с пространством имен, такого как ваш, а не xsi:noNamespaceSchemaLocation.

См. также:

Квалифицированные элементы

Добавьте elementFormDefault="qualified" в элемент схемы вашего XSD.

См. также:

person kjhughes    schedule 06.04.2021