#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>