Peter Lucansky Ответов: 1

Чистый XML для проверки вернуть только предупреждение, если XML.nsuri отличается от схемы.пространства имен targetnamespace


Здравствуйте, я пытаюсь проверить XML (a.xml):
<computer type="s" xmlns="http://aaa.aa1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> </computer>

по схеме(а.xsd-файл):
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://aaa.aa"> <xs:element name="computer"> </xs:element> </xs:schema>


Эти файлы проверяются в .net framework (код ниже) только с предупреждениями вместо ошибок. Я пробовал Stylus, Altova, Java и некоторые онлайн-валидаторы, и все они возвращали ошибки проверки. Только пример .net framework ниже возвращает предупреждения. Это проблема, потому что когда я решаю подавить предупреждения и оценивать только ошибки, XML успешно проверяется, но он не является допустимым по используемой схеме. (пространства имен targetnamespace в XSD отличается от xnlns в XML (консорциумом W3C это ошибка)).

Вывод программы:
Предупреждение: не удалось найти информацию о схеме для элемента 'http://aaa.aa1:computer".
Предупреждение: не удалось найти информацию о схеме для атрибута "тип".
Проверка завершена

Вывод программы с подавленными предупреждениями:
(удалить флаг: xmlReadSettings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;)
Валидация полная

Что я уже пробовал:

private static void ValidateXmlBySchema(string xmlData, string xsdSchema)
        {
            StringReader xmlDataReader = new StringReader(xmlData);
            StringReader schemaReader = new StringReader(xsdSchema);
            XmlSchema schema = XmlSchema.Read(schemaReader, dataValidationEventHandler);
            XmlReaderSettings xmlReadSettings = new XmlReaderSettings();
            xmlReadSettings.ValidationType = ValidationType.Schema;
            xmlReadSettings.ValidationEventHandler += new ValidationEventHandler(dataValidationEventHandler);
            xmlReadSettings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
//            xmlReadSettings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
            xmlReadSettings.Schemas.Add(schema);
            XmlReader dataReader = XmlReader.Create(xmlDataReader, xmlReadSettings);
            while (dataReader.Read())
            {
            }
            dataReader.Close();
            Console.WriteLine($"Walidation complette");
        }
        static void dataValidationEventHandler(object sender, ValidationEventArgs e)
        {
            Console.WriteLine($"{e.Severity}: {e.Message}");
        }

		    
                    

1 Ответов

Рейтинг:
0

#realJSOP

Помогает ли это вообще?

кэш схем[^]


Peter Lucansky

Эта проблема не связана с кэшем/ местоположением схемы. У меня есть XML, и я пытаюсь проверить его с помощью XSD. Если XSD.TargetNamespace отличается от XML.NSURI, для .net framework это только предупреждение (вместо других платформ (Java, некоторые XML-Редакторы...), где я получаю ошибку). Я думаю, это ошибка в .net framework. Можно ли проверить пару (xml+ xsd) из моего образца с ошибками в .net?