Содержание

Правила синтаксиса XML

Правила синтаксиса XML крайне просты и логичны. Их легко запомнить и легко использовать.

Все XML элементы должны иметь закрывающий тег

В HTML некоторые элементы могут не иметь закрывающего тега:


<p>Это параграф.
<br>

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


<p>Это параграф.</p>
<br>

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

Теги XML регистрозависимы

Теги XML являются регистрозависимыми. Так, тег <Letter> не то же самое, что тег <letter>.

Открывающий и закрывающий теги должны определяться в одном регистре:


<Message>Это неправильно</message>
<message>Это правильно</message>

Замечание: «Открывающий и закрывающий теги» иногда еще называют «начальный и конечный теги».

Используйте то определение, которое вам более симпатично. По сути это одно и то же.

XML элементы должны соблюдать корректную вложенность

В HTML иногда можно наблюдать такую картину:


<b><i>Это жирный и курсивный текст</b></i>

и иногда это даже работает должным образом.

В XML все элементы обязаны соблюдать корректную вложенность:


<b><i>Это жирный и курсивный текст</i></b>

Понятие «корректная вложенность» по отношению к приведенным примерам просто означает, что так как элемент <i> открывается внутри элемента <b>, то и закрываться он должен внутри элемента

<b>.

У XML документа должен быть корневой элемент

XML документ должен содержать один элемент, который будет родительским для всех других элементов. Он называется корневым элементом.


<корневой>
   <потомок>
      <подпотомок>. ....</подпотомок>
   </потомок>
</корневой>

XML пролог

Следующая строка называется XML прологом:


<?xml version="1.0" encoding="UTF-8"?>

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

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

UTF-8 — кодировка XML документов по умолчанию.

Значения XML атрибутов должны заключаться в кавычки

Так же, как и в HTML, у XML элементов могут быть атрибуты в виде пары имя/значение.

В XML значения атрибутов должны заключаться в кавычки.

Посмотрите на следующие два примера XML документа. Первый с ошибкой, второй написан правильно:


<note date=12/11/2007>
   <to>Tove</to>
   <from>Jani</from>
</note>

<note date="12/11/2007">
   <to>Tove</to>
   <from>Jani</from>
</note>

Ошибка в первом XML документе заключается в том, что значение атрибута date элемента note не заключено в кавычки.

Сущности

Некоторые символы в XML имеют особые значения.

Если вы поместите, например, символ «<» внутри XML элемента, то будет сгенерирована ошибка, так как парсер интерпретирует его, как начало нового элемента.

Так, к ошибке приведет следующая строка XML документа:


<message>если жалование < 1000</message>

Чтобы такая ошибка не возникала, нужно заменить символ «<» на его сущность:

<message>если жалование &lt; 1000</message>

В XML существует 5 предопределенных сущностей:

СущностьСимволЗначение
&lt;<меньше, чем
&gt;>больше, чем
&amp;&амперсанд
&apos;апостроф
&quot;«кавычки

Замечание: Только символы «<» и «&» строго запрещены в XML. Символ «>» допустим, но лучше его всегда заменять на сущность.

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

Синтаксис комментариев в XML такой же, как и в HTML.


<!-- Это комментарий -->

Использование двух символов тире в середине комментария не допустимо.

Неверно:


<!-- Это -- комментарий -->

Странно, но так можно:


<!-- Это - - комментарий -->

В XML пробелы сохраняются

В HTML несколько последовательных пробельных символов усекаются до одного. В XML документе все пробельные символы сохраняются.

В XML новая строка сохраняется как LF

В приложениях Windows новая строка хранится в следующем виде: символ перевода каретки и символ новой строки (CR+LF).

Unix и Mac OSX используют LF.

Старые Mac системы используют CR.

XML сохраняет новую строку как LF.

Синтаксически верный XML документ

Если XML документ составлен в соответствии с приведенными синтаксическими правилами, то говорят, что это «синтаксически верный» XML документ.

XML элементы Вверх Дерево XML

XML Синтаксические правила


Правила синтаксиса XML очень просто и логично. Правила просты в освоении, и простой в использовании.


XML-документы должны иметь корневой элемент

XML — документы должны содержать один корневой элемент , который является parent всех остальных элементов:

<root>
  <child>
    <subchild>…..</subchild>

  </child>
</root>

В этом примере <Примечание> является корневым элементом:

<?xml version=»1.0″ encoding=»UTF-8 « ?>
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don’t forget me this weekend!</body>
</note>


XML Пролог

Эта линия называется XML пролог:

<?xml version=»1.

0″ encoding=»UTF-8 « ?>

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

XML-документы могут содержать международные символы, такие как норвежский оа или французского ЭИ.

Чтобы избежать ошибок, вы должны указать кодировку, или сохранять файлы XML в кодировке UTF-8.

UTF-8 кодировка символов по умолчанию для XML-документов.

Кодировка символов может быть изучена в нашем Набор символов Учебное пособие .

UTF-8 также кодировку по умолчанию для HTML5, CSS, JavaScript, PHP и SQL.


Все XML-элементы должны иметь закрывающий тег

В HTML некоторые элементы могут работать хорошо, даже с отсутствующим закрывающий тег:

<p>This is a paragraph.
<br>

В XML, это незаконно, чтобы опустить закрывающий тег. Все элементы must иметь закрывающий тег:

<p>This is a paragraph.</p>
<br />

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


XML-теги чувствительны к регистру

XML-теги чувствительны к регистру. Тег <Letter> отличается от тега <letter> .

Открытие и закрытие теги должны быть написаны с тем же делом:

<Message>This is incorrect</message>
<message>This is correct</message>

«Открытие и закрытие тегов» часто упоминаются как «Start and end tags» . Используйте то, что вы предпочитаете. Это точно то же самое.


XML-элементы должны быть правильно вложены

В HTML, вы можете увидеть неправильно вложенные элементы:

<b><i>This text is bold and italic</b></i>

В XML все элементы must быть правильно вложены друг в друга:

<b><i>This text is bold and italic</i></b>

В приведенном выше примере, «Properly nested» просто означает , что , так как <i> элемент открыт внутри <b> элемент, он должен быть закрыт внутри <b> элемента.


XML значения атрибутов должны быть заключены в кавычки

XML элементы могут иметь атрибуты в пар имя / значение, как и в HTML.

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

НЕПРАВИЛЬНО:

<note date=12/11/2007>
  <to>Tove</to>
  <from>Jani</from>
</note>

ВЕРНЫЙ:

<note date=»12/11/2007″>
  <to>Tove</to>
  <from>Jani</from>
</note>

Ошибка в первом документе является то , что date атрибута в элементе примечания не котируется.


Entity Ссылки

Некоторые символы имеют специальное значение в XML.

Если поместить символ , как «<» внутри элемента XML, он будет генерировать ошибку , потому что анализатор интерпретирует его как начало нового элемента.

Это вызовет ошибку XML:

<message>salary < 1000</message>

Чтобы избежать этой ошибки, замените «<» характер с entity reference на entity reference :

<message>salary &lt; 1000</message>

Есть 5 предопределенных ссылок на сущности в XML:

&lt; < less than
&gt; > greater than
&amp; & ampersand 
&apos; apostrophe
&quot; « quotation mark

Только <и & строго запрещены в XML, но это хорошая привычка, чтобы заменить> с & GT; также.


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

Синтаксис для записи комментариев в XML является похож на HTML.

<! — Это комментарий ->

Два тире в середине комментария не допускается.

Не допускается:

<!— This is a — comment —>

Странно, но допускается:

<!— This is a — — comment —>


Бело-пространство Сохранилось в XML

XML не усечь несколько бело-пространства (HTML обрезает несколько бело-пространства к одному пробельных):

XML: Hello           Tove
HTML: Hello Tove

XML Магазины New Line, как LF

Приложений Windows Store новую строку как: возврат каретки и перевод строки (CR+LF) .

Unix и Mac OSX использует LF.

Старый Mac системы использует CR.

XML сохраняет новую строку как LF.


Хорошо сформировавшиеся XML

XML — документы , которые соответствуют правилам синтаксиса выше , как говорят, «Well Formed» XML — документы.


Десять правил XML, которые нужно знать

Как правильно использовать XML

Джек Херрингтон
Опубликовано 26.03.2012

Часто используемые сокращения
  • CDATA: Character Data (символьные данные)
  • DOM: Document Object Model (объектная модель документа)
  • E4X: ECMAScript for XML (ECMAScript для XML)
  • IDE: Integrated Development Environment (интегрированная среда разработки)
  • W3C: World Wide Web Consortium (консорциум WWW)
  • XML: Extensible Markup Language (расширяемый язык разметки)
  • XSLT: Extensible Stylesheet Language Transformations (расширяемый язык преобразований таблиц стилей)

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

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

Не используйте XML в качестве имени файла или корневого тега

Много раз я видел XML-код, хранящийся в файлах с расширением .xml. Это бессмысленно. Такое расширение не скажет мне ничего, чего бы я не знал, просто выполнив команду cat. Как только я увижу теги, я сразу пойму, что это XML. Вместо этого расширения используйте расширение, имеющее смысл для пользователя. Также можно использовать уникальное расширение, чтобы при поиске Google возвращал ссылки на документацию или на примеры вашего формата XML-файла.

Еще одной проблемой в некоторых XML-документах является использование корневого тега <xml>. Это опять-таки ни о чем не говорит. Что находится в этом файле? Если это список контактов, корневым узлом должен быть тег <contacts>. XML должен быть читабельным, поэтому используйте имена тегов и атрибутов, имеющие отношение к бизнес-задаче, над которой работаете. Если корневым узлом является <contacts>, я предполагаю увидеть теги <contact>, а затем теги <name>, <first>, <middle>, <last> и т.д.

Не переопределяйте обобщенные или специфичные для языка конструкции

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

Этим я хочу сказать, что специфичные для языка конструкции нужно хранить вне XML. Как часто вы встречали <data type="NSDate">07-18-2010</data>? Что такое NSDate? Ага, это имя класса для работы с датами на прикладной платформе. Что произойдет при смене платформы или языка? Потребуется преобразование тегов NSDate во что-то другое, что используется на новой платформе.

Храните специфику языка вне XML и используйте простые теги, скажем <date>...<date>. Такой тег легко понимаем, читабелен и не зависит от конкретного языка или интегрированной среды.

Еще одно важное правило – избегайте использования в XML излишних обобщений. Взгляните на следующий пример (листинг 1):

Листинг 1. Обобщенное дерево узлов
<nodes>
    <node type="user">
        <node type="first">jack</node>
    </node>
</nodes>

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

Листинг 2. Более эффективное дерево узлов
<users>
    <user>
        <first>jack</first>
    </user>
</users>

Разве так не лучше? Код говорит то, что означает, и означает то, что говорит. Его легче читать и анализировать. Его легче проверять и преобразовывать при помощи XSLT. Он даже меньше по размеру.

Не делайте файлы слишком большими

Знаю, что вы скажете: «Дисковая память стоит дешево. За десять центов я куплю еще один терабайт». Это верно. Вы действительно можете создавать гигабайтные XML-файлы. Но программирование – это постоянные компромиссы. Приходится менять дисковое пространство на время или память на время. А при работе с огромным XML-файлом вы получаете худшие стороны и того, и другого. Файл занимает много места на диске, а на его анализ и проверку уходит много времени. Кроме того, большой файл исключает использование DOM-анализатора, поскольку построение дерева требует бесконечного времени и огромного количества памяти.

Какова же альтернатива? Можно создать несколько файлов. Один выступает в качестве индекса, а другие содержат большие ресурсы, которые, возможно, будут нужны не всем пользователям этого XML. Другой вариант– вынос всех больших фрагментов CDATA из XML-файла и помещение их в свои собственные файлы с собственными форматами. Если вы хотите хранить все данные вместе, запакуйте все файлы в новый файл с новым расширением. Любой популярный язык программирования имеет модули, облегчающие быструю упаковку и распаковку файлов.

Не используйте пространства имен, если в этом нет острой необходимости

Пространства имен (namespace) – это мощная составляющая XML-лексикона. Они облегчают реализацию расширяемых форматов файлов. Вы можете определить базовый набор тегов для всех потребностей вашего приложения, а затем разрешить пользователям добавлять свои собственные данные в свое собственное пространство имен в файле, не затрагивая ваше дерево объектов.

Однако пространства имен очень затрудняют синтаксический анализ и управление данными. Они сбивают с толку расширения языков программирования, такие как E4X. Они затрудняют использование XML в XSLT. Наконец, они делают XML-файлы намного более трудными для чтения.

Поэтому используйте пространства имен XML, только если это действительно необходимо. Не используйте их просто потому, что «XML позволяет это делать». XML прекрасно работает и без пространств имен.

Не используйте специальные символы

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

Я рекомендую избегать использования любых специальных символов в названиях элементов и атрибутов.

Используйте XML Schema

Синтаксический анализ XML является непростой задачей. Для точного анализа необходимо проделать большую работу по защите кода от возможного отсутствия и некорректного использования тегов или атрибутов. Это дополнительная работа по написанию кода, дополнительная сложность, а также затенение реальной бизнес-логики, являющейся вашей главной заботой. Как избежать этого? Проверяйте XML перед его использованием. Для этого можно использовать несколько стандартов. Можно указать Document Type Definition (DTD) или XML Schema (ссылки на информацию о DTD и XML Schema приведены в разделе Ресурсы). Лично я нахожу XML Schema намного более простой в работе, но если вы новичок в этом деле, попробуйте различные системы проверки корректности.

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

Нумеруйте версии

Очень легко упустить из виду тот факт, что XML, хранящийся в файлах, эквивалентен формату файла. Первое, что должен содержать файл любого формата, – это номер версии. Его достаточно легко добавить: <customers version="1">...</customers>. Код, выполняющий чтение файла, должен проверить, что номер версии не больше его текущей версии, и сгенерировать исключительную ситуацию, если это не так. Это гарантирует, что любые последующие версии кода не будут конфликтовать с более старыми версиями при использовании новых тегов. Конечно же, вы должны обеспечить поддержку всех старых версий файлов при дальнейшей разработке своего приложения.

Сочетайте узлы и атрибуты

Инженеры довольно ленивый народ. Я могу это утверждать, поскольку сам такой. Не спорьте, все мы такие. Если интегрированная среда разработки предложит выполнить экспорт XML вместо нас, мы наверняка согласимся. Но обычно интегрированная среда создает очень плохой XML-код. Вероятно, вы уже встречались с чем-то похожим на листинг 3:

Листинг 3. Список пользователей
<users>
    <user>
        <id>1</id>
        <first>jack</first>
    </user>
</users>

Должен ли <id> быть тегом? Я утверждаю, что он должен быть атрибутом. Код становится более коротким и осмысленным, появляется возможность искать пользователя по идентификатору при помощи простого XPath-выражения (/users/user[@id=1]).

Чтобы код был читабелен, несомненно лучше использовать атрибуты, как показано в листинге 4.

Листинг 4. Более удобный список пользователей
<users>
    <user>
        <first>jack</first>
    </user>
</users>

Понятно, что интегрированная среда сгенерировала листинг 3, потому что всегда безопаснее использовать узлы. Но атрибуты позволяют идентифицировать важные элементы в DOM-дереве, поэтому следует использовать их.

Используйте CDATA, но не злоупотребляйте этим

XML налагает множество ограничений на использование определенных символов: кавычек, амперсандов, знаков «меньше» и «больше» и т.д. Однако на практике эти символы используются очень часто. Поэтому приходится либо преобразовывать все в безопасный для XML формат, либо помещать большие фрагменты текста, кода или еще чего-нибудь в блоки CDATA. Мне кажется, что разработчики избегают использования CDATA, поскольку думают, что это затруднит синтаксический анализ. Но разделы CDATA анализировать не труднее, чем что-либо другое – большинство DOM-анализаторов обрабатывает их самостоятельно, поэтому вам даже не нужно думать об этом.

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

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

Храните необязательные данные в отдельной области

До сих пор я рассказывал об XML-документах с жестким форматом. Я даже рекомендовал использовать технологию проверки корректности, (например, XML Schema), гарантирующую жесткую структуру. Тому есть веская причина: структурированные данные легче анализировать. А если нужна определенная гибкость? Я рекомендую размещать необязательные данные в отдельном блоке в своем собственном узле. Взгляните, например, на листинг 5.

Листинг 5. Неупорядоченная запись о пользователе
<users>
    <user>
        <first>jack</first>
        <middle>d</middle>
        <last>herrington</last>
        <runningpace>8:00</runningpace>
    </user>
</users>

Эта запись содержит все ожидаемые данные о пользователе. Я согласен с first, middle, last, но зачем здесь runningpace? Это необходимо? Будете ли у вас много таких полей? Будут ли они расширяемыми? Если ответ на все эти вопросы утвердителен, я порекомендовал бы сделать так (см. листинг 6):

Листинг 6.
Хорошо структурированная запись о пользователе
<users>
    <user>
        <first>jack</first>
        <middle>d</middle>
        <last>herrington</last>
        <userdata>
        <field name="runningpace">8:00</field>
        </userdata>
    </user>
</users>

При таком подходе вы можете иметь сколько угодно полей, не загромождая пространство имен родительского элемента <user>. Вы даже можете проверить корректность этого документа, а также обратиться к определенному полю при помощи XPath-выражения (//user/userdata/field[@name=’runningpace’).

Заключение

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

Ресурсы для скачивания
Похожие темы
  • Оригинал статьи: Five XML dos and five don’ts that you need to know (EN).
  • Эксперты по языку скорее всего захотят познакомиться со спецификацией W3C XML Specification. Станьте экспертом по языку и узнайте подробнее об XML — простом, очень гибком текстовом формате, предназначенном для публикации электронных документов и играющем важную роль в обмене данными в Web и повсюду.
  • Document Type Definition (DTD) в Википедии: информация о DTD — наборе объявлений разметки, определяющих тип документа для семейства языков разметки SGML (SGML, XML, HTML).
  • XML Schema в Википедии: краткое описание типа XML-документа, ограничивающееся структурой и содержимым документов данного типа.
  • Спецификация W3C XSLT: информация о замечательном способе преобразования XML в разнообразные форматы.
  • Спецификация W3C XPath: очень полезное средство, которое можно использовать для быстрого и удобного поиска узлов даже в самом сложном XML-документе.
  • Разработка XML при помощи Eclipse: использование возможностей XML в Eclipse (Павел Лешек (Pawel Leszek), developerWorks, апрель 2003 года): информация об Eclipse и его расширениях для редактирования XML (EN).
  • Расширение E4X для Actionscript (ECMAScript): отличный способ интегрировать XML непосредственно в логику вашего приложения. Это расширение настолько полезно, что де-факто становится открытым стандартом хранения в языке (Википедия).
  • Другие статьи данного автора (Джек Херрингтон (Jack Herrington), developerWorks, с марта 2005 года по настоящее время): статьи об Ajax, JSON, PHP, XML и других технологиях.
  • Сертификация IBM по XML: информация о получении сертификата IBM-Certified Developer по XML и смежным технологиям.

Рекомендуемые XML-теги для комментариев документации — Visual Basic

  • Чтение занимает 2 мин

В этой статье

Компилятор Visual Basic может обрабатывать комментарии документации в коде в XML-файле.The Visual Basic compiler can process documentation comments in your code to an XML file. Для обработки XML-файла в документации можно использовать дополнительные средства.You can use additional tools to process the XML file into documentation.

Комментарии XML разрешены в конструкциях кода, таких как типы и члены типов.XML comments are allowed on code constructs such as types and type members. Для разделяемых типов только одна часть типа может содержать комментарии XML, хотя не существует ограничений на комментирование его элементов.For partial types, only one part of the type can have XML comments, although there is no restriction on commenting its members.

Примечание

Комментарии к документации нельзя применять к пространствам имен.Documentation comments cannot be applied to namespaces. Причина состоит в том, что одно пространство имен может охватывать несколько сборок, и не все сборки должны быть загружены одновременно.The reason is that one namespace can span several assemblies, and not all assemblies have to be loaded at the same time.

Компилятор обрабатывает любой тег, который является допустимым XML.The compiler processes any tag that is valid XML. Следующие теги предоставляют часто используемые функции в пользовательской документации.The following tags provide commonly used functionality in user documentation.

(1 компилятор проверяет синтаксис.)(1 The compiler verifies syntax.)

Примечание

Если необходимо, чтобы угловые скобки отображались в тексте комментария к документации, используйте &lt; и &gt; .If you want angle brackets to appear in the text of a documentation comment, use &lt; and &gt;. Например, строка "&lt;text in angle brackets&gt;" будет выглядеть так <text in angle brackets> :.For example, the string "&lt;text in angle brackets&gt;" will appear as <text in angle brackets>.

См. такжеSee also

XML Введение — XML: Extensible Markup Language

XML — это язык разметки подобный HTML. Расшифровывается как (англ. Extensible Markup Language — Расширяемый Язык Разметки) и является рекомендацией сообщества W3C в качестве языка разметки общего назначения (W3C recommended). В отличии от остальных языков разметки, XML сам по себе не определен (это означает, что вы должны сами определять используемые теги). Основной целью XML является передача данных между разными системами (даже концептуально разными), такими как интернет.

Много языков базируются на XML; Некоторые примеры: XHTML, MathML, SVG, XUL, XBL, RSS, и RDF. Вы можете создать свой.

Правила оформления

Для корректного XML документа должны исполняться следующие условия: 

  • Правильное оформление документа.

  • Соблюдаться все синтаксические правила XML.

  • Документ должен соответствовать семантическим правилам языка (которые обычно заданны в схеме XML или DTD (англ. Document Type Definition)). 

Пример

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

<message>
    <warning>
        Hello World
    
</message>

Давайте посмотрим на корректную версию этого документа:

<message>
    <warning>
         Hello World
    </warning>
</message>

 Документ содержащий неопределенный тег является не корректным. Например, если мы не определили тег <warning>, документ не корректен.

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

HTML и XML предлагают методы (которые называют сущности) для обращения к специальным зарезервированным символам (например угловые скобки, обозначающие начало и конец тега). Существует пять сущностей, которые вы обязательно должны знать:

Сущность Символ Описание
&lt; < Знак меньше (одна из угловых скобок)
&gt; > Знак больше (одна из угловых скобок)
&amp; & Амперсанд
&quot; « Двойная кавычка
&apos; Одинарная кавычка (апостроф)

Не смотря на то, что по умолчанию создано всего пять сущностей, вы можете добавить в документ свои сущности используя Document Type Definition. Например, создать новую &warning; сущность, можно так:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE body [
  <!ENTITY warning "Предупреждение: произошла ошибка, обновите и попробуте еще раз.">
]>
<body>
  <message> &warning; </message>
</body>

Также вы можете использовать нумерические ссылки для специфический специальных символов. Например, &#xA9; — это символ «©».

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

Один из методов отображения XML — указать CSS (чтобы использовать в документе нужно прописать инструкцию xml-stylesheet, как показано в примере ниже).

<?xml-stylesheet type="text/css" href="stylesheet.css"?>

Есть также много других мощных методов отображения XML, например, XSLT(англ. Extensible Stylesheet Language Transformations), который может использоваться для преобразование XML в другие языки такие, как HTML. Это делает XML очень универсальным.

<?xml-stylesheet type="text/xsl" href="transform.xsl"?>

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

Изчайте HTML (англ. HyperText Markup Language), знание HTML поможет вам лучше понять XML.

Статья Using XML — отличный ресурс с большим количеством информации о саздании своего языка на основе XML.

Основные конструкции XML — элементы XML, теги, атрибуты, процессинговые инструкции, секции CDATA, комментарии

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

Некоторые моменты, такие как теги XML, мы уже частично рассматривали в предыдущей статье «Разметка XML-документов». Теперь мы еще раз затронем эту тему и разберем ее более подробно. Это сделано специально, чтобы вам было проще представить всю картину конструкций XML.

Элементы XML. Пустые и непустые элементы XML

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

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

Пустой элемент XML

<myElement name="myName" />

Непустой элемент XML

<myElement атрибуты элемента и т.д. >
    Содержимое элемента...
</myElement>

Как мы видим с примера выше, главным отличием пустых элементов от непустых является то, что они состоят только из одного тега. Кроме того стоит также заметить, что в XML все имена регистрозависимые. Это означает, что имена myElement, MyElement, MYELEMENT и т.д. различаются между собой, поэтому данный момент стоит сразу запомнить, чтобы избежать ошибок в будущем.
Итак, с элементами мы разобрались. Теперь давайте перейдем к следующему моменту, такому как логическая организация XML-документов.

Логическая организация XML-документов. Древовидная структура XML данных

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

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

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

Атрибуты XML. Правила записи атрибутов в XML

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

<myElement attribute="value" ></myElement>

В данном случае использовался атрибут с именем «attribute» и значением «value». Тут стоит сразу заметить, что атрибут XML обязательно должен содержать какое-то значение и не может быть пустым. В противном случае код будет некорректным с точки зрения XML.

Также стоит обратить внимание на использование кавычек. Значение атрибутов может заключаться как в одинарные, так и в двойные кавычки. Кроме того возможно также использование одних кавычек внутри других. Для демонстрации рассмотрим следующие примеры.

<myElement attribute="value" ></myElement>
<myElement attribute='value' ></myElement>
<myElement attribute='"value"' ></myElement>

Прежде чем приступить к рассмотрению других конструкций XML стоит также заметить, что при создании атрибутов в качестве значений не могут использоваться такие специальные символы, как амперсанд «&» или угловые скобки «<>». Данные символы зарезервированы в качестве управляющих («&» — сущность, а «<» и «>» открывают и закрывают тег элемента) и не могут быть использованы в «чистом виде». Для их использования нужно прибегать к замене спецсимволов.

Инструкции по обработке XML (процессинговые инструкции). XML-декларация

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

<?Приложение содержимое?>

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

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

<?xml version="1.0" encoding="utf-8"?>

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

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

  • Encoding – отвечает за кодировку XML документа. Обычно используется кодировка UTF8.
  • Version – версия языка XML, на котором написан данный документ. Обычно это XML версии 1.0.

Ну а теперь перейдем к заключающей части статьи и рассмотрим такие конструкции XML как комментарии и секции CDATA.

Комментарии в XML. Секции CDATA

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

<!--Текст комментария -->

Здесь сразу стоит обратить ваше внимание на 2 правила:

  1. В тексте комментария не может быть двух символов «-» подряд.
  2. Комментарий не может заканчиваться символом «-».

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

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

<![CDATA[содержимое]]>

При этом в качестве содержимого могут быть любые символы, включая амперсанд «&» и угловые скобки «<» и «>». Исключением здесь является лишь последовательность символов «]]>», которая не может быть использована в секции CDATA.

Ну и в завершение статьи давайте рассмотрим пример использования секций CDATA.

<![CDATA[<myElement>Содержимое элемента XML</myElement>]]>

В обычных условиях содержимое секции CDATA было бы воспринято как часть разметки. В данном же случае оно будет расцениваться как обычные символьные данные.

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

На этом все. Удачи вам и успехов в изучении XML.