Отправляет email-рассылки с помощью сервиса Sendsay

Программирование на Visual С++

  Все выпуски  

Программирование на Visual С++ - No.80 (Что такое XML)


Информационный Канал Subscribe.Ru


  ПРОГРАММИРОВАНИЕ    НА    V I S U A L   C + +
РАССЫЛКА САЙТА       
RSDN.RU  

    Выпуск No. 80 от 23 февраля 2003 г.
    Подписчиков: 20005

РАССЫЛКА ЯВЛЯЕТСЯ ЧАСТЬЮ ПРОЕКТА RSDN , НА САЙТЕ КОТОРОГО ВСЕГДА МОЖНО НАЙТИ ВСЮ НЕОБХОДИМУЮ РАЗРАБОТЧИКУ ИНФОРМАЦИЮ, СТАТЬИ, ФОРУМЫ, РЕСУРСЫ, ПОЛНЫЙ АРХИВ ПРЕДЫДУЩИХ ВЫПУСКОВ РАССЫЛКИ И МНОГОЕ ДРУГОЕ.

Добрый день, уважаемые читатели!

Прежде всего, пока не забыл, поздравляю вас с праздником - Днем Защитника Отечества! ;-)

Итак, пришло время подвести итоги голосования о возобновлении рассылки, о котором, если вы помните, я объявил в предыдущем специальном выпуске. Прежде всего, большое спасибо всем тем, кто не поленился сделать четыре клика мышкой и высказал свою точку зрения.

Всего за время с 6-го февраля проголосовало 1385 человек - это примерно 7% от общего числа подписчиков рассылки.  Если бы это были выборы Президента, они были бы признаны несостоявшимися, и никакие конституционные суды не смогли бы постановить обратное. К счастью, у нас масштаб все-таки поменьше; к тому же нужно учитывать, что в общее число подписчиков входит большое количество "мертвых"  адресов и тех, кто рассылку получает, но не читает. Так что число активных подписчиков на самом деле гораздо меньше, и 1385 голосов в принципе можно считать достаточно репрезентативной выборкой.

Вердикт голосования однозначен: за "возобновить" проголосовало 1323 человека, против возобновления высказалось 32 человека, и еще 30 человек сказали, что их не волнует исход голосования. Итого, "за" - 95,5%, "против" - 2,3%, "все равно" - 2,2%. Без комментариев ;-)

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

На втором месте по популярности мнение о том, что рассылку следует возобновить, так как ее приятнее читать, чем статьи на сайте. Этот вариант ответа набрал 23 с небольшим процента голосов. За прямо противоположное же мнение - что рассылку НЕ так приятно читать, проголосовало 3 человека.

Далее - под номером "3" - идет забота о людях, имеющих только электронную почту и не имеющих доступа в интернет. (Причем наверняка голосовали за этот вариант те, у кого интернет все-таки есть ;-) Этот вариант ответа набрал 15 процентов голосов.

10% подписчиков будут читать рассылку только в том случае, если в ней будут публиковаться статьи и другие материалы, которые не найти на сайте. Честно скажу, это будет немного затруднительно, т.к. рассылка основана на материалах сайта. Но кое-что я думаю можно будет сделать, например публиковать статьи из RSDN Magazine сначала в рассылке, и только потом выкладывать их на сайт. В общем, посмотрим.

Итак, голосование можно считать завершенным. Еще раз - огромное спасибо всем проголосовавшим. Можете считать, что рассылка будет выходить специально для вас ;-))


 CТАТЬЯ

Что такое XML?

Хотели бы вы иметь возможность публиковать документы, доступные всем и везде, независимо от типа браузера, окружения клиента, типа носителя и т.д? XML вполне подходит для того, чтобы предоставить такую возможность. XML, или Язык Расширяемой Маркировки — eXtensible Markup Language, — спроектирован для того, чтобы предоставить Web-разработчикам возможность определения содержания более сложных документов, причем с более корректным “отображением данных”, нежели ранее. В сегодняшней ситуации средний Web-разработчик использует HTML при работе как с презентационными, так и со структурированными данными. Хорошим примером может послужить таблица в документе.


<TABLE id=TABLE1 border=1 align=center>
  <TR Align=center align=middle>
 <TD>Product ID</TD>
 <TD>Product</TD>
 <TD>Version</TD>
  </TR>
  <TR>
 <TD>500</TD>
 <TD>PowerProduct</TD>
 <TD>5</TD>
  </TR>
  <TR>
 <TD>501</TD>
 <TD> PowerProduct</TD>
 <TD>5</TD>
  </TR>
  <TR>
 <TD>502</TD>
 <TD>PowerProduct</TD>
 <TD>6.01</TD>
  </TR>
</TABLE>

Из этого примера можно сделать вывод. Во-первых, структура таблицы, как и ее представление обслуживаются одними и теми же тэгами. Для того, чтобы обеспечить согласованность и возможность повторного использования их следует разделить. Это можно сделать, используя таблицы стилей. А как насчет данных? После отделения презентационной информации у нас остается набор табличных тэгов с неразличимой структурой. Будет очень сложноопределить соответствие между отдельными частями данных или понять данные как таковые. Можно использовать схему, которая для получения определенной последовательности использовала бы атрибут ID (для каждого тэга), но этот подход будет слишком сложным и недостаточно гибким. Предположим, что вам требуется запросить данные и определить последнюю версию PowerProduct. Как различить две строки из нашего примера? Первая строка таблицы относится к корпоративной версии PowerProduct, а вторая строка является desktop-вариантом. В этом примере можно продолжать добавлять данные, но будет ли возможность определить, какой строке соответствует данный столбец? Как выясняется, при определении этого соответствия существует ограничение, которое связано с местоположением данных. Если для поиска в базе данных применять именно такую логику, то существует опасность вскоре расстаться со своим рассудком.

Одной из важнейших возможностей XML является возможность использования метаданных для определения структуры данных. XML полностью дополняет HTML, использующийся для представления данных. Так же, как и HTML, XML состоит из элементов, причем они определяют содержание, а не представление. Как таковой, XML является не языком, а системой, определяющей язык. Например, при помощи XML предыдущая таблица может быть определена следующим образом:


<inventory>
  <product id="500" version="5">PowerProduct
  </product>
  <product id="501" version="5">PowerProduct
  </product>
  <product id="502" version="6.01">PowerProduct
  </product>
</inventory>

или

<inventory>
  <product>
    <id>500</id>
    <version>5</version>
    <name>PowerProduct</name>
  </product>
 ...more products
</inventory>

Каждый пункт идентифицируется элементом, который однозначно определяет содержащиеся в нем данные. Первый элемент <inventory> идентифицирует набор связанных порций информации. Второй элемент — <product> — идентифицирует определенные порции информации. Тэг <product> может использовать атрибуты, которые более детально определяют данные, содержащиеся в элементе (как в первом примере), либо можно определять отдельные элементы для каждой порции информации и не пользоваться атрибутами вообще. При этом уровень модульности продолжает находиться под контролем. По мере надобности, для более детального разделения данных, могут быть добавлены атрибуты, а для определения отдельных порций информации — заданы дополнительные элементы. Используя объектно-ориентированную модель XML можно запрашивать документ из различных окружений, таких как JavaScript, VBScript, Java™ и т.д. В дополнение, существует возможность точного определения, как каждый элемент документа связан с другими элементами и как каждый из элементов должен обслуживать свои данные. Важно помнить, что XML структурирует свои данные по принципу дерева с главными и подчиненными узлами. В нашем примере <inventory> — главный элемент по отношению к <product> и с использованием этой связи может быть указан в ссылке. При создании XML-документа создается древовидная структура. XML не занимается отображением данных; он берет на себя вопросы адресации и организации данных. XML может рассматриваться как язык описания данных.

Маркирование текста

В дополнение к определению “набор ориентированных" данных, XML может использоваться и для разметки обычного текста. В качестве примера воспользуемся следующим предложением:

В последнем квартале продажа Продукции А превысила на 6,5 % продажи 3-го квартала. Увеличение дохода показывает, что продажи Продукции А потребителю имеют соотношение с корпоративными продажами как 2 к 1.

Теперь представим, что нам нужно найти этот документ на Web-сайте. Что же следует искать? Обычные поисковые программы не будут просматривать весь текст документа — такой тип поиска не практичен. Вместо этого происходит поиск определенной строки, заголовка или описания документа, встроенного в документ в виде метаданных. Облегчим свою задачу.

В последнем квартале продажа <product>Продукции А</product> превысила на <qtrincrease>6,5 </qtrincrease>% продажи 3-го квартала. Увеличение дохода показывает, что продажи <product>Продукции А</product> потребителю имеют соотношение с корпоративными продажами как 2 к 1.

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

XML и DTD

XML произошел из SGML (Standard Generalized Markup Language — Стандартный Обобщенный Язык Описания Документов). XML — это поднабор, включающий в себя множество возможностей SGML. SGML обеспечивает возможность определения языка, предоставляя средства, необходимые для определения правил, которые должны выполняться в случае, если определенный тип процессоров обнаруживает документ определенного типа. Так, с помощью SGML был создан HTML. HTML используется браузерами или любыми типами процессоров, которым он понятен. В работе HTML используется Определение Типа Документа — Document Type Definition, или DTD. В основном DTD — это комбинация определений типа документа и элементов, составляющих этот документ. DTD может определяться внутри документа, при этом оставаясь доступным (в том числе и для ссылок) извне. XML-процессор использует DTD для определения корректности документа. Корректным является документ, соответствующий всем правилам, определенным DTD. Возьмем, к примеру, HTML. DTD последнего определяет отдельные тэгтэги, составляющие HTML, например, <B> или <P>. DTD, отображенный в этих примерах полужирным тэгом <B> должен быть в паре с другим тэгом, а <P> может быть без закрывающего тэга.

DTD позволяет указать, сколько элементов связано друг с другом. Например:


<product>
 <id>
 <name>
 <version>
</product>

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


<!ELEMENT product (id+,name+,version?)>

Определение элементов в этом примере, выполнено с помощью одного из объявлений, доступных при определении DTD. Оно “говорит”, что у нас есть базовый элемент, называемый product и содержащий три подчиненных элемента. Подчиненные элементы отделяются запятыми, что говорит о последовательности их появления. Это означает, что элементы должны появляться один за другим. Есть и другие операторы, которые использовались для задания этого отношения. Следует обратить внимание на знаки “+”, следующие за двумя из подчиненных элементов. Они означают, что эти элементы необходимы и не могут находиться вне XML-документа, использующего данный DTD. Знак “?” показывает, что этот элемент не является обязательным.

Теперь следует определить каждый элемент. Можно использовать такой тип объявления:


<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT version (#PCDATA)>

PCDATA — это резервное имя, описывающее базовые элементы и представляющее тип данных, содержащихся в элементе. Оно означает наличие символьных данных, которые могут быть подвергнуты грамматическому анализу. Есть и дополнительные способы определения содержания элемента, а также атрибутов, которые могут содержаться в элементе.

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

Существует еще много всего, что можно было бы обсудить в связи с DTD, но думается, что следует остановиться. Наверное, меньше всего хочется сесть и, что называется, начать создавать новый язык, не правда ли? Что ж, пока не следует разгоняться, поскольку это не получится, пока... этого не захочется делать. Сегодняшний рынок предлагает синтаксические анализаторы для определения как корректности, так и некорректности документов. Корректный XML-документ должен соответствовать доступному DTD, в то время как просмотр остальных документов будет доступен всем. Однако, все документы, должны быть хорошо оформлены.

Правильно оформленный XML-документ

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

Правило №1 — Все элементы должны корректно открываться, закрываться и быть вложенными.

Например.
Это корректно:


<name> Jane <address> Main Street </address> </name>

Это не корректно:


<name>Jane<address>123 Main </name></addess>

Как и это:


<name>Jane<address>123 Main</name>

XML не позволяет иметь незакрытые элементы. Так, если элементу не нужен закрывающий тэг (как в случае при отсутствии содержимого), это следует отражать при определении открывающего тэга элемента. Это можно сделать, завершая тэг символом "/". <image url="my_face.jpg" />

Почему это правило необходимо? Вспомним, что XML-документам не нужно Определение Типа Документа (DTD – Document Type Definition). Без DTD процессор не может “понять”, нужен элементу закрывающий тэг или нет, так что по умолчанию каждый элемент должен быть закрыт тем или иным способом.

Правило №2 — Все значения атрибутов должны заключаться в кавычки. (В конце концов, существует стандарт.)


Это верно:
<product version="5">
Это неверно:
<product version=5>

Правило №3 — XML чувствителен к регистру. Можно пользоваться любым регистром, но следует быть последовательным.

<product> в нашем примере допустимо, в то время как <Product> или <PRODUCT> — нет.

Правило №4 — Свободное место не игнорируется. Следующие два примера будут интерпретироваться по-разному.


<title>
<name>The mysterious mathematician</name>
</title>


<title>
<name>
    The mysterious mathematician
</name>
</title>

Это — базовые правила XML. Если документ отвечает этим требованиям, он считается правильно оформленным. Если документ этим требованиям не удовлетворяет он просчитываться не будет. Можно ли вообразить, что бы было, если бы это относилось и ко всем HTML-документам? Как видите, создать XML-документ предельно легко. Особенно, если уже знать HTML.

XML в IE

Microsoft предлагает два способа для реализации XML в браузере. Первый — это синтаксический анализатор, написанный на С++. Второй — исходный код для синтаксического анализатора Java, который может быть получен по модему и включен в приложение.

Версия С++ не проверяет корректность, поэтому обеспечивает более высокое быстродействие. Она загружается браузером как DLL. В зависимости от используемого браузера, для работы с XML-данными и генерации HTML или DHTML в браузере можно использовать языки типа JavaScript или воспользоваться Microsoft Data Source Object (DSO).

В следующем примере XML-документ загружается в анализатор синтаксиса, написанный на С++ в IE 4.0.


<SCRIPT LANGUAGE=JavaScript>
function loadDocument()
{
 ...

// создаем экземпляр парсера
var xmldoc = new ActiveXObject("msxml");

// загружаем xml-документ
xmldoc.url = "http://mysite.com/mydoc.xml"

// используем объектную модель XML для доступа к свойствам документа
var parentdata = xmldoc.root.children;
var childdata = parentdata.item(0).children;

//.используем эти ссылки для доступа к данным
</SCRIPT>

Этот пример можно использовать для генерации HTML или DHTML из результатов запросов, либо для визуализации данных можно использовать Microsoft DSO. В этом случае вы можете воспользоваться возможностями DHTML для подключения (data binding) XML-данных к. IE 4.0 позволяет осуществлять доступ к документу, запрашивать из него данные, а затем — визуализировать их в виде HTML.

XML в Netscape

Netscape предлагает поддержку XML-метаданных в Формате Описания Ресурсов (Resource Description Format — RDF), одном из приложений XML в Netscape 5.0. RDF — это способ описания и доступа к данным. Не следует забывать, что XML-приложения это специализированные языки, такие как Формат Определения Канала (Channel Definition Format), в реализации Microsoft. RDF — это одна из таких реализаций.

Netscape планирует включить общий синтаксический анализатор XML, который бы работал с другими XML-приложениями, такими как Chemical Markup Language (CML) and Mathematical Markup Language (MML) — Химический и Математический языки маркировки.

Даже несмотря на то, что два браузера могут реализовываться по-разному, оба пригодны для выполнения загрузки, синтаксического анализа и отображения XML-документов (с или без DTD). Спецификации XML, связанных с ним DTD, XSL, XLL и объектно-ориентированной модели есть на домене W3C и будут поддерживаться всеми значимыми персонажами. Чтобы всегда иметь свежую информацию, почаще обращайтесь на сайт W3C и на сайты поставщиков.

XLL

В данный момент разрабатывается спецификация соединения XML (XML Linking Specification — XLL). Она определяет, как именно XML-документ будет обслуживать ссылки на содержимое. Не вдаваясь в подробности скажем, что это серьезно увеличит гибкость работы с ресурсами. Одной из возможностей XLL является управление семантикой соединения. Например, два атрибута XLL — это SHOW и ACTUATE. SHOW позволяет определять, когда подключенный ресурс встраивается в текущий документ или заменяет текущий документ, либо отображает в новом окне инициирование соединения. ACTUATE определяет, каким образом инициируется соединение — автоматически или по указанию пользователя.

XLL определяет несколько типов соединений. Простым считается соединение, которое очень напоминает стандартные HTML-соединения.


<LINK XML-LINK="SIMPLE"
HREF="resource">Link Text</LINK>

Ресурс из этого примера может быть URL, запросом или расширенным указателем.

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

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

XSL

XSL используется для управления презентационными характеристиками XML-документа. XML позволяет семантически маркировать документ, что обеспечивает лучшую связь с необходимым содержимым или данными. После того, как данные были маркированы определенными тэгами, в информации о том, как должны отображаться данные, нет необходимости. Как же должны отображаться данные — в виде таблицы, графика или абзаца?

Одним из способов определения, как должен отображаться XML-документ — это использование процессора Расширяемого Языка Стилей (Extensible Style Language — XSL) и списка стилей XSL. XSL-процессор комбинирует XML-документ со спецификацией XSL и создает результат, который для браузера будет HTML, но может быть и любого другого выходного типа — например RTD, необработанный текст и т.д.

XML рассматривается как преемник SGML, а этим подразумевается, что XSL тоже много черпает из некоторых спецификаций стилей SGM. Поскольку SGML стал международным стандартом взаимодействия документов, было бы разумно стили, определяющие то, какими должны быть документы, тоже стандартизировать. В результате мы имеем Язык Семантики и Спецификации Документов (Document Style Semantics and Specification Language — DSSSL). Однако, ранее коммерческих приложений с поддержкой DSSSL, не хватало.

Сейчас существует стандарт HTML, называемый Списки Каскадных Стилей (Cascading Style Sheets — CSS). Этот стандарт предусматривает расширенные возможности при переопределении умолчальных представлений HTML-тэгов, но этого иногда недостаточно, например, при переопределении тэгов и для наследования характеристик от главных или равноправных элементов. Этим и многим другим занимается XSL. Фактически, XSL можно рассматривать как комбинацию большинства возможностей DSSL (без увеличения усложненности) с совместимостью и легкостью в использовании CSS. Это — действительно лучшее, что можно было взять из того и другого.

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

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


<rule>
  <target-element type="name" />
  <P color="blue" font-style="bold">
  <children/></P>
</rule>

Если это правило относить к XML-документу, это выглядело бы:


<P style="color:blue;" font-style="bold"> PowerProduct</P>

XSL продолжает разрабатываться, поэтому официального стандарта еще нет. Однако, информацию, касающуюся технологии XSL (и связанных с ней технологиях, упомянутых в этой статье) можно найти на www.w3c.org.

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

Каждый разработчик может определиться в том, как следует использовать XML в своей работе. Среди вопросов, которыми следует задаться, например, такие. Насколько большие объемы данных должны публиковаться в Web? Приходится ли переделывать код при каждом появлении новой версии HTML? Используются ли данные, которые должны изменяться, должны быть готовы к визуализации и предназначены для обмена с другим приложением, без постоянной реструктуризации? Не будет ли более удобно разрабатывать приложения, ориентирующиеся на данные, которые смогут использоваться и по завершении жизненного цикла существующих браузер-технологий?

Это звучит привлекательно не без оснований. XML устраняет многие ограничения при создании гибкого содержимого столь стремительно меняющейся отрасли. Используемость этой технологии будет определяться приемлемостью стандартов в зависимости от стилей, моделей объектов, реализаций браузеров и возможностей соединений. Типы приложений и их приемлемость тоже не последние факторы, которые могут повлиять на рассмотрение XML в качестве панацеи от многих проблем Internet-разработчиков. Время рассудит, но думается, что в будущем эта технология будет не последней скрипкой в симфонии Web-разработки.

Впервые эта статья была опубликована в журнале <Технология Клиент-Сервер>.
Эту и множество других статей по программированию, разработке БД, многоуровневым технологиям (COM, CORBA, .Net, J2EE) и CASE-средствам вы можете найти на сайте www.optim.ru и на страницах журнала. Ваши предложения и замечания вы можете посылать по адресу tcs@optim.ru.

Эта статья на RSDN


 

Ведущий рассылки: Алекс Jenter   jenter@rsdn.ru
Публикуемые в рассылке материалы принадлежат сайту RSDN.

| Предыдущие выпуски     | Статистика рассылки


RLE Banner Network

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное