XML не проверяется на соответствие определенному XSD
XML (упрощенный):
<?xml version="1.0" encoding="UTF-8"?>
<mx:XMLimport xmlns:mx="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Leverancier>nn</Leverancier>
<Bestandsversie>1.1.0.0</Bestandsversie>
</mx:XMLimport>
XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xsd:element name="XMLimport">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Leverancier" type="xsd:string" minOccurs="1"/>
<xsd:element name="Bestandsversie" type="xsd:string" minOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Если я удалю mx:
Префикс из корневого элемента XML это проверяет просто отлично. Я заблудился в пространствах имен, и я искал в Интернете уже несколько часов. Я не могу изменить XML, поэтому XSD необходимо адаптировать, чтобы mx:
префикс. Валидатор выдает эту ошибку:
ERROR: Element '{http://www.w3.org/2001/XMLSchema}XMLimport':
No matching global declaration available for the validation root.
1 ответ
Я предполагаю, что ваш вопрос заключается в том, как XSD должен выглядеть в соответствии с вашим XML. Это исправленный XSD:
<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema targetNamespace="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="XMLimport">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Leverancier" type="xsd:string"/>
<xsd:element name="Bestandsversie" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Ваш XSD не определяет targetNamespace
приписывать. Следовательно, ваш XMLimport должен отображаться без пространства имен в экземплярах документов; Вот почему, когда вы удаляете пространство имен из вашего XMLimport в XML-документе, оно становится действительным.
Если вы добавите targetNamespace="http://www.w3.org/2001/XMLSchema"
теперь у вас будет XSD, который проверит ваш XML; в общем случае значение targetNamespace должно соответствовать пространству имен вашего элемента документа (XSD-хамелеоны - это особый случай).
Другая вещь в игре здесь elementFormDefault
который по умолчанию unqualified
, Этот параметр является тем, что делает внутренние элементы Leverancier
а также Bestandsversie
без пространства имен.
Следует также отметить, что, хотя пользовательский контент, ориентированный на http://www.w3.org/2001/XMLSchema
пространство имен, в спецификации XSD 1.0 нет положения, которое бы явно запрещало пользователям ориентироваться на это пространство имен. Это не похоже на другое пространство имен, которое вы видите в своем примере XML, http://www.w3.org/2001/XMLSchema-instance
: явно запрещено указывать это пространство имен в определенных пользователем XSD.
Этот пост тоже может помочь.