Используя объектную модель документа от 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 |
---|---|
| |
| |
| |
| |
| |
| |
| |
|
Два других заголовочных файла включены в Объектную модель документа 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
для кодов.