Д. Стефенс - C++. Сборник рецептов

Тут можно читать онлайн Д. Стефенс - C++. Сборник рецептов - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство КУДИЦ-ПРЕСС, год 2007. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    C++. Сборник рецептов
  • Автор:
  • Жанр:
  • Издательство:
    КУДИЦ-ПРЕСС
  • Год:
    2007
  • Город:
    Москва
  • ISBN:
    5-91136-030-6
  • Рейтинг:
    3.9/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Д. Стефенс - C++. Сборник рецептов краткое содержание

C++. Сборник рецептов - описание и краткое содержание, автор Д. Стефенс, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Данная книга написана экспертами по C++ и содержит готовые рецепты решения каждодневных задач для программистов на С++. Один из авторов является создателем библиотеки Boost Iostreams и нескольких других библиотек C++ с открытым исходным кодом. В книге затрагивается множество тем, вот лишь некоторые из них: работа с датой и временем; потоковый ввод/вывод; обработка исключений; работа с классами и объектами; сборка приложений; синтаксический анализ XML-документов; программирование математических задач. Читатель сможет использовать готовые решения, а сэкономленное время и усилия направить на решение конкретных задач.

C++. Сборник рецептов - читать онлайн бесплатно полную версию (весь текст целиком)

C++. Сборник рецептов - читать книгу онлайн бесплатно, автор Д. Стефенс
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Для примера предположим, что вы модифицируете документ XML animals.xml из примера 14.1 для того, чтобы он содержал ссылку на внешнее определение DTD, как показано в примерах 14.11 и 14.12. Программный код, выполняющий проверку документа с использованием программного интерфейса SAX2, приводится в примере 14.13; программный код, выполняющий проверку этого документа с использованием парсера DOM, приводится в примере 14.14.

Пример 14.11. DTD animals.dtd для файла animals.xml

veterinarian, trainer) >

name CDATA #REQUIRED

phone CDATA #REQUIRED

>

name CDATA #REQUIRED

phone CDATA #REQUIRED

>

Пример 14.12. Модифицированный файл animals.xml, содержащий DTD

Пример 14.13. Проверка документа animals.xml на соответствие DTD с использованием программного интерфейса SAX2

/*

* Операторы #include из примера 14.8, кроме включения вектора который

здесь не нужен

*/

#include // runtime_error

#include

using namespace std;

using namespace xercesc;

/*

* Определить XercesInitializer, как это сделано в примере 14.8, и

* CircusErrorHandler, как это сделано в примере 14.7

*/

int main() {

try {

// Инициализировать Xerces и получить парсер

SAX2 XercesInitializer init;

auto_ptr

parser(XMLReaderFactory::createXMLReader());

// Включить режим проверки

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

// Зарегистрировать обработчик ошибок для получения уведомлений о

// нарушениях DTD

CircusErrorHandler error;

parser->setErrorHandler(&error);

parser->parse("animals.xml");

} catch (const SAXException& e) {

cout << "xml error " << toNative(e.getMessage()) << "\n";

return EXIT_FAILURE;

} catch (const XMLException& e) {

cout << "xml error " << toNative(e.getMessage()) << "\n";

return EXIT_FAILURE;

} catch (const exception& e) {

cout << e.what() << "\n";

return EXIT_FAILURE;

}

}

Пример 14.14. Проверка документа animals.xml на соответствие DTD animals.dtd с использованием парсера XercesDOMParser

#include

#include // cout

#include // runtime_error

#include

#include

#include

#include

#include "xerces_strings.hpp" // Пример 14.4

using namespace std;

using namespace xercesc;

/*

* Определить XercesInitializer, как это сделано в примере 14.8

* и CircusErrorHandler, как это сделано в примере 14.7

*/

int main() {

try {

// Инициализировать Xerces и сконструировать DOM-парсер.

XercesInitializer init;

XercesDOMParser parser;

// Включить режим проверки DTD

parser.setValidationScheme(XercesDOMParser::Val_Always);

// Зарегистрировать обработчик ошибок для получения уведомлений о

// нарушениях схемы

CircusErrorHandler handler;

parser.setErrorHandler(&handler);

// Выполнить синтаксический анализ вместе с проверкой.

parser.parse("animals.xml");

} catch (const SAXException& e) {

cout << "xml error: " << toNative(e.getMessage()) << "\n";

return EXIT_FAILURE;

} catch (const XMLException& e) {

cout << "xml error: " << toNative(e.getMessage()) << "\n";

return EXIT_FAILURE;

} catch (const exception& e) {

cout << e.what() << "\n";

return EXIT_FAILURE;

}

}

Обсуждение

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

DTD предназначены для определения подмножества правильно сформированных документов XML, которые характерны для определенной прикладной области. Например, в примере 14.1 важно то, что каждый элемент animalимеет дочерние элементы name, species, dateOfBirth, veterinarianи trainer, а элементы name, speciesи dateOfBirthсодержат только текст в то время, как элементы veterinarianи trainerимеют атрибуты nameи phone. Более того, элемент animalне должен иметь атрибут phone, а элемент veterinarianне должен иметь дочерний элемент species.

DTD в примере 14.11 накладывает ограничения различного типа. Например, приведенное ниже объявление элемента устанавливает необходимость наличия в элементе животного дочерних элементов name, species, dateOfBirth, veterinarianи trainer, задаваемых именно в этом порядке.

veterinarian, trainer) >

Аналогично приведенное ниже объявление атрибута указывает на то, что элемент trainerдолжен иметь атрибуты nameи phone, а отсутствие в DTD объявлений других атрибутов для элемента дрессировщика говорит о том, что этот элемент может иметь только два атрибута.

name CDATA #REQUIRED

phone CDATA #REQUIRED

>

Документ XML, который содержит DTD и удовлетворяет его требованиям, называют достоверным (valid) . XML-парсер, который обнаруживает не только синтаксические ошибки, но и проверяет достоверность документа XML. называется подтверждающим парсером (validating parser) . Хотя парсеры SAX2XMLReaderи XercesDOMParserне являются по умолчанию подтверждающими парсерами, в каждом из них предусмотрена функция подтверждения достоверности, которая может подключаться так, как это сделано в примерах 14.13 и 14.14. Аналогично парсер DOMBuilder, описанный в рецепте 14 4, может проверять достоверность документа XML, вызывая свой метод setFeaturе()с аргументами fgXMLUni::fgDOMValidationи true.

картинка 73Классы 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.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Д. Стефенс читать все книги автора по порядку

Д. Стефенс - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге C++. Сборник рецептов, автор: Д. Стефенс. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x