Ошибка в xml файле
Правила синтаксиса XML крайне просты и логичны. Их легко запомнить и легко использовать.
Создание DTD и ссылка на XML-документ
В Visual Studio 2005 или Visual Studio .NET наведите указатель на пункт "Создать" в меню "Файл" и выберите пункт "Файл".
Выберите тип текстового файла и нажмите кнопку " Открыть".
Добавьте следующие объявления DTD в файл, чтобы описать грамматику XML-документа:
Сохраните файл с файлом Product.dtd в той же папке, что и XML-документ.
Повторно Product.xml в Visual Studio 2005 или Visual Studio .NET; для этого наведите указатель на пункт "Открыть" в меню "Файл" и выберите пункт "Файл". Добавьте инструкцию DOCTYPE (под строкой ?xml version="1.0" ), как показано ниже. При этом XML-документ связывается с DTD-файлом.
Сохраните измененный XML-документ как ProductWithDTD.xml.
Выполнение проверки с помощью DTD
В Module1 (перед началом основной подпрограммы) объявите логическую переменную с именем isValid следующим образом:
В подпрограмме Main создайте объект XmlTextReader для чтения XML-документа из текстового файла. Затем создайте объект для XmlValidatingReader проверки XML-данных:
Объект XmlValidatingReader имеет свойство ValidationType, указывающее требуемый тип проверки (DTD, XDR или схема). Задайте для этого свойства значение DTD следующим образом:
При возникновении ошибок проверки проверяющее средство чтения создает событие проверки. Добавьте следующий код, чтобы зарегистрировать обработчик событий проверки (вы реализуете подпрограмму MyValidationEventHandler на шаге 8 этого раздела):
Добавьте следующий код для чтения и проверки XML-документа. При возникновении ошибок проверки для ее обработки будет вызван MyValidationEventHandler. Для этой подпрограммы будет задано isValid значение False (см. шаг 8 этого раздела). Состояние isValid можно проверить после проверки, чтобы узнать, является ли документ допустимым или недопустимым.
После подпрограммы Main напишите подпрограмму MyValidationEventHandler следующим образом:
Выполните сборку и запустите приложение.
Элемент события проверки "Product" содержит неполное содержимое. Ожидался "ProductName". Ошибка произошла в file:///C:/MyFolder/ProductWithDTD.xml(4, 3). Недопустимый документ
Синтаксически верный XML документ
Если XML документ составлен в соответствии с приведенными синтаксическими правилами, то говорят, что это "синтаксически верный" XML документ.
Активировав в задаче XML свойство ValidationDetails , вы сможете получить подробные результаты проверки XML-документа.
На следующем снимке экрана показано окно редактора задачи XML с необходимыми параметрами для проверки XML, позволяющими настроить вывод подробных сведений об ошибках.
До появления свойства ValidationDetails проверка XML в задачах XML возвращала информацию только о том, есть ошибка в документе или нет. Сведения о самих ошибках и их расположении были недоступны. Теперь, если для свойства ValidationDetails задать значение True, выходной файл будет содержать подробные сведения обо всех ошибках, включая номера строк и позиции. Эти сведения можно использовать для анализа, поиска и исправления ошибок в XML-документах.
Функция проверки XML легко масштабируется в соответствии с размером XML-документов и количеством ошибок. Так как выходной файл имеет формат XML, можно запрашивать и анализировать содержащиеся в нем данные. Например, если выходные данные содержат большое количество ошибок, их можно сгруппировать, используя запрос Transact-SQL , как описано в этом разделе.
В SQL Server Службы Integration Services (Integration Services) появилось свойство ValidationDetails в пакете обновления 2 (SP2) для SQL Server 2012 (11.x). Кроме того, это свойство доступно в SQL Server 2014 (12.x) и SQL Server 2016 (13.x);.
В XML новая строка сохраняется как LF
В приложениях Windows новая строка хранится в следующем виде: символ перевода каретки и символ новой строки (CR+LF).
Unix и Mac OSX используют LF.
Старые Mac системы используют CR.
XML сохраняет новую строку как LF.
Требования
В этой статье предполагается, что вы знакомы со следующими разделами:
Выполнение проверки с помощью схемы XDR
Измените приложение таким образом, чтобы XmlTextReader загружал ProductWithXDR.xmlследующим образом:
Задайте ValidationType значение XDR, чтобы проверяющее средство чтения выполняло проверку XDR следующим образом:
Выполните сборку и запустите приложение.
Приложение должно сообщить о допустимсти XML-документа.
ИзменитеProductWithXDR.xml, чтобы сделать его намеренно недопустимым.
Запустите приложение еще раз.
Приложение должно сообщить об ошибке проверки.
XML пролог
Следующая строка называется XML прологом:
XML пролог необязателен. Но если он есть, то это должна быть первая строка XML документа.
В XML документе могут присутствовать международные символы, вроде русских букв, и чтобы не возникало ошибок необходимо указать кодировку, либо сохранить XML файл в формате UTF-8.
UTF-8 — кодировка XML документов по умолчанию.
Проверка по XSD-схеме в MS Visual Studio¶
- Откройте XML-файл, который требуется проверить в MS Visual Studio Файл > Открыть > Файл.
- Чтобы проверить файл по заданной XSD-схеме, его надо с ней ассоциировать. Перейдите в меню XML-код > Схемы. .
Проверка на соответсвие XSD-схеме будет осуществляться автоматически на лету. Внизу в окне Списка ошибок будет отображаться список ошибок. При нажатии на ошибку, она будет подсвечена в редакторе.
Добавить окно Списка ошибок можно через Вид > Списка ошибок.
© Copyright 2015, Dmitry Mazhartsev. Revision 7cf069f8 .
Versions latest Downloads pdf htmlzip epub On Read the Docs Project Home Builds Free document hosting provided by Read the Docs.
Валидные XML документы
Валидный XML документ не то же самое, что и синтаксически верный XML документ.
Первое правило для валидного XML документа то, что он должен быть синтаксически верным.
Второе правило — валидный XML документ должен соответствовать определенному типу документов.
Правила, определяющие допустимые элементы и атрибуты для XML документа, часто называются определениями документа или схемами документа.
Заключение
XML-документы содержат элементы и атрибуты и предоставляют гибкий и эффективный способ обмена данными между приложениями и организациями. Чтобы указать допустимую структуру и содержимое XML-документа, можно написать определение типа документа (DTD), схему Microsoft XML-Data Reduced (XDR) или схему языка определения схемы XML (XSD).
Теги XML регистрозависимы
Теги XML являются регистрозависимыми. Так, тег не то же самое, что тег .
Открывающий и закрывающий теги должны определяться в одном регистре:
Замечание: "Открывающий и закрывающий теги" иногда еще называют "начальный и конечный теги". Используйте то определение, которое вам более симпатично. По сути это одно и то же.
Комментарии в XML
Синтаксис комментариев в XML такой же, как и в HTML.
Использование двух символов тире в середине комментария не допустимо.
Странно, но так можно:
Выполнение проверки с помощью схемы XSD
Измените приложение таким образом, чтобы XmlTextReader ProductWithXSD.xml, как показано ниже.
Задайте ValidationType схему, чтобы проверяющее средство чтения выполняло проверку схемы XSD следующим образом:
Создайте и запустите приложение для проверки XML-документа с помощью схемы XSD.
Приложение должно сообщить о допустимсти XML-документа.
XML ошибки остановят вас
Ошибки в XML документе остановят работу вашего XML приложения.
W3C спецификации XML предписывают, что при возникновении ошибки программа разбора XML документа должна прекратить свою работу. Это сделано для того, чтобы приложения XML были небольшого размера, быстрые и широко совместимые.
HTML браузеры отобразят HTML документ даже с ошибками (например, пропущенный закрывающий тег).
Проверять файл по XSD-схеме целесообрано в исключительных случаях, например, если скрипт xml-healer.py не справился с исправлением файла. Подробнее в главе IV. Скрипт для замены служебных символов в XML .
XMLPad уступает по удобству и возможностям MS Visual Studio, но если вы не являетесь программистом и у вас не установлена MS Visual Studio, лучше воспользоваться XMLPad.
Сущности
Некоторые символы в XML имеют особые значения.
Так, к ошибке приведет следующая строка XML документа:
Чтобы такая ошибка не возникала, нужно заменить символ "
В XML существует 5 предопределенных сущностей:
Сущность | Символ | Значение |
---|---|---|
< | меньше, чем | |
> | > | больше, чем |
& | & | амперсанд |
' | ' | апостроф |
" | " | кавычки |
Замечание: Только символы "" допустим, но лучше его всегда заменять на сущность.
Создание схемы XSD и ссылки на XML-документ
В Visual Studio .NET наведите указатель мыши на пункт "Создать" в меню "Файл" и выберите пункт "Файл".
Выберите тип текстового файла и нажмите кнопку " Открыть".
Добавьте в файл следующее определение схемы XSD, чтобы описать грамматику XML-документа:
Сохраните файл как Product.xsd в той же папке, что и XML-документ.
Повторно откройте исходныйProduct.xml и свяжите его со схемой XSD следующим образом:
Сохраните измененный XML-документ как ProductWithXSD.xml.
Создание схемы XDR и ссылки на XML-документ
В Visual Studio 2005 или Visual Studio .NET наведите указатель на пункт "Создать" в меню "Файл" и выберите пункт "Файл".
Выберите тип текстового файла и нажмите кнопку " Открыть".
Добавьте следующие определения схемы XDR в файл, чтобы описать грамматику XML-документа:
Сохраните файл как Product.xdr в той же папке, что и XML-документ.
Повторно откройте исходныйProduct.xml и свяжите его со схемой XDR следующим образом:
Сохраните измененный XML-документ как ProductWithXDR.xml.
XML элементы должны соблюдать корректную вложенность
В HTML иногда можно наблюдать такую картину:
и иногда это даже работает должным образом.
В XML все элементы обязаны соблюдать корректную вложенность:
Понятие "корректная вложенность" по отношению к приведенным примерам просто означает, что так как элемент открывается внутри элемента , то и закрываться он должен внутри элемента .
Когда используют определения документа?
Определения документа — это самый простой способ предоставить рекомендации по допустимым элементам и атрибутам документа.
Определения документа также предоставляют общие рекомендации, которые могут использоваться другими пользователями и/или разработчиками.
Определения документа предоставляют стандартизацию, которая значительно облегчает жизнь.
Создание XML-документа
Запустите Microsoft Visual Studio 2005 или Microsoft Visual Studio .NET. Затем создайте XML-файл (в меню "Файл" наведите указатель мыши на пункт "Создать" и щелкните "Файл").
Выберите тип XML-файла и нажмите кнопку " Открыть".
Добавьте следующие данные в XML-документ для представления продукта в каталоге:
Сохраните файл Product.xml в папке, к которую вы сможете получить доступ позже (в примерах кода в этой статье предполагается папка с именем C:\MyFolder ).
Пример выходных данных в недопустимом XML-файле
Ниже приведен пример выходного XML-файла с результатами проверки, который содержит небольшое количество ошибок. Текст элементов скрыт для удобства чтения.
Проверка валидности XML документа
Для проверки валидности XML документов в сети Интернет существует множество программ и сайтов проверки XML документов.
В XML пробелы сохраняются
В HTML несколько последовательных пробельных символов усекаются до одного. В XML документе все пробельные символы сохраняются.
Все XML элементы должны иметь закрывающий тег
В HTML некоторые элементы могут не иметь закрывающего тега:
В XML нельзя опускать закрывающий тег. Абсолютно все элементы должны закрываться:
Возможно, вы заметили из предыдущих примеров, что XML декларация не имеет закрывающего тега. Это не ошибка. Дело в том, что декларация не относится к XML документу, поэтому у нее и нет закрывающего тега.
Все XML элементы должны иметь закрывающий тег
В HTML некоторые элементы могут не иметь закрывающего тега:
В XML нельзя опускать закрывающий тег. Абсолютно все элементы должны закрываться:
Возможно, вы заметили из предыдущих примеров, что XML декларация не имеет закрывающего тега. Это не ошибка. Дело в том, что декларация не относится к XML документу, поэтому у нее и нет закрывающего тега.
Определения документа
С XML можно использовать различные типы определений документа:
- Оригинальное определение типа документа (DTD)
- Более новый тип определений, основанный на XML, - XML схема.
Пример выходных данных в допустимом XML-файле
Ниже приведен пример допустимого выходного XML-файла с результатами проверки.
У XML документа должен быть корневой элемент
XML документ должен содержать один элемент, который будет родительским для всех других элементов. Он называется корневым элементом.
Использование пространств имен в схеме XSD
Откройте файл Product.xsd, откройте вкладку XML и измените начальный тег xsd:schema следующим образом, чтобы схема применяла к пространству имен urn:MyNamespace :
Сохраните файл Product.xsd.
Запустите приложение, чтобы проверить XML-документ с помощью схемы XSD.
Анализ выходных данных проверки XML с помощью запроса Transact-SQL
Если результат проверки XML содержит большое количество ошибок, можно использовать запрос Transact-SQL , чтобы загрузить выходные данные в SQL Server Management Studio. Затем можно проанализировать список ошибок, используя все возможности языка T-SQL, включая предложения WHERE, GROUP BY, ORDER BY, JOIN и т. д.
Ниже приведен результат запроса к Среда Management Studio из второго примера, показанного выше.
Исходная версия продукта: Visual Basic
Исходный номер базы знаний: 315533
Когда не используют определения документа?
В действительности XML не требует определений документа.
Когда вы экспериментируете с XML или работаете с небольшими XML файлами, создание определений документа может стать лишней тратой времени.
Если вы разрабатываете приложения, то подождите до тех пор, пока спецификации не будут стабильными, и только потом добавляйте определения документов. В обратном случае ваше приложение может перестать работать из-за ошибок проверки правильности документа.
Значения XML атрибутов должны заключаться в кавычки
Так же, как и в HTML, у XML элементов могут быть атрибуты в виде пары имя/значение.
В XML значения атрибутов должны заключаться в кавычки.
Посмотрите на следующие два примера XML документа. Первый с ошибкой, второй написан правильно:
Ошибка в первом XML документе заключается в том, что значение атрибута date элемента note не заключено в кавычки.
Проверка по XSD-схеме в XMLPad¶
- Откройте XML-файл, который требуется проверить в XMLPad File > Open.
- Чтобы проверить файл по заданной XSD-схеме, его надо с ней ассоциировать. Перейдите в меню XML > Assign Schema/DTD.
- Выберите W3C Schema и нажмите Browse, затем выберите XSD-схему для проверки.
- После того, как XSD-схема ассоциирована, нажмите F7 или XML > Validate, чтобы проверить файл. В нижней части окна будут выведены ошибки, нажав на которые можно подсветить строку, в которой они находятся.
Для удобства отображения можно включить переносы строк Edit > Word Wrap.
Пространства имен кэша
Объект XmlSchemaCollection позволяет кэшировать схемы в памяти для повышения производительности. Каждая схема связана с другим пространством имен. Добавьте следующий код в кэш Product.xsd:
После кода, который создает объект XmlValidatingReader , добавьте следующую инструкцию. При этом кэш схемы добавляется в кэш XmlValidatingReader схемы, чтобы средство чтения можно было использовать схемы в памяти.
XML документ с корректным синтаксисом называется "правильно сформированным" или "синтаксически верным".
"Валидный" XML документ кроме всего прочего должен соответствовать определенному типу документов.
Синтаксически верные XML документы
XML документ с корректным синтаксисом является "синтаксически верным".
Синтаксические правила были описаны в предыдущих главах:
- XML документ должен иметь корневой элемент
- XML элемент должен иметь закрывающий тег
- XML теги регистрозависимы
- XML элементы должны соблюдать последовательность вложенности
- Значения XML атрибутов должны заключаться в кавычки
Читайте также: