2009-10-18 5 views
5

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

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

Библиотека программирования или техника, которая позволит мне сделать это в .NET или Delphi, будет работать.

ответ

3

Я использую XMLNotepad много. (Я не знаю, пробовали ли вы это.)

Его отсутствие и хорошая работа при одновременном сообщении большого количества ошибок при условии, что они независимы и не являются терминальными! Примерно так же, как ошибки компилятора в Delphi: после того, как он запущен на ложной дорожке, все, что происходит, часто бессмысленно.

Во всяком случае, он работал очень хорошо для меня, чтобы проверить против довольно intricated схем как TVB 3.2 ...

+0

Вы должны установить подключаемый модуль XMLtools, но, похоже, он отлично работает, спасибо! http://sourceforge.net/projects/npp-plugins/ –

+0

OxygenXML делает это тоже - возможно, даже лучше. Я сделал полную рецензию на него в другом ответе. –

2

Проблема в том, что XML-схема определяет язык для вашего XML-документа. Затем валидатор просто пытается «скомпилировать» ваш XML-документ с указанной спецификацией языка.

Для большинства компиляторов, имеющих фиксированные языки (например, Delphi или C#), потребовалось довольно много времени, чтобы расслабиться, чтобы сообщить о нескольких ошибках.

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

Я не уверен, ни продуктов, делающих это, но есть некоторые патенты, поданные на вещи, которые могли бы сделать это: http://www.faqs.org/patents/app/20080228810 и http://www.faqs.org/patents/app/20080229292

Примечание они были поданы в 2008 году!

--jeroen

1

Я думаю, что проблема в том, что когда-то схема является недействительным по какой-либо причине, все остальное, что следует ненадежно поэтому любые дальнейшие ошибки проверки может ввести в заблуждение. Необходимость выполнять валидацию за пределами «является ли этот документ действительным», возможно, слишком специализирована, чтобы привлечь интерес компаний-разработчиков.

С точки зрения валидатора для подавляющего большинства применений, к которому это будет применено, не имеет смысла продолжать проверку после возникновения сбоя. Документ не может стать более недействительным, чем он есть, и не может быть признан действительным, как только он будет признан недействительным.

Возможно, было бы полезно понять, почему вы хотите это сделать?

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

2

Этот код на C# должен делать именно это - он будет сканировать весь XML и проверять его на предоставленный XSD, и он будет выплеснуть все ошибки проверки (или ошибки в схеме тоже!) По мере их возникновения. Надеюсь это поможет!

способ использования это будет:

MyXmlValidator (name of XML file) (name of XSD file) 

Это все есть!

Марк


static void Main(string[] args) 
    { 
     ShowTitle(); 

     if(args.Length < 2) 
     { 
      ShowUsage(); 
      return; 
     } 

     string xmlFileName = args[0]; 
     string xsdFileName = args[1]; 

     if(!File.Exists(xmlFileName)) 
     { 
      ShowError(string.Format("XML File '{0}' does not exist)", xmlFileName)); 
      return; 
     } 

     if (!File.Exists(xsdFileName)) 
     { 
      ShowError(string.Format("XSD schema '{0}' does not exist)", xsdFileName)); 
      return; 
     } 

     StreamReader xsdReader = new StreamReader(xsdFileName); 

     XmlSchema Schema = new XmlSchema(); 
     Schema = XmlSchema.Read(xsdReader, new ValidationEventHandler(XSDValidationEventHandler)); 

     XmlReaderSettings ReaderSettings = new XmlReaderSettings();  
     ReaderSettings.ValidationType = ValidationType.Schema;     
     ReaderSettings.Schemas.Add(Schema); 

     ReaderSettings.ValidationEventHandler += new ValidationEventHandler(XMLValidationEventHandler); 

     XmlTextReader xmlReader = new XmlTextReader(xmlFileName); 
     XmlReader objXmlReader = XmlReader.Create(xmlReader, ReaderSettings); 

     while (objXmlReader.Read()) 
     { } 

     Console.WriteLine("Successful validation completed!"); 
    } 

    private static void XSDValidationEventHandler(object sender, ValidationEventArgs e) 
    { 
     Console.WriteLine("Error reading XSD: " + e.Message); 
    } 

    private static void XMLValidationEventHandler(object sender, ValidationEventArgs e) 
    { 
     Console.WriteLine("Validation error: " + e.Message); 
    } 

    private static void ShowError(string message) 
    { 
     Console.WriteLine("ERROR: " + message); 
    } 

    private static void ShowUsage() 
    { 
     Console.WriteLine("USAGE: GaraioXmlValidator (name of XML file) (name of XSD file)" + Environment.NewLine); 
    } 

    private static void ShowTitle() 
    { 
     Console.WriteLine("GaraioXmlValidator v1.0 (c) 2008 by Garaio Technology Lab" + Environment.NewLine); 
    } 
+0

Я пробовал очень похожее решение для вас пару месяцев назад: даже этот останавливается намного раньше, чем Джим любит. –

+0

Ты слишком хорошо меня знаешь, Джеруэн. –

1

Я обнаружил, что OxygenXML editor делает очень хорошую работу и это. Это коммерческий редактор, но проверка выполняется с помощью Xerces engine, чтобы выполнить проверку (с возможностью использования других.) Я пробовал Xerces раньше и не мог заставить его сообщить о первой ошибке, но они говорят, что они вынуждают он должен вести отчетность. Это действительно хорошая работа.

XMLSpy официально не Поддержите это. Основываясь на том, что я видел из двух редакторов, мне нравится OxygenXML намного лучше, чем XMLSpy, а не только для этой функции (что действительно хорошо, как это делается).

+0

oXygen - отличный инструмент. Не знаю, как мы сделали XSD без него. Кроме того, он генерирует документацию по качеству схемы. – Gerard

Смежные вопросы