Тип 'http://schemas.domain.com:Ssn' не объявлен или не является простым типом при использовании нескольких схем - PullRequest
0 голосов
/ 04 января 2012

У меня есть две схемы, одна с основным определением объекта, а другая имеет определение для типов, которые не являются простыми типами (например, string, int, decimal)

, который называется common.xsd

Когда я проверяю, он добавляет обе схемы, но не находит типы во включенном файле.

Main.Xsd содержит:

<xs:include schemaLocation="Common.xsd"/>

и это функция проверки:

XmlReaderSettings settings = new XmlReaderSettings();

                FileStream fileStream = File.OpenRead(xsdFile);
            XmlSchema schema = XmlSchema.Read(File.OpenRead(System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Schemas\\Main.xsd")), OnXsdSyntaxError);
            XmlSchema schema2 = XmlSchema.Read(File.OpenRead(System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Schemas\\Common.xsd")), OnXsdSyntaxError);


                settings.ValidationType = ValidationType.Schema;
                settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
                settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
                settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;

                //þurfum að adda common.xsd líka !
                settings.Schemas.Add(schema);
                settings.Schemas.Add(schema2);
                settings.ValidationEventHandler += new ValidationEventHandler(OnXsdSyntaxError);

                using (XmlReader validator = XmlReader.Create(xmlFile, settings))
                {
                    while (validator.Read())
                        isValid = true;
                }

Ошибка:

Тип 'http://schemas.domain.com:Ssn' не объявлен или не является простым типом.

Очевидно, что он не добавляет файл схемы2 и не находит определения для этих пользовательских типов.

Буду очень признателен за помощь, потому что я вынужден использовать несколько файлов XSD в этой проверке.

1 Ответ

0 голосов
/ 05 января 2012

Ваше включение будет импортировать только типы из другой схемы, которые имеют то же пространство имен, что и типы в вашей основной схеме.

Если вы хотите импортировать типы из другого пространства имен, используйте атрибут пространства имен:

<xs:include schemaLocation="Common.xsd" namespace="http://schemas.domain.com" />

Также атрибут schemaLocation является полностью необязательным.

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