Ватсон Карли
Шрифт:
Проверка
Если нужно проверить документ XML, используйте класс
XmlValidatingReader
. Он обладает всей функциональностью класса XmlTextReader
(оба реализуют XmlReader
, но XmlValidatingReader
добавляет свойство ValidationType
, свойство Schemes
и свойство SchemaType
). Свойство ValidationType
задается как тип проверки, которую желательно выполнить. Допустимые значения этого свойства следующие: Значение свойства | Описание |
---|---|
Auto | Если в <!DOCTYPE...> объявлен DTD, он и будет загружаться и обрабатываться. Атрибуты по умолчанию и общие сущности, определенные в DTD, станут доступными. Если найден атрибут XSD schemalocation , то загружается и обрабатывается XSD, при этом все атрибуты по умолчанию, определенные в схеме, будут возвращены. Если найдено пространство имен с префиксом MSXML x-schema: , загрузится и обработается схема XDR, все атрибуты, определенные по умолчанию, возвратятся. |
DTD | Проверка согласно правилам DTD. |
Schema | Проверка согласно правилам XSD. |
XDR | Проверка согласно правилам XDR. |
None | Проверка не выполняется. |
Если свойство задано, то должен быть назначен обработчик событий
ValidationEventHandler
. Событие инициируется, когда случается ошибка проверки. На ошибку можно отреагировать любым подходящим образом. Рассмотрим пример. Добавим пространство имен схемы XDR (XML Data Reduced — приведенные данные XML) к файлу books.xml
и назовем этот файл booksVal.xml
. Теперь он выглядит так: <?xml version='1.0'?>
<!-- Этот файл представляет фрагмент базы данных учета запасов книжного склада -->
<bookstore xmlns="x-schema:books.xdr">
<book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
Отметим, что элемент
bookstore
имеет теперь атрибут xmlns="x-schema:books.xdr"
. Это будет указывать на следующую схему XDR: <?xml version="1.0"?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="first-name" content="textOnly"/>
<ElementType name="last-name" content="textOnly"/>
<ElementType name="name" content="textOnly"/>
<ElementType name="price" content="textOnly" dt:type="fixed.14.4"/>
<ElementType name="author" content="eltOnly" order="one">
<group order="seq">
<element type="name"/>
</group>
<group order="seq">
<element type="first-name"/>
<element type="last-name"/>
</group>
</ElementType>
<ElementType name="title" content="textOnlу" />
<AttributeType name="genre" dt:type="string"/>