Я написал очень простой XML:
<?xml version="1.0" encoding="utf-8"?>
<something attribute1="21" attribute2="23">
<newelement code="code1"/>
</something>
И я хотел написать XSD для проверки этого XML, который отлично работает:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="something">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="newelement" nillable="true">
<xs:complexType>
<xs:attribute type="xs:string" name="code"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="attribute1" type="xs:int"/>
<xs:attribute name="attribute2" type="xs:int"/>
</xs:complexType>
</xs:element>
</xs:schema>
Но потом я хотел написатьтот же XSD, но с разделенными комплексными типами , потому что, например, что если мне понадобится та же структура, что и у newelement
сейчас.Поэтому я реорганизовал свой XSD следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="my-common-types"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="my-common-types">
<xs:element name="something">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="newelement" nillable="true" type="tns:ElementWithCode"/>
</xs:sequence>
<xs:attribute name="attribute1" type="xs:int"/>
<xs:attribute name="attribute2" type="xs:int"/>
</xs:complexType>
</xs:element>
<xs:complexType name="ElementWithCode">
<xs:attribute name="code" type="xs:string"/>
</xs:complexType>
</xs:schema>
И затем я всегда получаю эту ошибку:
ОШИБКА: Элемент 'что-то': для проверки не найдено подходящего глобального объявленияroot.
Итак, существует проблема с использованием атрибута targetNamespace
на схеме, но я не понимаю, как я могу заставить это работать.Пожалуйста, дайте мне несколько советов.Спасибо!