Проверка XML на XSD: элемент xxx имеет недопустимый дочерний элемент yyy в пространстве имен zzz - PullRequest
3 голосов
/ 21 сентября 2011

XSD:

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:DataBodyTemperature="Docobo.DataBodyTemperature" attributeFormDefault="qualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="tDataBodyTemperature">
    <xs:sequence>
      <xs:element name="Answer" type="xs:double" />
      <xs:element minOccurs="0" maxOccurs="1" name="AmbientTemperature" type="xs:double" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="tDataItem">
      <xs:choice>
        <xs:element name="DataBodyTemperature" type="tDataBodyTemperature" />
      </xs:choice>
  </xs:complexType>
  <xs:element name="DataItem">
    <xs:complexType>
      <xs:complexContent mixed="false">
        <xs:extension base="tDataItem">
          <xs:attribute fixed="1" name="SchemaVersion" type="xs:integer" />
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
</xs:schema>

XML:

<DataItem>
  <DataBodyTemperature xmlns:DataBodyTemperature="Docobo.DataBodyTemperature">
    <DataBodyTemperature:Answer>37.8</DataBodyTemperature:Answer>
    <DataBodyTemperature:AmbientTemperature>28.5</DataBodyTemperature:AmbientTemperature>
  </DataBodyTemperature >
</DataItem>

Я получаю ошибку проверки: Ошибка проверки схемы XML: элемент «DataBodyTempera» имеет недопустимый дочерний элемент «Answer» в пространстве имен «Docobo.DataBodyTempera». Список возможных ожидаемых элементов: «Ответ»

1 Ответ

4 голосов
/ 21 сентября 2011

Ваша проблема в том, что ваша схема не указывает целевое пространство имен - следовательно, все типы связаны с пустым пространством имен.

Ваша ошибка вызвана тем, что схема указывает, что элемент DataBodyTemperature (который являетсяв пустом пространстве имен) должен содержать только элементы Answer и AmbientTemperature (оба они объявлены в пустом пространстве имен), однако в вашем документе эти элементы фактически находятся в пространстве имен Docobo.DataBodyTemperature, что делает их совершенно разными элементами.

Пример XML-файла, соответствующего вашей заданной схеме:

<DataItem SchemaVersion="1">
  <DataBodyTemperature>
    <Answer>1</Answer>
    <AmbientTemperature>1</AmbientTemperature>
  </DataBodyTemperature>
</DataItem>

Обратите внимание, что объявление пространства имен отсутствует - все элементы находятся в пространстве имен по умолчанию.Я подозреваю, что вам действительно нужно изменить xsd так, чтобы он указывал целевое пространство имен.

<xs:schema targetNamespace="Docobo.DataBodyTemperature" xmlns:dbt="Docobo.DataBodyTemperature" attributeFormDefault="qualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="tDataBodyTemperature">
    <xs:sequence>
      <xs:element name="Answer" type="xs:double" />
      <xs:element minOccurs="0" maxOccurs="1" name="AmbientTemperature" type="xs:double" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="tDataItem">
    <xs:choice>
      <xs:element name="DataBodyTemperature" type="dbt:tDataBodyTemperature" />
    </xs:choice>
  </xs:complexType>
  <xs:element name="DataItem">
    <xs:complexType>
      <xs:complexContent mixed="false">
        <xs:extension base="dbt:tDataItem">
          <xs:attribute fixed="1" name="SchemaVersion" type="xs:integer" />
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
</xs:schema>

Обратите внимание, что теперь вам также необходимо квалифицировать типы tDataItem и tDataBodyTemperature, поскольку они не являютсябольше объявлено в пустом пространстве имен.

Также обратите внимание, что в вашем одном и том же XML элементы DataItem и DataBodyTemperature отсутствуют в пространстве имен "Docobo.DataBodyTe Temperature", и поэтому теперь не будут проверяться на соответствиеСхема выше.

Вы также можете получить образец XML-документа для схемы - это можно сделать в Visual Studio 2008 или более поздней версии с помощью проводника XML-схемы, см. Как создать образец XMLдокументы из их DTD или XSD? .

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