NSXML и обработка XML

С набором NSXML Фундаментальных классов можно создать, управлять, запросить и изменить XML-документы различных типов, включая веб-страницы, конфигурационные файлы и файлы XML-отформатированных-данных. NSXML воздействует на абстрактные, логические древовидные структуры, представляющие XML-документы. У Вас могут быть эти древовидные представления, исписались как XML-документы. Можно также преобразовать их в другие деревья XML с помощью XSLT. Входными документами, выходными документами или преобразованными документами может быть HTML, а также XML. С NSXML можно также усвоить DTD (Определение типа документа) как древовидная структура и проверить XML-документ против его DTD.

Как технология, NSXML также включает поддержку XQuery 1.0 и XPath 2.0, позволяющих Вам выполнить запросы на XML-документах. Для получения дополнительной информации о XQuery и XPath, см. XQuery и Другую XML Technologies

Возможности NSXML

XML является повсеместным и все более и более важным форматом разметки документа для структурирования информации, которой можно примениться к фактически любая вычислительная цель. Формат так гибок, что приложения XML могут включать технологии, столь же разнообразные как публикация, электронный обмен данными, управление сетью и векторная графика. Привлекательность XML очевидна: Это - основанный на тексте, структурированный, межплатформенный формат хранения для данных любого вида.

Когда необходимо обработать информацию в XML-отформатированных источниках, можно использовать API NSXML в собственных приложениях. С NSXML можно создать, изменить, запросить и преобразовать XML-документы или страницы веб-сайта во всего нескольких строках кода. СТИЛЬ DOM основанная на дереве модель данных NSXML позволяет Вам вставить, удалить, и изменить узлы в любой точке в дереве. (Для обсуждения этой модели посмотрите Модель данных NSXML.) У Вас может или быть NSXML, читает существующий XML-документ во внутреннюю древовидную структуру, или можно создать древовидное представление с нуля. NSXML позволяет Вам искать определенные узлы и значения в дереве или обходом дерева или использованием языки запросов XPath или XQuery. Когда Вы закончили работать с XML-документом, можно попросить, чтобы древовидное представление распечатало себя, как упорядочено и должным образом структурированный XML или код XHTML.

Архитектурно, NSXML зависит от событийно-управляемого синтаксического анализатора XML для парсинга входных XML-документов, прежде чем он преобразует их в древовидные структуры. Общедоступный интерфейс Cocoa к этому синтаксическому анализатору является классом NSXMLParser.

NSXML не является лучшим решением для всех ситуаций, где должен быть обработан XML. Внутренние древовидные представления могут привести много в рабочее состояние памяти приложения, специально для операций, таких как проверка и трансформации XSLT. Если Вы просто должны найти определенные значения в XML-документе и не нуждаетесь в персистентном представлении XML для изменения, то лучшая альтернатива Какао является событийно-управляемой моделью синтаксического анализа, предлагаемой классом NSXMLParser.

В дополнение к методам, позволяющим Вам создавать и управлять узлами и значениями узла в древовидных структурах СТИЛЯ DOM, NSXML имеет много других функций, включая следующее:

Классы NSXML

Открытый интерфейс NSXML состоит из этих пяти Фундаментальных классов, перечисленных в Таблице 1. NSXML полностью поддерживает стандарт XML и может эффективно обработать самый большой из XML-документов. Это полагается на существующие Фундаментальные классы для предотвращения избыточности в ее программируемом интерфейсе.

Таблица 1  классы NSXML

NSXMLNode

NSXMLDocument

NSXMLElement

NSXMLDTD

NSXMLDTDNode

Первые три из этих классов в Таблице 1 для обработки XML. Как определено по условию модель XQuery (описанный в Модели данных NSXML) экземпляры этих классов или представляйте различные виды узлов дерева XML или, в случае узла документа, само все дерево. Объект узла NSXML представляет документы, элементы, атрибуты, пространства имен, комментарии, обрабатывая инструкции и текстовые узлы.

Последние два класса в Таблице 1 для создания и изменения Определений типа документа. Для обсуждения связанных с DTD узлов посмотрите DTD и Другие Схемы.

Очевидное преимущество объектно-ориентированной платформы состоит в том, что можно расширить и специализировать поведение посредством разделения на подклассы. Это преимущество применяется к NSXML. Например, если обрабатывающие инструкции играют особенно важную роль в Вашем приложении, Вы могли бы создать подкласс NSXMLNode, экземпляры которого представляют узлы инструкции обработки, способные к выполнению требуемых задач. Когда дерево создается во время фазы парсинга, NSXML позволяет Вам заменять своим подклассом класс NSXML. Для получения дополнительной информации о разделении на подклассы классов NSXML см. справочную документацию.

В группе классов, перечисленных в Таблице 1, NSXMLNode является базовым классом — все другие классы непосредственно наследовались от него. NSXMLNode определяет интерфейс и ряд атрибутов, характерных для объектов узла NSXML. Среди них вид узла, имени узла, строки или объектного значения узла, расположения узла относительно его одноуровневых узлов, уровня узла в древовидной иерархии и ссылок на родителя и дочерние элементы узла. Через NSXMLNode узел может счесть узлы смежными с ним в дереве; это может распечатать себя как XML (или DTD) текст разметки; и это может быть объект контекста для запросов XPath и XQuery.

XQuery и другие технологии XML

NSXML включает поддержку XQuery 1.0, язык запросов, который можно использовать, чтобы получить и интерпретировать информацию из других источников XML. Функциональный и язык со строгим контролем типов, XQuery воздействует на краткий обзор, логическую структуру XML-документа — его древовидного представления — а не на его поверхностном синтаксисе. (Этой логической структуре сообщают по условию модель, обсужденная в Модели данных NSXML.) Результатом запроса XQuery является последовательность элементов, каждый из которых является любой узлом (объект NSXML) или атомарное значение (строка, целое число, плавание, дата, и т.д.).

Основная синтаксическая единица в XQuery является выражением, составленным из символов, ключевых слов и операндов (которые всегда являются другими выражениями). Встроенные выражения XPath определяют местоположение узлов в дереве XML с помощью определенных критериев. Выражения FLWOR (для ключевых слов for, let, where, order, и return) сделайте более богатые и более точные операции возможными, включая сортировку, соединения и инверсии иерархии. XQuery также включает конструкцию узла (несмотря на то, что Вы не можете использовать его, чтобы присоединить или иначе управлять таким узлом в дереве NSXML). Можно использовать много встроенных функций XQuery, такой как replace, distinct-values, и avg, и можно создать собственные функции.

NSXML также поддерживает XPath как язык запросов. Можно использовать XPath для определения местоположения узлов в дереве XML на основе позиции, относительной позиции, имени узла, вида узла и нескольких других критериев. Поскольку XQuery 1.0 включает XPath 2.0, синтаксически допустимое выражение пути возвращает тот же результат на обоих языках.

NSXML представляет доступ к XQuery и XPath через два метода класса NSXMLNode:

- (NSArray *)nodesForXPath:(NSString *)xpath error:(NSError **)error;
- (NSArray *)objectsForXQuery:(NSString *)xquery constants:(NSDictionary *)constants error:(NSError **)error;

Объект узла, получающий эти сообщения, является узлом контекста для запроса. Обратите внимание на то, что последовательность (объект NSArray), что запрос XPath возвраты всегда содержит узлы, никогда атомарные значения.

NSXML также предоставляет Ваш доступ кода к Трансформации Расширяемого языка таблиц стилей (XSLT) технология. С XSLT можно создать таблицу стилей, указывающую образцы и шаблонные правила для изменения XML во входном дереве к по-другому структурированному XML в выходном дереве, или к HTML, XHTML, простому тексту или другим формам вывода. Тогда процессор XSLT выполняет трансформацию. Основное использование для XSLT преобразовывает XML-документ в документ HTML или XHTML. NSXML предоставляет Вам доступ к XSLT через следующие методы NSXMLDocument:

- (id)objectByApplyingXSLT:(NSString *)xslt error:(NSError **)error;
- (id)objectByApplyingXSLTAtURL:(NSURL *)xsltURL arguments:(NSDictionary *)argument error:(NSError **)error;

DTD и другие схемы

NSXML предоставляет некоторую поддержку для проверки XML и для создания и изменения Определений типа документа (DTDs).

Два класса NSXML, NSXMLDTD и NSXMLDTDNode, позволяют Вам, создают и изменяют DTDs как мелкую (двухуровневую) древовидную структуру. Экземпляр класса NSXMLDTD походит на NSXMLDocument, в котором это представляет весь DTD. Это функционирует как корневой узел, к которому экземпляры класса NSXMLDTDNode добавляются к как дочерние элементы (вместе с любыми узлами комментария или узлами инструкции обработки). Объекты NSXMLDTDNode представляют элемент, список атрибутов и объявления сущности различных видов. При чтении XML-документа с внутренним DTD NSXML обрабатывает тот DTD, создавая древовидное представление от него, составленное из NSXMLDTD и объектов NSXMLDTDNode (а также любые узлы комментария или узлы инструкции обработки). Любое дерево Вы изменяете или создаете Вас, может выписать как документ DTD.

NSXML может проверить документы, когда он первоначально обрабатывает их и позже по запросу. Когда Вы читаете и обрабатываете существующий XML-документ, и он имеет связанную схему (XML-схема или внутренний или внешний DTD), можно указать проверку запроса опции инициализации. Если документ успешно проанализирован и проверен, метод инициализации возвращает объект NSXMLDocument. Если проверка не успешно выполняется, метод сообщает об этом как об ошибке и не создает объект документа. Можно также проверить документ, поскольку Вы изменяете его; если изменение недопустимо, NSXML сообщает о причинах недействительности.