Неопределенный сложный тип, используемый в качестве основы для расширения сложного типа

#c# #xml #xsd #schema

Вопрос:

У меня есть набор xsd-файлов, которые я пытаюсь использовать для проверки xml — файла на C#. Сообщение об ошибке, которое я получаю, выглядит так

Необработанное исключение. System.Xml.Схема.Исключение XmlSchemaValidationException: Неопределенный сложный тип «Пространство имен:CDSInterchange_Структура» используется в качестве основы для расширения сложного типа.

CDSInterchange_Structure используется в качестве расширения в root.xsd и определен в 000.xsd, но я не уверен, почему я получаю неопределенную ошибку, поскольку я включаю файл .xsd в root.xsd

root.xsd:

 <?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="myNamespace" targetNamespace="myNamespace" elementFormDefault="qualified" attributeFormDefault="unqualified" version="6-2" id="XML_Message-V6-1-1-2010-12-10">
    <xs:include schemaLocation="Structures.xsd"/>
    <xs:include schemaLocation="000.xsd"/>
    <xs:element name="CDS-XMLInterchange" id="CommissioningDataSetInterchange">
        <xs:complexType>
            <xs:complexContent>
                <xs:extension base="CDSInterchange_Structure">
                    <xs:attribute name="SchemaVersion" type="xs:NMTOKEN" use="required" fixed="6-2">
                    </xs:attribute>
                    <xs:attribute name="SchemaDate" type="xs:date" use="required" fixed="2012-05-11">
                    </xs:attribute>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:element>
</xs:schema>
 

000.xsd

 <?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns="myNamespace" targetNamespace="myNamespace" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:include schemaLocation="Structures.xsd"/>
    <xs:complexType name="CDSInterchange_Structure" mixed="false">
        <xs:sequence>
            <xs:element name="CDSInterchangeHeader" type="ns:CDSInterchangeHeader_Structure"/>
            <xs:element name="CDSNetChange-All-MessageTypes" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="CDSMessageHeader" type="ns:CDSMessageHeader_Structure"/>
                        <xs:element name="CDSTransactionHeader_NetChange" type="ns:CDSTransactionHeader_NetChange_Structure"/>
                        <xs:element name="CDSMessageTrailer" type="ns:CDSMessageTrailer_Structure"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="CDSInterchangeTrailer" type="ns:CDSInterchangeTrailer_Structure"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>
 

Есть третий файл, на который ссылаются, называемый Structures.xsd, который я не включил, так как он даже не зашел так далеко. Вот код проверки C#, который я использую:

 public static bool XmlSchemaValidation(string xml, string xsdFilePath)
{
    ValidatorLog.Clear();

    XmlReaderSettings settings = new XmlReaderSettings();
    settings.Schemas.Add(null, xsdFilePath);
    settings.ValidationType = ValidationType.Schema;
    settings.ValidationEventHandler  = new ValidationEventHandler(SettingsValidationEventHandler);

    using (var stream = StreamFromString(xml))
    {
        XmlReader reader = XmlReader.Create(stream, settings);

        while (reader.Read()) { }
    }

    if (ValidatorLog.Errors > 0 || ValidatorLog.Warnings > 0)
    {
        ValidatorLog.GenerateLogtxt();

        Console.WriteLine(DateTime.Now.ToString("yyyyMMdd HH:mm:ss")   $" - {xsdFilePath} schema validation failed. {ValidatorLog.Errors} errors and {ValidatorLog.Warnings} warnings.");

        string dateTime = DateTime.Now.ToString("yyyyMMdd-HHmmss");

        File.WriteAllText($@"{Path.GetDirectoryName(xsdFilePath)}log{dateTime}_Validation_log.txt", ValidatorLog.Logtxt);

        return false;
    }
    else
    {
        return true;
    }
}

static void SettingsValidationEventHandler(object sender, ValidationEventArgs e)
{
    if (e.Severity == XmlSeverityType.Warning)
    {
        ValidatorLog.Messages.Add("WARNING: "   e.Message   Environment.NewLine);
        ValidatorLog.Warnings  ;
        Console.WriteLine("WARNING: "   e.Message);
    }
    else if (e.Severity == XmlSeverityType.Error)
    {
        ValidatorLog.Messages.Add("ERROR: "   e.Message   Environment.NewLine);
        ValidatorLog.Errors  ;
        Console.WriteLine("ERROR: "   e.Message);
    }
}
 

Любая помощь очень ценится, я не очень хорошо разбираюсь в xml.

Комментарии:

1. Убедитесь, что пространства имен xml-файлов указывают на те же xsd-файлы, которые вы используете. XML, вероятно, использует расположение HTTP, пока ваши схемы находятся на локальном диске.