За типом элемента «xs:schema» должны следовать либо спецификации атрибутов, «>» или «/>» — сбой проверки дизайна схемы XML

#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" сопоставляется с префиксом (вместо использования пространства имен по умолчанию, что обычно).