Не удается проверить XSD для XML с пространством имен - PullRequest
0 голосов
/ 14 марта 2019

Я не могу проверить XML с помощью приведенного ниже XSD,

<myTest>
  <standardHeader xmlns="http://tow.gow.ho.com/2009/08/StandardHeader/">
    <data>
      <LEVELDATA>D2D</LEVELDATA>
    </data>
  </standardHeader>
</myTest>

Данные XSD

<?xml version="1.0" encoding="UTF-8"?>  
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="myTest">
        <xsd:complexType mixed="true">
            <xsd:sequence>
                <xsd:element name="standardHeader"   minOccurs="0">
                    <xsd:complexType mixed="true">
                        <xsd:sequence>
                            <xsd:element name="data" minOccurs="0">
                                <xsd:complexType mixed="true">
                                    <xsd:sequence>
                                        <xsd:element name="LEVELDATA" minOccurs="0" type="xsd:normalizedString"/>
                                    </xsd:sequence>
                                </xsd:complexType>
                            </xsd:element>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

Я получаю приведенную ниже ошибку при проверке этого XSD с XML,

cvc-complex-type.2.4.a: Обнаружено недопустимое содержимое, начиная с элемента 'standardHeader'. Ожидается один из '{standardHeader}'.

Как я могу предоставить этот standardHeader тег:

targetNamespace="http://tow.gow.ho.com/2009/08/StandardHeader/" 

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Одним из возможных решений этой проблемы является разбиение XSD на два файла:
Один для первого отсутствующего пространства имен (a.xsd) и один для второго пространства имен (b.xsd), которое объявлено targetNamespace=... в b.xsd, тогда как a.xsd не нуждается в таком объявлении. Второй файл с собственным пространством имен импортируется с помощью инструкции <xsd:import namespace="...". Это пространство имен также должно быть включено в объявление пространства имен элемента xsd:schema (здесь xmlns:std).

То есть a.xsd это:

<?xml version="1.0" encoding="UTF-8"?>  
<xsd:schema elementFormDefault="qualified" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns:std="http://tow.gow.ho.com/2009/08/StandardHeader">
    <xsd:import namespace="http://tow.gow.ho.com/2009/08/StandardHeader"
            schemaLocation="b.xsd" />

    <xsd:element name="myTest">
        <xsd:complexType mixed="true">
            <xsd:sequence>
                <xsd:element ref="std:standardHeader" minOccurs="0">
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

</xsd:schema>

А b.xsd - это:

<?xml version="1.0" encoding="UTF-8"?>  
<xsd:schema elementFormDefault="qualified"  
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            targetNamespace="http://tow.gow.ho.com/2009/08/StandardHeader">

    <xsd:element name="standardHeader">
        <xsd:complexType mixed="true">
            <xsd:sequence>
                <xsd:element name="data" minOccurs="0">
                    <xsd:complexType mixed="true">
                        <xsd:sequence>
                            <xsd:element name="LEVELDATA" minOccurs="0" type="xsd:normalizedString"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

</xsd:schema>

Эти два XSD действительно проверяют ваш XML-файл с его пространством имен как есть.

Этот ответ был вдохновлен этой веб-страницей: "Multi-Schema Project: Ноль, одно или много пространств имен? ". Он не копирует решения 1-к-1, но скорее вдохновлен этой веб-страницей.

0 голосов
/ 14 марта 2019

Проблема в неправильном «пространстве имен» в XML ... (строка 2) Когда вы удаляете его (или исправляете) - это правильно.

Online-Validator https://www.freeformatter.com/xml-validator-xsd.html

Образец XML-генератора (из XSD) http://xsd2xml.com/

Пространство имен Doc https://www.w3schools.com/XML/xml_namespaces.asp

...