Используя объектную модель документа от Objective C

Объектная модель документа API реализует спецификацию Объектной модели документа (DOM) Уровня 2, разработанную Консорциумом World Wide Web. Эта спецификация обеспечивает платформу и нейтральный языком интерфейс, позволяющий программам и сценариям динамично получать доступ и изменять содержание, структуру и стиль документа — обычно HTML или XML — путем обеспечения структурированного набора объектов, соответствующих элементам документа.

Намерение Objective C DOM API состоит в том, чтобы соответствовать — настолько же близко как технически возможный — W3C спецификация DOM. Поэтому стандартные соглашения Какао, такие как именование метода, создание заголовков параметра и обработка исключений не могут быть отражены в этом API. После нескольких соглашений, обсужденных в этой статье, можно получить Objective C DOM API из спецификации. Эта статья также обсуждает различия между спецификацией DOM и Objective C DOM API.

Расширения WebKit спецификации DOM покрыты Использованием Расширений Объектной модели документа. Отошлите к WebKit Темы Программирования DOM для получения дополнительной информации о спецификации DOM.

Интерпретация спецификации DOM

Спецификация DOM записана в файлах Языка определения интерфейсов (IDL), доступных на веб-сайте W3C. Ссылки к ним были предоставлены в следующем списке. Objective C DOM API определяется заголовочными файлами в платформе WebKit, расположенной в: /System/Library/Frameworks/WebKit.framework. Вот является список спецификации DOM файлами IDL и их связанными заголовочными файлами Objective C:

W3C DOM файл IDL

WebKit заголовочный файл DOM

dom.idl

DOMCore.h

views.idl

DOMViews.h

events.idl

DOMEvents.h

html2.idl

DOMHTML.h

stylesheets.idl

DOMStylesheets.h

css.idl

DOMCSS.h

traversal.idl

DOMTraversal.h

ranges.idl

DOMRange.h

Два других заголовочных файла включены в Объектную модель документа API. DOM.h заголовочный файл удобства, просто включающий все другие заголовочные файлы DOM. DOMExtensions.h определяет дополнения, не указанные спецификацией DOM. Используйте расширения, чтобы помочь Вашим методам DOM взаимодействовать с остальной частью WebKit и использовать некоторые более высокие возможности WebKit, такие как редактирование HTML. Больше информации доступно в статье Using the Document Object Model Extensions.

Интерфейсы, указанные DOM файлы IDL, отображаются на классах Objective C. Когда спецификация не конфликтует с пространствами имен Objective C, Java или других общих языков, имена интерфейсов неизменны. Например, DOMImplementation интерфейс в Ядре DOM IDL отражается тем же именем в Objective C DOMCore заголовочный файл. Где пространства имен конфликтуют, префиксы API конфликтный интерфейс соответственно. Например, Ядро DOM IDL’s Node интерфейс появляется как DOMNode в его отображении Objective C.

Эта схема именования также расширяется на константы. Группы API DOM постоянные списки в Objective C enum типы, и если конфликт пространства имен присутствует, префиксы API их с надлежащим идентификатором. Например, ELEMENT_NODE постоянный тип узла отражается как DOM_ELEMENT_NODE в Objective C.

Некоторые имена, указанные спецификацией DOM, могут конфликтовать с ключевыми словами или другими зарезервированными словами в Objective C. Когда это происходит, им дают пользовательские отображения, и их имена Objective C должны быть выведены из заголовков или из документации. API предоставляет пользовательским отображениям надлежащие имена. Например, два конфликтных идентификатора id и name (оба зарезервированных слова Objective C), отображаются на idName и frameName, соответственно, и точно отразите намерение спецификации.

Каждый класс Objective C происходит, прямо или косвенно, от корневого объекта DOM DOMObject. Это - подробность реализации, размещающая перекрестный трафик между WebKit и DOM. Иерархия интерфейсов, как определено спецификацией W3C также сохраняется. Например, DOMDocument расширяется от DOMNode в спецификации, а также в API.

Имена методов отображаются в Objective C непосредственно от спецификации без перехода пространства имен. Однако методы с многократными параметрами в спецификации DOM не указывают метки для своих параметров — это поведение продолжается в методы Objective C. Например, спецификация объявляет этот прототип метода:

Node insertBefore(in Node newChild, in Node refChild);

Версия Objective C не, как Вы могли бы ожидать, измененный на что-то как:

- (DOMNode *)insertNewChild:(DOMNode *)newChild
                BeforeOld:(DOMNode *)refChild

Фактический прототип Objective C:

- (DOMNode *)insertBefore:(DOMNode *)newChild
                        :(DOMNode *)refChild

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

API отображает другие объекты на их надлежащие эквиваленты. Например, это отображается DOMString объекты к NSString. Все другие типы (такой как void, boolean,float, и unsigned long) отображаются на их соответствующих типах Objective C. Атрибутам, которые и читаемы и перезаписываемые, также дают, Стиль какао получают/устанавливают методы доступа. Например, DOMCore IDL указывает этот атрибут:

attribute DOMString nodeValue;

Objective C получает доступ к этому атрибуту с помощью этих методов:

- (NSString *)nodeValue;
- (void)setNodeValue:(NSString *)nodeValue;

Обработка исключений

API также отображает исключения от спецификации DOM до Objective C. Методы, повышающие исключения DOM также, повышают исключения Objective C (NSException), но потому что исключения Objective C не являются частью интерфейса метода, как они находятся в спецификации DOM, имена класса исключений отображаются на строковых константах. Основные классы исключений повышены как DOMException, DOMEventException, и DOMRangeException, и может предупредить Вас с любым числом кодов исключений. Посмотрите DOMCore.h, DOMEvents.h, и DOMRange.h для кодов.