Тип элемента «tag» должен завершаться соответствующим конечным тегом «»

#xml #xsd #xsd-validation #xml-validation

#xml #xsd #xsd-проверка #xml-проверка

Вопрос:

Приведенный ниже код содержит ошибку.

Тип элемента "xs:sequence" должен завершаться соответствующим конечным тегом "" , в 37:5, т.Е. Строка 35, столбец 5.

Я думаю, что это относится к этому:

  </xs:element>
  

но я не могу понять, что не так.

 <xs:schema xmlns:xs="http://www.joe.bloggs.org/2020/XMLSchema" >

 

<xs:element name="Employee_Data" type="EmployeeDataType" />

<xs:complexType name="EmployeeDataType">

  <xs:sequence>

   <xs:element ref="Employee" minOccurs="0" maxOccurs="unbounded" />

  </xs:sequence>

</xs:complexType>

 

<xs:element name="Employee" type="EmployeeType" />

<xs:complexType name="EmployeeType">

  <xs:sequence >

   <xs:element ref="Name" />

   <xs:element ref="Age" />

   <xs:simpleType>
   <xs:restriction base="xs:integer">
   <xs:minInclusive value="0"/>
   <xs:maxInclusive value="120"/>
   </xs:restriction>
   </xs:simpleType>
   </xs:element>

  

   <xs:element ref="Start Date" />

   <xs:element ref="Annual Income” />

         <xs:complexType>

            <xs:simpleContent>

                <xs:extension base="xs:double">

                    <xs:attribute name="currency">

                        <xs:simpleType>

                            <xs:restriction base="xs:string">

                                <xs:enumeration value="Pounds" />

                                <xs:enumeration value="Euros" />

                                <xs:enumeration value="USdollars" />

                            </xs:restriction>

                        </xs:simpleType>

                    </xs:attribute>

                </xs:extension>

            </xs:simpleContent>

        </xs:complexType>

    </xs:element>

   <xs:element ref="Department" />

   <xs:simpleType>
   <xs:restriction base="xs:string">
   <xs:enumeration value="Sales"/>
   <xs:enumeration value="Marketing"/>
   <xs:enumeration value="IT"/>
   </xs:restriction>
   </xs:simpleType>
   </xs:element>

 

<xs:element name="Name" type="xs:string" />

<xs:element name="Start Date" type="xs:date" />

 

</xs:schema>
  

Комментарии:

1. Получен ли ответ на ваш вопрос? Если да, пожалуйста, примите ответ. Если нет, пожалуйста, задайте дополнительный вопрос для уточнения. Спасибо.

Ответ №1:

В общем, ошибка,

Тип элемента "tag" должен завершаться соответствующим конечным тегом "</tag>"

это базовая ошибка корректности XML ниже уровня XSD. Это происходит всякий раз, когда анализатор XML сталкивается с закрытием, tag для которого он ранее не сталкивался с соответствующим открытием tag . (В вашем случае, tag = xs:sequence , и сообщение об ошибке, похоже, потеряло закрытие tag , вероятно, из-за ошибки копирования и вставки разметки по пути.)

Для разрешения отсканируйте открывающий тег, который, по-видимому, должен быть сопряжен с закрывающим тегом-нарушителем. Разрешение может включать добавление, перемещение или исправление начального тега или удаление, перемещение или исправление конечного тега. В вашем случае предполагаемый начальный тег должен быть исправлен, чтобы не быть самозакрывающимся.

Изменить

   <xs:element ref="Age" />
  

Для

   <xs:element ref="Age" >
  

Вы обнаружите, что существует множество дополнительных проблем, требующих решения, включая дополнительные экземпляры вышеупомянутой проблемы далее по документу, использование, где " требуется, и использование неправильного пространства имен для элементов XSD, использование пробелов в именах элементов, использование, xs:element/@ref где xs:element/@name следует использовать вместо этого, и необходимость закрытия дополнительных элементов XSD.

Полностью исправленный XSD

Для максимального обучения я настоятельно рекомендую вам самостоятельно решить вышеуказанные проблемы. Если вы обнаружите, что зашли в очередной тупик, вот полностью исправленный XSD для консультации:

 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >
  <xs:element name="Employee_Data" type="EmployeeDataType" />
  <xs:complexType name="EmployeeDataType">
    <xs:sequence>
      <xs:element ref="Employee" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="Employee" type="EmployeeType" />
  <xs:complexType name="EmployeeType">
    <xs:sequence >
      <xs:element name="Name" />
      <xs:element name="Age" >
        <xs:simpleType>
          <xs:restriction base="xs:integer">
            <xs:minInclusive value="0"/>
            <xs:maxInclusive value="120"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="StartDate" />
      <xs:element name="AnnualIncome">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="xs:double">
              <xs:attribute name="currency">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:enumeration value="Pounds" />
                    <xs:enumeration value="Euros" />
                    <xs:enumeration value="USdollars" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:attribute>
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
      <xs:element name="Department">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="Sales"/>
            <xs:enumeration value="Marketing"/>
            <xs:enumeration value="IT"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:schema>