Аналогично приведенное ниже объявление атрибута указывает на то, что элемент 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.

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

Смотри также

Рецепт 14.6.

<p>14.6. Проверка документа XML на соответствие схеме</p>Проблема

Требуется подтвердить соответствие документа 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);

Перейти на страницу:

Похожие книги