проверка xsd и xml - PullRequest
       4

проверка xsd и xml

0 голосов
/ 31 января 2019

У меня проблема с проверкой xml и xsd.Я получаю эту ошибку из схемы xsd.

src-resol.4.2: Ошибка разрешения компонента «urn: id».Было обнаружено, что 'urn: id' находится в пространстве имен 'urn: schemas-microsoft-com: xml-diffgram-v1', но компоненты из этого пространства имен не доступны из документа схемы 'virtual: //server/schema.xsd',Если это неправильное пространство имен, возможно, нужно изменить префикс «urn: id».Если это правильное пространство имен, то в 'virtual: //server/schema.xsd'

должен быть добавлен соответствующий тег' import '. И в схеме xml я также обнаружил эту ошибку.

cvc-complex-type.2.4.d: обнаружен недопустимый контент, начиная с элемента 'xs: schema'.В этот момент не ожидается дочерний элемент.

это мой xml-файл

<?xml version="1.0" encoding="ISO-8859-1"?>

<AddCustomerNotesByExtIDResult>
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="Status">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="StatusCode" type="xs:int" minOccurs="0"/>
                <xs:element name="Description" type="xs:string" minOccurs="0"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
    </xs:element>
  </xs:schema>
  <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <NewDataSet>
      <Status diffgr:id="Status1" msdata:rowOrder="0">
        <StatusCode>0</StatusCode>
        <Description>Customer Notes added successfully</Description>
      </Status>
    </NewDataSet>
  </diffgr:diffgram>
</AddCustomerNotesByExtIDResult>

А это мой xsd-файл

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="NewDataSet">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Status">
              <xs:complexType>
                <xs:sequence>
                  <xs:element type="xs:byte" name="StatusCode"/>
                  <xs:element type="xs:string" name="Description"/>
                </xs:sequence>
                <xs:attribute ref="urn:id" xmlns:urn="urn:schemas-microsoft-com:xml-diffgram-v1"/>
                <xs:attribute ref="urn:rowOrder" xmlns:urn="urn:schemas-microsoft-com:xml-msdata"/>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="AddCustomerNotesByExtIDResult">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="xs:schema"/>
            <xs:element ref="urn:diffgram" xmlns:urn="urn:schemas-microsoft-com:xml-diffgram-v1"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:schema>

1 Ответ

0 голосов
/ 31 января 2019

Это все очень странно.Похоже, у вас есть две версии схемы: одна встроена в ваш XML-документ, а другая - отдельно стоящая;и они разные!

Полагаю, нам следует игнорировать тот, который встроен в XML, потому что нет никаких доказательств того, что он действительно используется для проверки.

Итак, вы действительно проверяете *Элемент 1005 *, и схема говорит, что должна иметь следующую модель содержимого:

Он определяет содержимое обоих элементов (xs: schema и urn: diffgram) путем ссылки на объявления в другомпространства имен, но схема не может содержать ссылки на объявления в другом пространстве имен, если схема для этого пространства имен не импортирована с использованием объявления xs:import.Без такого xs:import схема является неполной и недействительной.

Еще одно незначительное замечание:

<xs:attribute ref="urn:id" xmlns:urn="urn:schemas-microsoft-com:xml-diffgram-v1"/>
<xs:attribute ref="urn:rowOrder" xmlns:urn="urn:schemas-microsoft-com:xml-msdata"/>

Теперь совершенно законно иметь два объявления атрибутов, использующих один и тот же префикс пространства имен для ссылки.в разные пространства имен, но это довольно неортодоксально и довольно запутанно, и все приводит к общему выводу, что все это было собрано без особого понимания того, что все это значит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...