В вашей схеме XML есть ошибка, поскольку xs:element
не может иметь атрибуты name
и type
.
После исправления: из-за того, как вы определили пространства имен в XML Схема, допустимый документ должен находиться в пространстве имен https://www.w3schools.com
. Решение состоит в том, чтобы а) либо исправить документ XML, чтобы включить это пространство имен (см. Выше), либо б) изменить XSD, чтобы он не ожидал пространства имен.
исправление документа XML ( без изменений XML схема)
Это будет действительный документ:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="https://www.w3schools.com">
<module name="module1">
<parameter name="param1" value="1.234" type="float"/>
</module>
<module name="module2">
<parameter name="param1" value="Hello there!" type="string"/>
<parameter name="param2" value="3.1415" type="float"/>
</module>
</config>
XML Схема, которая не ожидает пространства имен (без изменений к XML документу
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified">
<xs:element name="config">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="module" maxOccurs="unbounded">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="parameter" maxOccurs="unbounded">
<xs:complexType mixed="true">
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="description" type="xs:string" />
<xs:attribute name="type" type="xs:string" use="required"/>
<xs:attribute name="value" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="description" type="xs:string" />
<xs:attribute name="version" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Другие улучшения вашей XML схемы
Ваша схема немного сложна для чтения из-за тяжелого вложения. Вот альтернативная версия, которая определяет именованные сложные типы. Кроме того, ваши типы «смешаны», тогда как, глядя на ваш XML документ, я не думаю, что они должны быть.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified">
<xs:element name="config" type="configType" />
<xs:complexType name="configType">
<xs:sequence>
<xs:element name="module" type="moduleType" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="moduleType">
<xs:sequence>
<xs:element name="parameter" type="parameterType" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="description" type="xs:string" />
<xs:attribute name="version" type="xs:string" />
</xs:complexType>
<xs:complexType name="parameterType">
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="description" type="xs:string" />
<xs:attribute name="type" type="xs:string" use="required"/>
<xs:attribute name="value" type="xs:string" use="required"/>
</xs:complexType>
</xs:schema>
Редактировать: вводить другое пользовательское пространство имен
XML Документ
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="https://www.myowndomain.com">
<module name="module1">
<parameter name="param1" value="1.234" type="float"/>
</module>
<module name="module2">
<parameter name="param1" value="Hello there!" type="string"/>
<parameter name="param2" value="3.1415" type="float"/>
</module>
</config>
XML Схема
В схеме вы удалите все ссылки на w3schools.com
и замените их своим URI пространства имен.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
targetNamespace="https://www.myowndomain.com" xmlns="https://www.myowndomain.com">
<xs:element name="config" type="configType" />
<xs:complexType name="configType">
<xs:sequence>
<xs:element name="module" type="moduleType" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="moduleType">
<xs:sequence>
<xs:element name="parameter" type="parameterType" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="description" type="xs:string" />
<xs:attribute name="version" type="xs:string" />
</xs:complexType>
<xs:complexType name="parameterType">
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="description" type="xs:string" />
<xs:attribute name="type" type="xs:string" use="required"/>
<xs:attribute name="value" type="xs:string" use="required"/>
</xs:complexType>
</xs:schema>