Чтение онлайн

на главную - закладки

Жанры

C++. Сборник рецептов

Когсуэлл Джефф

Шрифт:

Классы
SAX2XMLReader
,
DOMBuilder
,
DOMWriter
и
XercesDOMParser
поддерживают ряд дополнительных функций. В
SAX2XMLReader
и
DOMBuilder
вы можете включать эти функции, используя методы
setFeature
и
setProperty
. Первый метод принимает строку и булево значение: второй метод принимает строку и
void*
. Запросить включенные
функции можно с помощью методов
getFeature
и
getProperty
. Для удобства в Xerces предусмотрены константы с именами фикций и свойств. Класс
DOMWriter
поддерживает
setFeature
, но не поддерживает
setProperty
. Класс
XercesDOMParser
поддерживает оба метода, в нем предусмотрены отдельные методы по установке и получению каждой функции. В документации Xerces вы найдете полный список поддерживаемых дополнительных функций.

Смотри также

Рецепт 14.6.

14.6. Проверка документа XML на соответствие схеме

Проблема

Требуется подтвердить соответствие документа XML схеме, представленной в рекомендациях XML Schema 1.0.

Решение

Используйте библиотеку Xerces совместно с программным интерфейсом SAX2 или с парсером DOM.

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

setProperty
для включения режима подтверждения внешней схемы. В качестве первого аргумента
setProperty
необходимо использовать
XMLUni::fgXercesSchemaExternalSchemaLocation
или
XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation
в зависимости оттого, используется или нет в схеме целевое пространство имен. Второй аргумент должен определять место расположения схемы, представленное значением типа
const XMLCh*
. Не забудьте привести тип второго аргумента к
void*
, как это сделано в рецепте 14.5.

Подтверждение соответствия документа XML схеме на основе использования

XercesDOMParser
выполняется аналогично подтверждению достоверности документа DTD, когда схема содержится внутри целевого документа или когда на нее делается ссылка в этом документе. Единственное отличие заключается в явном подключении средств поддержки схемы и пространства имен, как показано в примере 14.15.

Пример 14.15. Включение режима подтверждения схемы при использовании XercesDOMParser

XercesDOMParser parser;

parser.setValidationScheme(XercesDOMParser::Val_Always);

parser.setDoSchema(true);

parser setDoNamespaces(true);

Если требуется проверить документ XML на соответствие внешней схеме, имеющей целевое пространство имен, вызовите метод парсера

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

Аналогично для проверки документа XML на соответствие схемы с использованием

DOMBuilder
включите функцию
подтверждения достоверности следующим образом.

DOMBuilder* parser = ...;

parser->setFeature(XMLUni::fgDOMNamespaces, true);

parser->setFeature(XMLUni::fgDOMValidation, true);

parser->setFeature(XMLUni::fgXercesSchema, true);

Для подтверждения соответствия документа внешней схеме с использованием

DOMBuilder
установите свойство
XMLUni::fgXercesSchemaExternalSchemaLocation
или
XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation
в значение места расположения схемы.

Например, пусть требуется проверить документ animals.xml из примера 14.1, используя схему из примера 14.16. Один из способов заключается в добавлении ссылки на схему в документ animals.xml, как показано в примере 14.17. После этого вы можете проверить документ, используя программный интерфейс SAX2, как показано в примере 14.13, или используя DOM, как показано в примере 14.14 с учетом модификаций, выполненных в примере 14.15.

Пример 14.16. Схема animals.xsd для файла animals.xml

<?xml version="1.0" encoding="UTF-8"?>

<!- Схема для животных цирка Feldman Family Circus -->

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"

 elementFormDefault="qualified">

 <xsd:element name="animalList">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="animal" minOccurs="0" maxOccurs="unbounded">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="name" type="xsd:string" />

<xsd:element name="species" type="xsd:string"/>

<xsd:element name="dateOfBirth" type="xsd:date"/>

<xsd:element name="veterinarian" type="contact"/>

<xsd:element name="trainer" type="contact"/>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

 <xsd:complexType name="contact">

<xsd:attribute name="name" type="xsd:string"/>

<xsd:attribute name="phone" type="phone"/>

 </xsd:complexType>

 <xsd:simpleType name="phone">

<xsd:restriction base="xsd:string">

<xsd:pattern value="\(\d{3}\)\d{3}-\d{4}"/>

</xsd:restriction>

 </xsd:simpleType>

</xsd:schema>

Пример 14.17. Модифицированный файл animals.xml, содержащий ссылку на схему

<?xml version="1.0" encoding="UTF-8"?>

<!- Животные цирка Feldman Family Circus со схемой -->

Поделиться:
Популярные книги

Потомок бога 3

Решетов Евгений Валерьевич
3. Локки
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Потомок бога 3

Идеальный мир для Лекаря 6

Сапфир Олег
6. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 6

Леди Малиновой пустоши

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Леди Малиновой пустоши

Боярышня Евдокия

Меллер Юлия Викторовна
3. Боярышня
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Боярышня Евдокия

"Сломанная подкова" Таверна у трёх дорог

Скор Элен
1. Попаданка в деле
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Сломанная подкова Таверна у трёх дорог

Измена. Избранная для дракона

Солт Елена
Любовные романы:
любовно-фантастические романы
3.40
рейтинг книги
Измена. Избранная для дракона

Сумеречный стрелок

Карелин Сергей Витальевич
1. Сумеречный стрелок
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный стрелок

Адвокат империи

Карелин Сергей Витальевич
1. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
фэнтези
5.75
рейтинг книги
Адвокат империи

Неверный

Тоцка Тала
Любовные романы:
современные любовные романы
5.50
рейтинг книги
Неверный

На границе империй. Том 7. Часть 3

INDIGO
9. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.40
рейтинг книги
На границе империй. Том 7. Часть 3

Хорошая девочка

Кистяева Марина
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Хорошая девочка

АллатРа

Новых Анастасия
Научно-образовательная:
психология
история
философия
обществознание
физика
6.25
рейтинг книги
АллатРа

Низший 2

Михайлов Дем Алексеевич
2. Низший!
Фантастика:
боевая фантастика
7.07
рейтинг книги
Низший 2

Единственная для невольника

Новикова Татьяна О.
Любовные романы:
любовно-фантастические романы
5.67
рейтинг книги
Единственная для невольника