Опубликован: 10.12.2007 | Уровень: специалист | Доступ: платный
Лекция 1:

Основные концепции

Лекция 1: 12345678910 || Лекция 2 >

1.3. Платформа и ее концепции

Теперь давайте посмотрим на структуру самой платформы Mozilla. Платформа в контексте программирования - это программное обеспечение, которое разработчик может использовать в качестве основы для других продуктов. Используя функциональность платформы (полагаясь на нее), можно значительно упростить задачу создания приложения более высокого уровня. Программист может больше не тратить время на реализацию основных функций на языках вроде C.

Четыре основные концепции Mozilla - XUL, JavaScript, RDF и XPCOM. XUL - диалект XML, используемый для проектирования графических интерфейсов; JavaScript - язык скриптов с синтаксисом, похожим на синтаксис языка C; RDF - тоже диалект XML, используемый для хранения данных; XPCOM (Cross Platform Component Object Model, кроссплатформенная объектная модель программных компонентов) - система управления программными объектами. Эти четыре технологии будут подробно рассматриваться на протяжении нашей книги. Здесь мы только кратко охарактеризуем окружение, в котором данные технологии используются.

Основное достоинство платформы Mozilla - возможность создания графических, интерактивных приложений. Она не предназначена для использования при написании драйверов, серверов или систем пакетной обработки данных. Но с ее помощью можно с легкостью добавить графический интерфейс к таким программам.

1.3.1. Архитектура

Приложения от Netscape для работы в Internet, предшественники Mozilla, создавались в спешке и были не так структурированы и открыты, как хотелось бы, что значительно ограничило использование данных программ и очень мешало, когда приложениям версии 4.х пришлось конкурировать с Internet Explorer и Outlook Express от Microsoft по функциональности.

С тех пор Netscape, mozilla.org и программисты-энтузиасты потратили много времени, использовали все свои таланты и возможности, чтобы переработать этот пакет, разделив его на меньшие, более гибко взаимодействующие части. Некоторые не прижившиеся технологии были заменены на новые. Вместе эти части лучше организованы, чем ранее, и составляют современную платформу Mozilla. Именно эта гибкость и придает Mozilla свойства платформы, а не просто легко настраиваемого продукта.

1.3.1.1. Многоуровневый подход

Платформа Mozilla пытается удовлетворить потребности программистов нескольких разных типов и в результате может рассматриваться как набор частично независимых друг от друга уровней.

Самый нижний уровень отвечает за управление и реализацию большого набора объектов. Все эти объекты взаимодействуют внутри одного исполняемого файла, а их работа координируется встроенной посреднической системой. Эта система легко переносима, так как должна работать в разных операционных системах. В Mozilla она называется XPCOM и является ядром платформы. Прямой доступ к XPCOM возможен только с использованием языков C или C++. Система XPCOM написана очень аккуратно, так что ее можно компилировать и запускать в разных ОС. Файлы, реализующие объекты, которыми управляет XPCOM, можно найти в каталоге components стандартной установки Mozilla.

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

Некоторые из доступных в платформе объектов - довольно большие и сложные и могут обрабатывать XML. С их помощью программист может получить более удобное представление своих данных в XML. Это представление основывается на стандартах W3C DOM (www.w3c.org). То есть вместо написания собственной программы разбора XML на JavaScript программист может направить свой XML-документ специальному объекту, который после обработки выдаст набор интерфейсов более высокого уровня, например, интерфейс документа DOM 1. В этом случае в скрипте JavaScript следует просто обратиться к менеджеру объектов XPCOM и через него использовать несколько нужных объектов. Далее можно работать со всеми DOM-объектами, которые будут созданы XPCOM-объектами после обработки XML-документа.

Функциональность уровня DOM используется почти во всех средах программирования, где обрабатывается XML, в том числе и в web- страницах XHTML при создании скриптов динамического HTML. В случае web-страницы неочевидно, что DOM-объекты получены с помощью XPCOM, но это так. Часто на этот уровень вводятся некоторые улучшения, чтобы он мог включать и другие полезные объекты вроде window и navigator из JavaScript. Иногда накладываются и ограничения из соображений безопасности. Все это есть в Mozilla, и на данном уровне нам доступна среда для работы с разными типами данных в формате XML и HTML. Наиболее важно то, что для собственного диалекта Mozilla, XUL, тоже есть такая среда, это начальный уровень для создания графических интерфейсов приложения. Пример работы с DOM можно найти на любой HTML- странице со скриптами динамического HTML.

Некоторые объекты XPCOM сами выполняют различные действия для отображения графического интерфейса, в частности, они визуально организуют элементы и прорисовывают их. Часть платформы Mozilla, которая называется Gecko, содержит набор таких объектов. Эти объекты более высокого уровня автоматизируют отображение XML-документов, графики и текста. Если разработчику нужно, чтобы на экране была отображена какая-то информация, скрипт может отправить ее этим объектам, и она отобразится автоматически, так что использовать какие- то дополнительные программные средства не потребуется. Эта сторона платформы, возможность визуализации, проявляется в любом окне браузера.

Наконец, XML и объекты XPCOM можно связать вместе. Это делается с помощью связей XBL, шаблонов XUL или используются другие, менее очевидные, подходы. Таким образом, автоматическая обработка XML, выполняемая объектами XPCOM, доступна на более высоких уровнях при минимальных затратах на написание кода. Пример комбинации тегов и объектов, созданной с помощью XBL, - работа со вкладками в Mozilla.

И все-таки, если бы кроме этого платформа Mozilla ничего не содержала, это был бы всего лишь интерпретатор JavaScript вместе с большой библиотекой объектов - он не очень отличался бы от Perl, Tcl, Visual Basic или даже Java. В платформе же есть, кроме всего прочего, самый высокий уровень - оболочка приложения. Эта оболочка представляет собой код, связывающий вместе объекты XPCOM в одну исполняемую программу. Оболочка может автоматизировать и координировать выполнение различных задач, например, подключение к серверу, основную обработку документов, создание процессов; она и множество специализированных объектов XPCOM представляют собой готовую платформу для разработки. Она более полезна, чем простой набор библиотек, которые не могут ничего сделать, пока программист не обратится к ним. Оболочка приложения содержит также некоторые функции, позволяющие приложениям запускаться поверх платформы. Кроме того, это еще и механизм исполнения приложений для платформы. Файл mozilla (или mozilla.exe) - копия платформы, вызываемой из оболочки приложения.

Значительная часть работы программиста может быть выполнена путем просто создания XML-документов, которые затем передаются оболочке.

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

В оставшейся части обсуждения архитектуры мы рассмотрим некоторые ее уровни более подробно.

1.3.1.2. Модель компонентов XPCOM

Одно из важнейших достоинств Mozilla - ее внутренняя структура.

Сама платформа написана на языках программирования C и C++, и именно они используются на самом нижнем уровне. В случае простой программы на C/C++ добавление функциональности означает компилирование и компоновку с большим числом объектов или функций. Но если вы работаете над большим проектом, этот подход слишком непрактичен.

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

Менеджер объектов (он может называться каталогом объектов, службой именования объектов или службой обнаружения объектов) - это часть программы, которая отыскивает объекты и делает их доступными. Если все объекты предоставляют единый интерфейс, которым может пользоваться менеджер, со всеми объектами можно работать одинаково. Для достижения такого единообразия на объекты накладываются некоторые ограничения.

Каждому объекту Mozilla соответствует собственный компонент. Компоненты создаются из объектов и интерфейсов. Список всех доступных компонентов хранится в реестре компонентов (небольшая база данных). Служба именования компонентов находит соответствующий имени компонента объект (в терминах ООП это называется фабрикой). Разработчику доступны тысячи компонентов и интерфейсов. Вот пример имени компонента, записанного в форме идентификатора контракта. Цифра в конце строки указывает версию:

@mozilla.org/browser/httpindex-service;1

Инфраструктура, для которой стандартизованы эти объекты, называется XPCOM. Технология XPCOM немного похожа на CORBA и очень похожа на COM, две другие системы управления объектами.

CORBA (Common Object Request Broker Architecture, обобщенная архитектура брокера объектных запросов) - система для совместного использования объектов, написанных на любом из нескольких заданных языков программирования. Чтобы достичь этого, все интерфейсы объектов описываются с помощью независимого от языка синтаксиса, IDL (Interface Definition Language, язык описания интерфейсов). В Mozilla включен вариант спецификации CORBA IDL, он называется XPIDL (кроссплатформенный IDL). Это переносимый (не зависящий от аппаратной платформы и операционной системы) язык, использующийся для создания переносимого кода и библиотек типов.

COM (Common Object Management, общее управление объектами) - система для "склеивания" различных объектов, написанных для Microsoft Windows. Mozilla также включает вариант COM, который называется XPCOM (Cross Platform COM, кроссплатформенный COM). XPIDL и XPCOM в Mozilla работают вместе и образуют систему, которая управляет объектами, подобными объектам COM и описываемыми спецификациями, похожими на использующиеся в CORBA. XPCOM - не распределенная система вроде DCOM (Distributed COM, распределенный COM) и ограничивается одним компьютером и, на данный момент, одним исполняемым файлом. Хотя спецификации объектов похожи на используемые в CORBA, по функциональности XPCOM довольно полно дублирует COM.

Почти все версии Mozilla можно представить в виде компонентов XPCOM, и почти ко всем из них можно обращаться из скриптов JavaScript. Многие компоненты реализуют протоколы Internet или другие сетевые стандарты. Эта модель компонентов и доступные сетевые компоненты делают Mozilla похожей на миниатюрную версию платформы разработки .NET. Если компоненты платформы написаны на C/C++, как в основном и есть, значит, они должны быть написаны в соответствии со строгими правилами, соблюдение которых обеспечивает переносимость; набором таких правил и является XPCOM.

1.3.1.3. Поддержка XML

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

Поддержка XML в Mozilla полнее простого чтения файлов этого формата. Для работы с получаемыми XML-файлами в Mozilla существует развитая инфраструктура; в частности, в ней есть простая, но эффективная модель обработки RDF. Поддержку XML в Mozilla лучше всего рассматривать как систему, которая может взять XML из одного места и положить его в другое. Чтобы упростить этот процесс, можно применить несколько преобразований. Это могут быть слияние и фильтрация документов, работа с отдельными частями документов, операции вставки, обновления и удаления частей структуры документа и его содержимого.

Вот примерный список всех поддерживаемых Mozilla приложений XML: XML, XML Namespaces (пространства имен XML), XLink, XHTML (и HTML), MathML, SVG, XSLT (Extensible Stylesheet Language Transformations, преобразования расширяемого языка таблиц стилей), RDF, SOAP, WSDL (Web Services Description Language, язык описания веб-сервисов) и XML Schema.

В Mozilla также поддерживаются два уникальных (используемых только в этой платформе) приложения XML: XUL и XBL. Документы XUL описывают расположение графических элементов управления. Документы XBL предоставляют связи, с помощью которых объекты JavaScript и данные в формате XML могут быть вместе преобразованы в новые данные. XUL - ключевая технология для разработчиков приложений. Посмотрите на любое окно классической Mozilla: все, что вы в нем увидите (за исключением HTML), описывается XUL.

Для многих из перечисленных стандартов Mozilla поддерживает DTD (Document Type Definition, декларация типа документа), но ни для одного из них она не поддерживает определения в формате XML Schema. Из поддерживаемых стандартов для визуального отображения предназначены только XHTML/HTML, SVG, MathML, XUL и XBL. Остальные используются только для обработки данных.

1.3.1.4. Модель отображения данных Gecko

Чтобы показать пользователю данные из XML-документа, необходима какая-нибудь система отображения. Это работа для объектов внутри платформы, отвечающих за визуализацию и формирующих часть подсистемы отображения Gecko.

Правила, определяющие внешний вид документов XML (и частично, внешний вид HTML-документов), за последние несколько лет менялись. Если раньше эти правила встречались в таких стандартах как HTML, то сейчас они собираются в стандартах стилей, например, CSS, DSSSL (Document Style Semantics and Specification Language, язык для определения семантики и спецификации стиля документа) и XSL-FO (XSL Formatting Objects, объекты форматирования XSL). Эта тенденция отразилась и на платформе Mozilla, где внешний вид полностью определяется современной версией CSS 2, в которую включено множество специфичных для Mozilla расширений. Механизм обработки CSS 2 в Mozilla также является частью системы визуализации Gecko. Кроме того, в Mozilla CSS 2 используется и для печати.

XML-документы изменяемы. Если они скачиваются с удаленного узла, загрузка может происходить по частям. Если на них может влиять программист, они могут увеличиваться или уменьшаться. В современных средствах отображения должна быть реализована сложная модель содержимого документа, чтобы предусмотреть возможность изменения отображаемого документа. Mozilla содержит систему отображения данных третьего поколения - также часть Gecko, - чья архитектура сопоставляется с более ранними вариантами такой системы в списке, представленном ниже. Хотя здесь имеется в виду XML, самый очевидный пример системы отображения - система отображения HTML.

Стратегия 1а. Читать все теги из XML-документа по одному и отображать документ по мере чтения. Прервать отображение, если для следующего шага получено недостаточно тегов, что вынуждает пользователя ждать. Самые первые браузеры вроде Netscape 1.0 обрабатывали так HTML.

Стратегия 1б. Считать все теги из XML-документа в память, заставив пользователя ждать. Проанализировать документ. Отобразить весь документ за раз. Ни один из популярных браузеров этого не делал, но пакетная обработка в XSLT в специальном ПО для печати проходит примерно так.

Стратегия 2. Читать все теги из XML-документа по одному и отображать страницу, используя метки-заполнители для ожидаемых данных, которые еще не прочитаны. Когда данные получены, динамически заменить ими эти метки. Перерисовывать весь документ при получении новых данных, чтобы аккуратно вставить их. Так поступают Internet Explorer 4.0+ и Mozilla 1.0+.

Стратегия 3. Читать теги так же, как это описано в стратегии 2, но при этом постараться прочитать и служебную информацию. Когда пользователь или сервер меняет служебную информацию, загружать или удалять соответствующие данные и обновлять отображение документа. Делать это даже после полной загрузки документа. Так поступает Mozilla 1.0+, используя в качестве служебной информации данные в формате RDF.

Реализация модели отображения из стратегии 3 довольно сложна, поэтому и внутренняя структура Mozilla, отвечающая за это, тоже очень непростая.

1.3.1.5. Поддержка web-стандартов

Поддержка стандартов для отображения web-страниц в Mozilla - лучшая из существующих. Ближайший конкурент Mozilla - браузер Opera. Хотя эта книга не о HTML, краткий обзор будет полезен, так как HTML можно комбинировать с XUL.

Для отображения HTML Mozilla может использовать один из трех режимов: режим совместимости, режим строгого соответствия стандартам и режим нестрогого соответствия стандартам. Первый из них больше всего подходит для поддержки HTML 4.01 и более ранних версий. Режим строгого соответствия используется только для XHTML 1.0. Режим нестрого соответствия очень похож на режим строгого соответствия, но работает и с теми web-страницами, которые не очень красиво выглядят, если применять к ним строгие стандарты. Режим отображения выбирается на основе директив в начале документа. Во всех режимах разрешено использовать некоторые расширения стандартов, и эти расширения существуют.

Дополнительно Mozilla поддерживает стандарты HTTP 1.1; CSS 2; DOM 0, 1 и 2; ECMAScript версии 3 (JavaScript). Поддержка каскадных таблиц стилей в Mozilla не только соответствует стандартам, но и содержит некоторые собственные расширения, которые должны войти в CSS 3, или просто новаторские. DOM 3 поддерживается лишь частично. Mozilla также реализует некоторые рекомендации W3C для облегчения работы людям с ограниченными физическими возможностями.

Мир HTML уменьшается до нескольких небольших не очень объемных отдельных стандартов и стандартных модулей, которые вместе и составляют HTML. Mozilla поддерживает XLink, но не XForms. Аналогично одни модули DOM 3 поддерживаются, а другие нет. Так как Internet Explorer поддерживает только DOM 1, Mozilla на голову впереди этого браузера в гонке по реализации стандартов. В "Скрипты" , посвященной написанию скриптов, соответствие стандартам DOM рассматривается более подробно.

1.3.1.6. Собственные теги и объекты

Mozilla содержит спецификацию механизма для объединения тегов XML (текста) и скомпилированных объектов. Этот язык называется XBL, приложение XML, созданное для Mozilla. Вместе с XBL обычно используются JavaScript, CSS и другие приложения XML.

С помощью XBL можно определить тег XML и его свойства и методы. Этот тег связывается с какой-либо инструкцией по обработке. В W3C такие инструкции называются действием (action), но они более известны как поведение (behavior, термин Microsoft). В Mozilla эти инструкции создаются в виде полностью объектно-ориентированного определения объекта. Привязка нового тега к инструкции называется связкой (binding). Инструкция может быть написана так, чтобы иметь возможность использовать все сервисы, предоставляемые платформой, в том числе объекты XPCOM и другие теги с собственными связями.

Так как XBL позволяет определять новые теги, Mozilla приходится быть достаточно либеральной при обработке данных. Любой тег XML может оказаться определенным в каком-либо другом месте. XBL вносит свой вклад в практически нулевую проверку корректности документов в Mozilla. Это будет обсуждаться ниже в разделе "Следствия".

Лекция 1: 12345678910 || Лекция 2 >
Дмитрий Гуменюк
Дмитрий Гуменюк
Россия, Звенигород
Konstantin Grishko
Konstantin Grishko
Россия, Москва, Московский финансово-промышленный университет "Синергия", Москва