#xml #xsd
#xml #xsd
Вопрос:
У меня есть следующий файл XSD. Он показывает мне сообщение об ошибке
За типом элемента «xs:schema» должны следовать либо спецификации атрибутов, «>» или «/>»
Я уже проверил все открывающие и закрывающие теги. Не удалось выяснить проблему. Я взял этот код отсюда. В чем проблема с <xs:schema>
тегом?
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ms="http://codereq.com/mathservice/schemas" elementFormDefault="qualified"
targetNamespace="http://codereq.com/mathservice/schemas">
<element name="MathServiceRequest">
<complexType>
<sequence>
<element name="Number" type="xs:integer"/>
</sequence>
</complexType>
</element>
<element name="MathServiceResponse">
<complexType>
<sequence>
<element name="Number" type="xs:integer" />
<element name="isEven" type="xs:boolean" />
</sequence>
</complexType>
</element>
</xs:schema>
Комментарии:
1. Извините, что задал такой глупый вопрос. Я просто скопировал код в новый файл xsd, и он сработал. Странная это была проблема, действительно!!
2. Пожалуйста, обратите внимание, что представленный вами XSD по-прежнему неверен. Подробности см. В прекрасном ответе @helderdarocha. Утверждение, что вы «просто скопировали код в новый файл xsd, и он сработал», скрывает реальные проблемы.
Ответ №1:
Дочерние элементы в вашем XSD не принадлежат правильному пространству имен. Вы должны префиксить их тем же префиксом, который вы использовали для <xs:schema>
элемента в xmlns:xs="http://www.w3.org/2001/XMLSchema"
:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ms="http://codereq.com/mathservice/schemas"
elementFormDefault="qualified"
targetNamespace="http://codereq.com/mathservice/schemas">
<xs:element name="MathServiceRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="Number" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="MathServiceResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Number" type="xs:integer" />
<xs:element name="isEven" type="xs:boolean" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Это странное сообщение об ошибке, возможно, связано с тем, что ваши типы были с префиксом и допустимыми типами XSD, но элементы не были. Обычно проверяющий выдает другое сообщение, например:
Здесь не может появиться элемент Element: ожидается один из (element, attribute, complexType, …)
что все еще кажется запутанным (поскольку отсутствует упоминание отсутствующего префикса пространства имен), но менее неясным.
Примечание: на самом деле в схеме могут быть элементы без префиксов, если пространство имен XSD является пространством имен по умолчанию с использованием xmlns="http://www.w3.org/2001/XMLSchema"
:
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:ms="http://codereq.com/mathservice/schemas"
elementFormDefault="qualified"
targetNamespace="http://codereq.com/mathservice/schemas">
<element name="MathServiceRequest">
<complexType>
<sequence>
<element name="Number" type="xs:integer"/>
</sequence>
</complexType>
</element>
<element name="MathServiceResponse">
<complexType>
<sequence>
<element name="Number" type="xs:integer" />
<element name="isEven" type="xs:boolean" />
</sequence>
</complexType>
</element>
</schema>
В вашем случае это было бы нормально, потому что целевое пространство имен xmlns:ms="http://codereq.com/mathservice/schemas"
сопоставляется с префиксом (вместо использования пространства имен по умолчанию, что обычно).