Ваша проблема в том, что ваша схема не указывает целевое пространство имен - следовательно, все типы связаны с пустым пространством имен.
Ваша ошибка вызвана тем, что схема указывает, что элемент 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? .