Ошибка проверки XML с использованием вложенной схемы XSD - Тип не объявлен

Я использую вложенную схему XSD для проверки XML-документа. Импортированные XSD используют свои собственные целевые пространства имен, и я могу проверить образец XML, приведенный ниже, с помощью Liquid XML Studio. Но когда я запускаю проверку, используя приведенный ниже код C #, он не работает с ошибкой объявления типа (см. Ниже). Я потратил много времени, пытаясь понять, но безуспешно:

Основная схема XSD (DataItem.xsd):

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:DataNumeric="Doc.DataNumeric" xmlns:DataYesNo="Doc.DataYesNo"  attributeFormDefault="qualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:import schemaLocation="DataNumeric.xsd" namespace="Doc.DataNumeric" />
  <xs:import schemaLocation="DataYesNo.xsd" namespace="Doc.DataYesNo" />
  <xs:complexType name="tDataItem">
      <xs:choice>
        <xs:element name="DataNumeric" type="DataNumeric:tDataNumeric" />
        <xs:element name="DataYesNo" type="DataYesNo:tDataYesNo" />
      </xs:choice>
  </xs:complexType>
  <xs:element name="DataItem" type="tDataItem" />  
</xs:schema>

Включенная схема XSD (DataNumeric.xsd):

**<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:DataNumeric="Doc.DataNumeric" elementFormDefault="qualified" targetNamespace="Doc.DataNumeric" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="tDataNumeric">
    <xs:sequence>
      <xs:element name="Answer" type="xs:double" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="DataNumeric" type="DataNumeric:tDataNumeric" />
</xs:schema>**

XML:

<DataItem>
  <DataNumeric xmlns:DataNumeric="Doc.DataNumeric">
    <DataNumeric:Answer>37.8</DataNumeric:Answer>
  </DataNumeric>
</DataItem>

Ошибка проверки :

XmlSchemaValidationException: Тип «Doc.DataNumeric: tDataNumeric» не объявлен.

Код проверки C #:

XDocument xDoc = XDocument.Parse(xxxxxxx);
string xsdPath = ConfigUtils.GetXsdPath(XsdSchemaIdentifier.HHDataItem);
FileStream fs = new FileStream(xsdPath, FileMode.Open);
XmlReader reader = XmlReader.Create(fs);
XmlSchemaSet xss = new XmlSchemaSet();
xss.Add("", reader);
fs.Close();
fs.Dispose();

xDoc.Validate(xss, null);
6
задан Shahid 22 September 2011 в 08:12
поделиться