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 имеет много других функций, включая следующее:
Объектные значения. Узлы всех видов, но особенно элементы и атрибуты, могут иметь значения, связанные с ними. Эти значения обычно являются строками, но можно указать объектные значения для узлов, представляющих нестроковые типы, такие как десятичное число,
float
, и дата. Ваше приложение может, например, интерпретировать формат строкового значения и преобразовать его в объект NSNumber или NSCalendarDate. Когда Вы просите строковое значение объекта NSXML, и его значение установлено как объект, NSXML возвращает строку, отформатированную как канонический тип согласно XML-схеме W3C: спецификация Типов данных (http://www .w3.org/TR/xmlschema-2/). Можно также определить строковые представления пользовательских объектов.Узлы DTD. NSXML анализирует внутренние Определения типа документа (DTDs) и составляет деревья, представляющие структуру объявлений. Среди узлов таких деревьев объекты, представляющие объекты, объявления списка атрибутов и объявления элемента. Можно программно изменить такие деревья или даже создать их с нуля и затем выписать новый или измененный DTD. Когда NSXML обрабатывает XML-документ, он, если требуется, может проверить его против внутреннего или внешнего DTD. Посмотрите DTD и Другие Схемы для получения дополнительной информации.
Пространства имен. NSXML позволяет Вам различать элементы и атрибуты в различных пространствах имен в XML-документе. С методами в NSXMLNode и классах NSXMLElement можно создать узлы пространства имен, связать их с элементом и его атрибутами, элементами запроса для их заявленных пространств имен, и иметь префиксы решения пространств имен динамично против пространства имен URIs и локальные имена, связанные с атрибутами и элементами.
Приведите в порядок XML и HTML. NSXML использует инструмент с открытым исходным кодом, проверяющий и исправляющий HTML и XML-документы для создания их совместимыми с Консорциальными стандартами Всемирной сети (W3C). Когда HTML «приведен в порядок», это преобразовывается в XHTML. Вы запрашиваете опрятный XML или HTML как опция в инициализации и выводите методы.
XQuery и XPath. С XQuery или XPath, можно быстро определить местоположение определенных узлов или значений в XML-документе, и можно преобразовать или создать узлы XML или даже документы. См. XQuery и Другую XML Technologies для получения дополнительной информации.
XSLT. NSXML позволяет Вам применить XSLT (Трансформации Расширяемого языка таблиц стилей) к объекту XML-документа (NSXMLDocument). XSLT преобразовывает один XML-документ в другой XML-документ или документ в другом формате, таком как XHTML, HTML, RTF или простой текст. Это делает это путем применения ряда образцов и обрабатывает правила по шаблону. XQuery и Другая XML Technologies обсуждают XSLT более подробно.
XInclude. NSXML поддерживает XInclude, позволяя Вам объединить XML из других источников в текущий документ.
Привязка. Классы NSXML соответствуют протоколу кодирования значения ключа и реагируют на наблюдателей, соответствующих протоколу наблюдения значения ключа. Следовательно можно связать атрибуты объектов NSXML к свойствам объектов пользовательского интерфейса через классы контроллера Какао.
Классы NSXML
Открытый интерфейс NSXML состоит из этих пяти Фундаментальных классов, перечисленных в Таблице 1. NSXML полностью поддерживает стандарт XML и может эффективно обработать самый большой из XML-документов. Это полагается на существующие Фундаментальные классы для предотвращения избыточности в ее программируемом интерфейсе.
Первые три из этих классов в Таблице 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 сообщает о причинах недействительности.