C++. Сборник рецептов - [192]
>
>
> 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
>#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
>#include
>#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. Аналогично парсер
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.