Статьи

Введение в XML

XML: это просто текст!

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

Спросите веб-разработчика: «Что такое XML и вы получите ответы, которые варьируются от «Это самая лучшая вещь с момента соединения кремния!» «Кого это волнует?»; от страсти к паранойе. Часто ответ вы получите просто «Я не понимаю XML — но я бы хотел, чтобы я понял».

Как и во всех технологиях, найти ответы на простые вопросы часто бывает сложно, и, возможно, дело обстоит так, что нет технологии, отличной от XML. В этой статье я расскажу о XML под микроскопом, покажу вам, что это такое и как оно работает. Более того, я позволю себе сделать смелое утверждение, что к тому времени, когда вы закончите читать эту статью, вы скажете: «Это все? Это так просто!»

Итак, вот что в магазине:

  • Кто, что и почему XML: это просто текст — честно!
  • Раскручивая свое: правила создания XML
  • Разбор ночью: когда XML оживает
  • XML в действии: что делать с XML

Предупреждение: я использую PHP, чтобы проиллюстрировать некоторые примеры здесь, но если вы не знаете PHP, вы сможете пропустить эти примеры, продолжая понимать общие концепции. Хорошо, начнем.

Кто, что и почему XML?

В. Кто должен знать о XML?

A. Любой, кто участвует в создании Интернета или работает в IT-бизнесе!

Возможно, это смелое утверждение, но XML — это технология, которая может быть полезна каждому, от веб-дизайнеров до программистов. В наши дни XML — более или менее зрелая технология. Он уже начал проникать во все наши жизни, и в ближайшие несколько лет он, скорее всего, станет нормой для бесчисленных задач — от рендеринга одной веб-страницы до обмена бизнес-данными по всему миру. Крупные поставщики программного обеспечения, такие как Sun, Microsoft, IBM и Hewlett Packard, постоянно добавляют все больше и больше функций, связанных с XML, в свои продукты, и в целом жизнь в Интернете переходит на XML.

Я должен пояснить, что когда я только что сказал «XML», я на самом деле говорил о целом ряде «дополнительных» технологий, основанных на базовом стандарте XML. Например, для веб-дизайнеров это означает XHTML и XSLT, в то время как разработчики должны интересоваться такими технологиями, как SOAP, XML-схема и многие другие. Мы будем придерживаться базового XML для большей части этой статьи.

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

Что такое XML?

Когда-нибудь создавали файл с помощью Блокнота? Если это так, вы уже готовы работать с сырьем XML: текст! Это верно; это не что иное, как старый добрый ASCII.

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

Итак, давайте сначала спросим «Что такое HTML?» Одним из способов описания HTML является набор правил для размещения текста, чтобы людям было легко читать. Если я выделю слово жирным шрифтом , ваш взгляд привлечет его, потому что оно выделяется на фоне остального текста. HTML позволяет нам обмениваться информацией между людьми так, чтобы их было легко читать. Где бы мы были без форматирования? Интернет будет одним гигантским файлом README!

Что ж, XML эквивалентен HTML, предназначенному в первую очередь для чтения компьютером. Компьютеры, будучи не такими умными людьми, должны быть более детализированы, чтобы помочь им сориентироваться в части информации. XML предназначен для того, чтобы сообщать компьютеру не только о том, как документ отформатирован, но и о том, какую именно информацию он содержит.

Почему XML?

Это очень общее описание, но гораздо проще понять XML с точки зрения проблемы, которую нужно решить…

Скажем, у нас есть текстовый файл, который содержит некоторую информацию о клиентах для нашего веб-сайта. Он взят из базы данных, и каждая «строка» файла содержит четыре элемента информации (назовем их «элементами») — имя человека, его фамилия, адрес электронной почты и город, в котором он живет. Например;

Joe Bloggs [email protected] Washington   Mary Woods [email protected] London 

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

Глядя на приведенный выше файл, каждый «элемент» отделяется от следующего пробелом. Кроме того, каждая строка в списке отделена от следующей символом новой строки (каждая строка начинается с новой строки). Используя эти символы, мы можем написать компьютерную программу, чтобы разбить текстовый файл на более мелкие части, которые мы можем использовать.

Используя PHP в качестве примера, вот как мы могли бы это сделать (потерпите меня, если вы не знаете PHP):

 /* We begin with our customer list stored   in a variable called $customer_list */   /* Break up the customer list using PHP's   explode() function and the newline character   at the end of each row */   $customers = explode ( "n" , $customers );   /* Now $customers is an array variable   (basically a list of variables) so   we can loop through it like so; */   foreach ( $customers as $customer ) {     /* Explode each "row" stored in $customer using       the space character to create another array       called $element */     $element = explode ( " ", $customer );     /* Send an email using $element */     mail ( $element[2],"Special Offer",        "Hi $element[0] $element[1],nHow's it going in $element[3]?" );  } 

Приведенный выше код будет отправлять два электронных письма. Первый идет на [email protected], содержащий сообщение:

 "Hi Joe Bloggs, 
 How's it going in Washington?" 

Второе письмо отправляется по адресу [email protected] и содержит:

 "Hi Mary Woods, 
 How's it going in London?" 

Таким образом, используя некоторые базовые функции форматирования PHP, мы смогли разбить текстовый файл на части, с которыми мы могли бы работать, используя пробелы и символы новой строки, чтобы найти начальную и конечную точки «кусков» данных, которые мы хотим.

Теперь все в порядке, пока в нашем списке клиентов не появятся новые записи (внимательно посмотрите на строки три и четыре):

 Joe Bloggs [email protected] Washington  Mary Woods [email protected] London  Jean Du Vin [email protected] Paris  Mike Macey [email protected] New York 

Сначала у нас есть «Жан-дю-Вин». Теперь, когда мы умные люди, мы можем догадаться, что «Du Vin», вероятно, является фамилией этого человека, но как наша компьютерная программа узнает это? Было сказано, что после первого пробела он найдет фамилию людей, а после второго пробела должен найти адрес электронной почты. Но с этим именем будет решено, что фамилия — «Du», адрес электронной почты — «Vin», а город — «[email protected]».

И у нас есть еще одна проблема с городом «Нью-Йорк». Он также содержит пробел, поэтому наша программа, вероятно, решит, что город называется просто «Новый», а не «Нью-Йорк».

Теперь мы можем обновить нашу программу, чтобы она понимала «Жан-дю-Вин» и «Нью-Йорк» как особые случаи. Но представьте, у нас есть список из 10000 клиентов. Сколько особых случаев нам придется иметь дело? Мгновенно у нас на руках кошмар.

Итак, нам нужен какой-то специальный символ для разделения «элементов», верно? Как насчет запятой (как вы можете найти в файле CSV)?

 Joe,Bloggs,[email protected],Washington  Mary,Woods,[email protected],London  Jean,Du Vin,[email protected],Paris  Mike,Macey,[email protected],New York 

Теперь мы можем искать запятые вместо пробелов, и мы решили проблему! Ну… у нас есть, пока кто-нибудь не войдет в «Париж, Техас», чтобы отличить его от «Парижа». Хотя запятые — это шаг вперед, могут быть и особые случаи, к которым мы должны быть готовы. Также мы полагаемся на то, что «элементы» появляются в правильном порядке в строке — было бы хорошо, например, если бы мы могли идентифицировать электронное письмо как электронное, где бы оно ни появлялось в списке. А что, если в некоторых строках отсутствуют элементы или у нас есть дополнительные элементы, которых мы не ожидали?

Введите: XML

Как насчет того, чтобы выложить наш список следующим образом:

 <?xml version="1.0"?>  <customer_list>  <customer>    <first_name>Joe</first_name>    <email>[email protected]</email>    <last_name>Bloggs</last_name>    <city>Washington</city>  </customer>  <customer>    <last_name>Woods</last_name>    <first_name>Mary</first_name>    <city>London</city>    <email>[email protected]</email>  </customer>  <customer>    <last_name>Du Vin</last_name>    <first_name>Jean</first_name>    <email>[email protected]</email>    <city>Paris</city>    <country>France</country>  </customer>  <customer>    <city>New York</city>    <last_name>Macey</last_name>    <email>[email protected]</email>  </customer>   </customer_list> 

Теперь наша проблема действительно решена! Каждый «элемент» данных аккуратно обернут в «теги», которые четко показывают, где данные начинаются и заканчиваются.

У нас также есть описание того, чем на самом деле является каждая часть данных (например, «электронная почта» или «город»), и, как таковые, данные могут появляться в любом порядке, не беспокоясь о нашей программе.

Еще одним преимуществом является то, что у нас также есть «иерархия» данных — тэг « customer_list » содержит элементы под названием « customers », которые, в свою очередь, содержат элементы « first_name », « last_name », « email » и « city ».

Я также добавил еще пару сюрпризов: удаление элемента из последнего клиента и вышеупомянутого, добавление нового элемента <country /> — и с XML это не проблема. Вот что означает X: eXtensible (представьте, что случилось бы, если бы я удалил или добавил элемент в файл, разделенный запятыми). Таким образом, извлечение данных из этого файла теперь является простой задачей для любой системы.

И в этом заключается суть XML: это технология передачи данных между системами независимо от платформы.

Например, рабочая станция Windows может извлекать данные XML с мэйнфрейма, что-то с ним делать, а затем передавать на сервер Linux, без какого-либо из них век.

То же самое касается обмена данными между приложениями в одной и той же системе — например, с MySQL , утилита mysqldump может использоваться для доставки данных в форме XML в файл (например, mysqldump -X mydatabase ), который затем может быть доставлен (возможно, с помощью PHP ) в веб-браузер для просмотра.

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

Все приложения XML, с которыми вы, возможно, сталкивались (XSLT, XML-RPC, SOAP, XML Schema) — это всего лишь механизмы, которые используются для улучшения способности XML каким-либо образом обмениваться данными.

И последнее, о чем следует помнить, когда вы думаете о XML, — это то, что, хотя XML по сути является просто стандартом — набором правил для форматирования текста ASCII — постепенно он достигает точки, где его можно рассматривать как язык программирования, когда вы принимаете во внимание «дополнительные» технологии, такие как XSLT.

Роллинг свой собственный

Итак, теперь, когда вы знаете, что и почему в XML, давайте приступим к созданию XML-документа.

Я упомянул выше, что вы, более или менее, уже знаете XML, работая с HTML. Вот почему:

 <html>  <head>    <title> Almost an XML Page </title>  </head>  <body>    <table>      <tr>        <td>This is almost XML!</td>      </tr>    </table>  </body>  </html> 

Сравните это с тем, что мы видели выше. Обратите внимание, как у нас есть теги, вложенные в теги? Чтобы превратить приведенный выше HTML-код в XML, все, что нам нужно, это добавить следующее вверху (обратите внимание, что это относится только к вышеуказанному документу — большинство HTML не совместимо с XML):

 <?xml version="1.0"?> 

Причина, по которой HTML и XML так похожи, заключается в том, что они были получены из более старого стандарта SGML , который был задуман еще в 1960-х годах. Сравнивая их, XML более педантичен, чем HTML. Например, вы, вероятно, привыкли использовать в HTML следующее:

 <img src="myimage.png"> 

В XML все теги должны быть закрыты, поэтому вышеприведенное должно быть переписано, как здесь (обратите внимание на дополнительную косую черту в конце):

 <img src="myimage.png" /> 

Есть несколько особенностей XML, о которых вам нужно знать:

Атрибуты против Элементов

XML имеет два механизма для размещения данных (именуемых <i> символьные данные </ i>) в тегах. Элементы размещаются между тегами:

 <tag>This is an element</tag> 

Атрибуты помещаются в открывающий тег (очень похоже на <a href="http://www.sitepoint.com" /> ):

 <tag myattribute="This is an attribute">This is an element</tag> 

Используете ли вы элементы или атрибуты, зависит только от вас (этот вопрос обсуждается так же горячо, как PHP против ASP!). С небольшим опытом, вы будете знать ответ интуитивно.

Комментирование XML

Комментарии XML такие же, как комментарии HTML:

 <!-- this is a comment and it can contain <tags /> which  will be ignored --> 

юридические лица

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

Возможно, вы сталкивались с сущностями в HTML, например &copy; , который говорит браузеру отображать «©». Для определения ваших собственных сущностей требуется так называемое определение типа документа (DTD), которое кратко обсуждается в конце этой статьи.

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

Инструкции по обработке

Сокращенные до «PI», инструкции по обработке представляют собой способ вставки специальных сообщений, которые будут распознаваться приложением, которое будет читать документ, — подобно тому, как JavaScript размещается в HTML-документе. <? и ?> теги используются для обозначения начала и конца PI. Пример использования PHP может быть:

 <?xml version="1.0"?>  <myscript>  <authorised><? echo ( 'Welcome back!' ); ?></authorised>  <unauthorised><? echo ( 'Please log in' ); ?></unauthorised>  </myscript> 

Обратите внимание, что также допустимо следующее:

 <?xml version="1.0"?>  <myscript>  <authorised><?php echo ( 'Welcome back!' ); ?></authorised>  <unauthorised><?php echo ( 'Please log in' ); ?></unauthorised>  </myscript> 

… Теперь понятно, почему группа PHP решила так разметить PHP?

CDATA

Блоки CDATA — это способ указать любому приложению, читающему ваш XML-документ, обращаться с содержимым как с обычными символами (т. Е. Любые теги XML, которые должны быть обнаружены в блоке CDATA, должны игнорироваться). Блоки CDATA размечаются с помощью <![CDATA[ and ]]> . Например:

 <?xml version="1.0"?>  <root>  <tag>  <![CDATA[    This <xml_tag /> will be treated as normal text.  ]]>  </tag>  </root>  </root> 

Правила XML

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

Сам стандарт XML доступен по адресу http://www.w3.org/TR/2000/REC-xml-20001006 . Чтобы сэкономить время на прочтении, основные правила описаны ниже. Обратите внимание, что если документ XML подчиняется этим правилам, он считается правильно сформированным (слово « valid » имеет другое значение в XML, которое мы рассмотрим позже):

Это самые важные правила, которым должен следовать любой XML.

1. Требуется версия XML

Все документы XML должны начинаться с оператора, который описывает версию используемого стандарта XML:

 <?xml version="1.0"?> 

Выше фактически является инструкцией обработки .

2. Закройте свои теги!

Каждый тег XML должен быть правильно закрыт. Здесь HTML более расслаблен, позволяя вам использовать теги, такие как <img> и <br> не закрывая их. В XML это должно быть <br></br> или просто <br /> если тег не содержит данных.

3. XML-теги должны быть вложены в правильном порядке

В HTML браузер позволит вам иметь <i> <b> Hello World! </i> </b> <i> <b> Hello World! </i> </b> . В XML это должен быть либо <i> <b> Hello World! </b> </i> <i> <b> Hello World! </b> </i> или <b> <i> Hello World! </i> </b> <b> <i> Hello World! </i> </b> .

4. XML чувствителен к верхнему регистру / нижнему регистру

В XML <mytag /> отличается от <MYTAG /> ! В HTML вы можете обойтись без этого — браузер (как правило) будет воспринимать <BODY></body> как одно и то же.

5. И я цитирую…

Атрибуты XML должны иметь кавычки вокруг них. В HTML вы можете использовать <a href=mypage.html>It's a Link!</a> . В XML это должно быть <a href="mypage.html">It's a Link!</a> .

6. XML-документ должен иметь как минимум один элемент

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

 <?xml version="1.0"?>  <root /> 

7. Называя ваши теги

То, как вы называете свои теги XML, регулируется следующими правилами;

  • Имена тегов могут содержать буквы, цифры и другие символы (например, <mytag3></mytag3> подходит)
  • имена тегов не могут содержать пробелы (например, <my tag></my tag> неверен)
  • имена тегов не могут начинаться с букв xml (включая UPPER или mIXeDcase)
  • имена тегов не могут начинаться с цифры или знака пунктуации (например, <3mytag></3mytag и <.mytag></.mytag> неверны).

8. Специальные персонажи

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

Персонаж: Сущность: Пример

  " :  &quot; <tag entity="Here is a quote &quot;" /> 
  ' :  &apos;  : <tag entity="Here is an apostrophy &apos;" /> <tag entity="Here is an apostrophy &apos;" /> 
  < : &lt;  : <tag>1 &lt; 2</tag> <tag>1 &lt; 2</tag> 
  > :  &gt;  : <tag>2 &gt; 1</xml_tag> <tag>2 &gt; 1</xml_tag> 
  & :  &amp;  : <tag>Kramer &amp; Kramer</tag> <tag>Kramer &amp; Kramer</tag> 

В PHP функция htmlspecialchars () достигнет этого.

9. Новые линии и пустое пространство

Для новых строк в XML стандарт XML поддерживает возврат каретки и перевод строки (т.е. допустимы rn, r и n, как в большинстве языков программирования). Сказав это, процессоры XML ожидали «нормализовать» их во время обработки.

Пробел в XML рассматривается как пробельные символы, новые строки (выше) и символы табуляции. Если документ не имеет DTD (см. Ниже), все пробелы должны быть сохранены. Если DTD предоставляется с документом XML, если какой-либо элемент содержит только пробелы или другие элементы, пробел может быть удален при обработке документа — это зависит от DTD (или схемы XML), чтобы указать, какие элементы должны иметь свой пробел сохранились.

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

Ваш первый XML-документ

Итак, теперь вы знаете скучные вещи, вы готовы писать свои собственные документы XML. И хорошие новости, как и в случае с HTML, все, что вам нужно, это текстовый редактор, чтобы создать его! Для просмотра XML в хорошем формате (включая проверку его правильности), Internet Explorer является хорошим выбором.

Сохраните файл с расширением .xml, и вы сможете открыть его с помощью Internet Explorer, чтобы просмотреть документ в виде разборного дерева. Вот документ XML, который демонстрирует большую часть того, что мы видели:

 <?xml version="1.0" ?>  <!-- My first XML document -->  <articles>  <article author="harryf" date="13 Oct 2002">    <title>XML is so easy!</title>    <body>XML really is nothing complicated</body>  </article>  <article author="harryf" date="13 Oct 2002">    <title>A Program Instruction</title>    <body>Here's a PI for PHP: <?php phpinfo(); ?></body>  </article>  <article author="harryf" date="13 Oct 2002">    <title>An Entity</title>    <body>Mathematics: x &lt; y &gt; z</body>  </article>  </articles> 

Сказал тебе это было легко!

Если вы действительно приступили к редактированию XML, есть несколько «профессиональных инструментов», которые вы можете рассмотреть (большинство из которых либо с открытым исходным кодом, либо имеют ознакомительные версии). Они становятся особенно ценными, когда вы начинаете работать со сложными XML-документами или некоторыми «продвинутыми» XML-технологиями, такими как XSLT и XML Schema.

Два хорошо стоит посмотреть:

  • Cooktop ( http://www.xmlcooktop.com /) — превосходный редактор с открытым исходным кодом, обеспечивающий поддержку множества дополнительных технологий XML, таких как XSLT и веб-сервисы.
  • XML Spy ( http://www.xmlspy.com ) — коммерческий редактор, поддерживающий большинство важных XML-технологий (XML-схема, XSLT, веб-сервисы и др.), С хорошим дисплеем для визуализации XML-документов.

Больше можно найти здесь, на SitePointForums .

Создавая XML из своих приложений (будь то PHP, Java, C ++, Python, C # и т. Д.), Имейте в виду, что иногда (особенно для простых документов) лучше просто «жестко закодировать» XML в ваш код, который вы можете echo() (или print(), system.out.printLn() и т. д.) непосредственно для вывода. Для более сложных задач, вы можете рассмотреть парсер DOM, который мы рассмотрим далее …

Разбор в ночи

HTML приятно только смотреть, когда он вступает в контакт с веб-браузером — в противном случае это просто скучный текстовый файл ASCII. Тот же принцип применим к XML, но «целевым» приложением для XML не обязательно должен быть веб-браузер. XML «оживает» только тогда, когда какое-то приложение «читает» его.

Когда приложение читает документ XML, оно описывается как <i> проанализированный </ i> документа. Это означает, что он провел поиск в документе, нашел все символьные данные, помещенные в теги XML, и сделал их доступными в некоторой форме, которая готова для использования.

Синтаксический анализ темы вызывает путаницу у тех, кто начинает работать с XML. Вы можете встретить людей, которые говорят о таких вещах, как SAX и DOM, и задаются вопросом, как музыкальные инструменты и чистящие жидкости связаны с XML. Опять же, нужно помнить, что XML в основе очень прост.

Если у вас есть опыт программирования, задайте себе вопрос: «Как извлечь данные из этого фрагмента XML?»:

 <tag>My element</tag> 

В PHP вы можете использовать регулярные выражения, такие как:

 <?php  $xml="<tag>My element</tag>";  preg_match ( "/<tag>(.*)</tag>/",$xml,$output );  echo ($output[1]);  ?> 

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

 <?xml version="1.0" ?>  <!-- My first XML document -->  <articles>  <article author="harryf" date="13 Oct 2002">    <title>XML is so easy!</title>    <body>XML really is nothing complicated</body>  </article>  <article author="harryf" date="13 Oct 2002">    <title>A Program Instruction</title>    <body>Here's a PI for PHP: <?php phpinfo(); ?></body>  </article>  <article author="harryf" date="13 Oct 2002">    <title>An Entity</title>    <body>Mathematics: x &lt; y &gt; z</body>  </article>  </articles> 

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

SAX и DOM

SAX и DOM — фактически две стратегии синтаксического анализа XML (обычно называемые API — интерфейсы прикладных программ). Итак, вы знаете, SAX означает «Простой API для XML», а DOM — «Объектная модель документа».

Подход SAX гласит: «Дайте мне список тегов XML с информацией о том, что я должен с ними делать. Я буду читать документ XML от начала до конца, и каждый раз, когда я найду тег, который был в вашем списке, я буду делай то, что ты мне сказал. Другими словами, подход SAX основан на событиях . Парсер SAX будет читать XML последовательно с самого начала. Каждый XML-тег, с которым он сталкивается, рассматривается как событие , и при каждом событии, с которым он сталкивается, он будет обращаться к «списку», который был предоставлен (вами, программистом) для этой конкретной работы, и предпринимать любые необходимые действия. Типичным примером SAX в действии является анализ RSS-ленты новостей (см. Статью Кевина Янка по PHP и XML: парсинг RSS 1.0 — будет множество других примеров на большинстве языков программирования, используемых для работы в Интернете).

Подход DOM гласит: «Я собираюсь загрузить весь XML-документ за один раз, а затем сделать его доступным для вас в« иерархической »форме, построив« дерево »из документа, где отдельные элементы и доступ к ним напрямую, без необходимости «перечитать» с самого начала. Подход DOM является объектно-ориентированным , отсюда и название. Если у вас есть опыт работы с объектно-ориентированным программированием, DOM API будет мгновенно привлекателен. Для тех, кто не знаком с объектной ориентацией, может потребоваться некоторое привыкнуть к. Свободной аналогией может быть онлайн-каталог, такой как dmoz . Dmoz организован вокруг древовидной структуры. Можно получить доступ к частям дерева напрямую, используя URL-адреса, например, http://dmoz.org/News/ дает ветка новостей и http://dmoz.org/Science/ дает вам науку. Если бы DMOZ был только одной страницей — гигантским списком, организованным под заголовками, вам нужно было бы прочитать раздел, который вы ищете.

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

Ни SAX, ни DOM не идеальны, поэтому стоит упомянуть, что третий подход к синтаксическому анализу XML, называемый XOM, находится в процессе создания идеального API. Ему всего несколько месяцев, так что, очевидно, еще есть путь.

Чтобы добавить к этой путанице, доступно немало парсеров, которые реализуют API SAX или DOM, таких как теперь известный Expat Parser Джеймса Кларка (SAX-парсер) и Gnome libxml (парсер DOM). Microsoft внедряет SAX и DOM, а также ряд других важных XML-технологий в инструментарий, называемый просто MSXML , в то время как Sun имеет классы кодирования и декодирования XML в библиотеке Java, о которых вы узнаете больше здесь .

Какой бы API синтаксического анализа XML вы ни использовали, вашему языку программирования нужно будет реализовать API в той или иной форме (в противном случае подготовьтесь к написанию большого количества кода или молитесь, чтобы кто-то сделал это для вас, например, Luis Argerich и PHP XML Classes ). PHP предоставляет вам функции SAX и DOM в качестве расширений, которые необходимо добавить в базовую установку PHP.

XML в действии

Теперь вы в целом разбираетесь с XML, что за аббревиатуры появляются, как XML-схема и XSLT? И вообще, для чего вы можете использовать XML?

Я кратко расскажу о важных «надстройках» и приложениях, для которых сейчас используется XML, некоторые из которых будут подробно обсуждаться в других статьях в рамках XML-недели SitePoint .

Проверка XML

Мы увидели, как создавать правильно оформленные XML-документы, следуя основным правилам стандарта W3. Чего мы не видели, так это как проверить структуру XML-документа и данных в нем. Если вы получаете XML-документ от кого-то другого, он может быть правильно сформирован — но действительно ли документ соответствует существующей ситуации? В терминах HTML приведенный ниже пример хорошо сформирован, но он не позабавит многих веб-браузеров.

 <head>  <body>    <title>      <tr>        <td>This is almost XML!</td>      </tr>    </title>  </body>  <html>    <table> Almost an XML Page </table>  </html>  </head> 

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

Существует два основных (альтернативных) стандарта для проверки XML; XML-схема W3 и Relax NG . Хотя Relax NG, возможно, проще в использовании, стандарт W3 XML Schema, похоже, получает большую поддержку в качестве технологии де-факто проверки XML. Оба из них предоставляют возможность проверять не только структуру XML-документа, но также и данные, хранящиеся в нем, — и идут настолько далеко, что предоставляют регулярные выражения для этой цели.

XHTML

Проще говоря, XHTML — это просто HTML, который соответствует правилам правильно сформированного XML. Другими словами, теперь это <img src="myimage.png" /> .

Пространства имен XML

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

XSL (Т)

Таблицы стилей XML — это механизм, который позволяет XML-документу применять к нему набор «правил», основанный на имени тега, во многом так же, как каскадные таблицы стилей позволяют вам задавать определенный «вид» для конкретного тега HTML. Таблицы стилей XML становятся наиболее интересными при использовании в преобразованиях (XSLT). XSLT может использоваться для преобразования XML-документа в другой XML-документ и представляет собой очень важную технологию для веб-дизайнеров и разработчиков.

Имея некоторый XML, вы можете использовать XSLT для преобразования его в любой из XHTML, WML (Wireless Markup Language), SOAP, XML-RPC, SVG (см. Ниже) или даже Flash и PDF (с помощью небольшого PHP или другого) файлы. Это означает, что вы можете предоставлять несколько пользовательских интерфейсов из одного источника данных …

Вы также можете использовать XSLT для преобразования между SOAP и XML-RPC (двумя стандартами веб-сервисов).

XPath

XPath — это механизм навигации по дереву XML с использованием синтаксиса, аналогичного доступу к командной строке файловой системы в DOS или оболочке UNIX. XPath важен для XSLT.

XLink

Позволяет размещать HTML-подобные ссылки в документах XML, использующих преимущества пространств имен XML. XLink, возможно, провалился как технология, возможно, учитывая, что большинство людей предпочитают преобразовывать XML в XHTML, а не читать сам исходный материал. XLink все еще важен, хотя, как шаг к XPointer…

XPointer

XPointer использует преимущества XPath и XLink, чтобы предоставить механизм для указания на определенный тег или диапазон в другом XML-документе. Поскольку XML превращается из простого языка разметки в нечто, напоминающее язык программирования, и для использования в хранилище XML (базы данных XML), XPointer, вероятно, станет более важным. Это один для разработчиков, чтобы посмотреть.

Веб-сервисы

Веб-сервисы были исследованы в SitePoint в разделе Демистифицированные веб-сервисы и создайте свой собственный веб-сервис с помощью PHP и XML-RPC . XML-RPC был «оригинальным» стандартом обмена сообщениями XML, с другой ранней альтернативой — WDDX . В настоящее время королем веб-сервисов является стандарт SOAP XML.

WML

Wireless Markup Language — это стандарт XML для беспроводных устройств, разработанный консорциумом поставщиков мобильных устройств. Более подробная информация на http://www.wapforum.org/ (в основном это XHTML-эквивалент для мобильных устройств WAP / 3-го поколения).

SVG

Масштабируемая векторная графика позволяет рисовать графику с использованием XML, полагаясь на веб-браузер для отображения конечного результата, включая анимацию. Здесь есть коллекция демонстраций, включая карту Вены и анимированные шахматы . Для разработчиков PHP здесь есть отличная библиотека классов SVG, а также SVG Graphing Tool .

XML в другом месте

Другие XML-приложения были созданы для самых разных вещей, от электронной коммерции B2B с ebXML до языка разметки Mind Reading (я не шучу). Самый полный список, с которым я сталкивался, находится на Oasis: http://xml.coverpages.org/xmlApplications.html (подготовьтесь к тому, чтобы упасть назад, читая это), или, если вам не нравятся списки, попробуйте этот постер .

Особенно интересная область развития сейчас находится в области хранения данных XML (базы данных). «Традиционные» поставщики баз данных, такие как Microsoft и Oracle, уже боролись за широкое распространение, добавив поддержку XML в свои продукты. Между тем, совершенно новое поколение баз данных — это прогресс, такой как Apache Xindice . Эта область разработки баз данных все еще «находится в стадии разработки», но теоретически XML представляет собой лучшую альтернативу SQL для «исследования» и сопоставления данных, а также типов данных, которые вы не увидите в большинстве баз данных. Он также предлагает потенциальные преимущества, такие как собственные веб-службы баз данных и хранение данных на основе документов, что, возможно, упрощает создание пользовательского интерфейса. Здесь есть более углубленное обсуждение.

В противном случае, хорошее место, чтобы получать не раскрученные и точные новости XML — это xmlhack .

Помечено и упаковано

Надеюсь, теперь у вас есть представление о том, что такое XML и почему это важно для всех нас, создающих Интернет. Я слышу, как ты говоришь «Это так просто!» Если нет, пожалуйста, не стесняйтесь обращаться к обсуждению SitePointForums ниже с любыми вопросами. В оставшуюся часть XML-недели SitePoint вы познакомитесь с некоторыми из передовых XML-технологий и приложений. Наслаждайтесь!