Лекция: Создание корректно сформированных XML-документов

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

Содержание

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

В лекции 2 вы узнали, что XML-документ состоит из двух основных частей: пролога и элемента Документ (корневого элемента). Помимо этого, вслед за элементом Документ корректно сформированный XML-документ может содержать комментарии, инструкции по обработке, а также пробелы. На рисунке 3.1 приведен пример корректно сформированного XML-документа, отражающий различные части документа и включения, которые вы можете добавлять в каждую из частей.

Рис. 3.1.

В листинге 3.1 представлена полная версия документа для данного примера.

The Adventures of Huckleberry Finn Mark Twain mass market paperback 298 $5.49 Leaves of Grass Walt Whitman hardcover 462 $7.75 The Legend of Sleepy Hollow Washington Irving mass market paperback 98 $2.95 The Marble Faun Nathaniel Hawthorne trade paperback 473 $10.95 Moby-Dick Herman Melville hardcover 724 $9.95 The Portrait of a Lady Henry James mass market paperback 256 $4.95 The Scarlet Letter Nathaniel Hawthorne trade paperback 253 $4.25 The Turn of the Screw Henry James trade paperback 384 $3.35

Листинг 3.1. Parts.xml (html, txt)



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

XML-объявление в примере (см. Листинг 3.1) также включает в себя объявление документа автономным (standalone=’yes’). Это объявление может использоваться в некоторых XML-документах с целью упростить обработку документа. (Об объявлении документа автономным будет рассказано в лекции 6.)



В рассматриваемом примере имеется комментарий в прологе, а также другой комментарий, следующий за элементом Документ. (Подробнее о комментариях вы узнаете в лекции 4.)

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

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

Наконец, документ включает в себя sine qua non (обязательную часть) XML-документа: элемент Документ. Создание элемента Документ и вложенных в него элементов является основным предметом рассмотрения в этой лекции.

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

Наименьший XML-документ

Пролог рассматриваемого XML-документа (см. листинг 3.1) содержит примеры каждого из разрешенных внутри пролога включений. Заметим, однако, что все эти включения не являются обязательными (хотя в спецификации XML заявлено, что вам "следует" включать XML-объявление). Следовательно, и сам пролог является необязательным, что подтверждается следующим минимальным документом, который содержит только элемент Документ, в соответствии с XML-стандартом для корректно сформированного документа.

A minimalist document.

B Internet Explorer 5 этот документ будет отображен, как показано на рисунке 3.2.


Рис. 3.2.

Добавление элементов в документ Элементы в XML-документе содержат фактическую информацию, имеющуюся в документе (для листинга 3.1, например, это названия книг, фамилии авторов, цена и т. д.), а также отражают логическую структуру информации. Элементы организованы в иерархическую древовидную структуру, в которой одни элементы вложены в другие. Документ должен иметь один и только один элемент верхнего уровня – элемент Документ, или корневой элемент – а все другие элементы вложены в него. Представленный ниже XML-документ является корректно сформированным. The Adventures of Huckleberry Finn Mark Twain mass market paperback 298 $5.49 Leaves of Grass Walt Whitman hardcover 462 $7.75 А вот следующий документ не является корректно сформированным. The Adventures of Huckleberry Finn Mark Twain mass market paperback 298 $5.49 Leaves of Grass Walt Whitman hardcover 462 $7.75 Элементы также должны быть правильно вложены. При этом если элемент (ограниченный начальным и конечным тегами) начинается внутри другого элемента, то он должен и заканчиваться внутри того же элемента. Например, эти элементы являются корректно сформированными: Leaves of Grass Walt Whitman В то же время эти элементы не являются корректно сформированными: The Adventures of Huckleberry Finn Примечание. Элемент, который содержит один или более вложенных элементов (например, BOOK в листинге 3.1), называется родительским элементом. Элемент, содержащийся непосредственно внутри родительского элемента (например, TITLE внутри BOOK), называется дочерним элементом, субэлементом, или вложенным элементом. Анатомия элемента Элемент обычно состоит из начального тега, содержимого и конечного тега, как показано на рисунке 3.3. Рис. 3.3. В отличие от HTML, XML требует наличия как начального, так и конечного тега. (Единственным исключением является элемент без содержимого, для которого вы можете использовать специальный тег пустого элемента, о котором пойдет речь далее в этой лекции.) Имя, которое содержится в стартовой позиции начального тега и в конечном теге (TITLE в нашем примере), называется типом или родовым идентификатором элемента (GI). Имя элемента идентифицирует особый тип или класс элемента, а не собственно элемент. Таким образом, документ может содержать более одного элемента с одинаковыми именами типа (например, элементы BOOK или TITLE в листинге 3.1). При добавлении элемента в XML-документ вы можете выбрать любое имя типа по вашему желанию, руководствуясь при этом следующими правилами:
  • имя должно начинаться с буквы или с символа подчеркивания (_), после чего могут идти буквы, цифры, символы точки (.), тире (–) или подчеркивания;
  • в спецификации XML указано, что имена типов элементов, которые начинаются с префикса "xml" (при любом сочетании строчных или прописных букв), "зарезервированы для стандартных имен". Хотя Internet Explorer 5 не слишком требователен в этом отношении, лучше не использовать этот префикс, дабы избежать будущих неприятностей.
Ниже приведены примеры правильного задания имен типов элементов. Part_lstPlaceAB-SECTIONStreet.Address.1 Следующие имена использовать недопустимо: 1stPlace B Section B/Section :Chapter A:Section Примечание. В соответствии с XML-спецификацией двоеточие (:) в имени элемента зарезервировано для задания пространства имен. Пространства имен дают возможность дифференцировать элементы с одними и теми же именами. Этот вопрос будет обсуждаться в лекции 7 в разделе "Вставка HTML-элементов в XML-документы и использование пространств имен". Internet Explorer 5 разрешает вам использовать двоеточие в имени элемента только в том случае, если оно следует за пространством имен, объявленным вами в документе. Например, запись A:Section будет корректной, только если вы объявили А как пространство имен. Имя, записанное в начальном теге, должно в точности соответствовать имени в конечном теге, включая регистр, в котором набраны буквы. Так, следующий элемент является некорректным. Chapter one Соблюдение регистра существенно для имен элементов, как и для всего текста в описании разметки. Так, тип элемента с именем Ace не будет эквивалентен типу ace или ACE.
Типы содержимого элемента Содержимым элемента считается текст, расположенный между начальным и конечным тегами. Вы можете использовать в качестве содержимого элемента следующие типы сообщений:
  • вложенные элементы – в Листинге 3.1 элемент INVENTORY и элемент BOOK имеют в своем содержимом вложенные элементы, как показано на рисунке 3.4;
Рис. 3.4.
  • символьные данные – это текст, выражающий информационное содержание элемента, например, название определенной книги в элементе TITLE, как показано на рисунке 3.5.
Рис. 3.5. Ниже приведен пример содержимого элемента, состоящего из сочетания символьных данных и вложенного элемента, как показано на рисунке 3.6. Рис. 3.6. При добавлении в элемент символьных данных вы можете использовать любые символы, за исключением левой угловой скобки (. Примечание. Синтаксический анализатор XML сканирует символьные данные элемента для XML-разметки. Вы не можете использовать левую угловую скобку ( в составе символьных данных, поскольку анализатор может интерпретировать как окончание раздела CDATA. (О ссылках на примитивы и ссылках на символы пойдет речь в лекции 6; о разделе CDATA в лекции 4). Если вы хотите использовать символы < или & как часть символьных данных, вам необходимо воспользоваться разделом CDATA. Вы также можете использовать любые символы (в том числе те, которых нет на клавиатуре), воспользовавшись ссылкой на символ. Некоторые символы (например, < или &) вы можете вставлять с использованием предопределенных ссылок на общие примитивы.
  • Ссылки на общие примитивы и ссылки на символы. На рисунке 3.7 приведен элемент, содержащий оба вида таких ссылок.
Рис. 3.7.
  • Разделы CDATA – это текстовый блок, в котором вы можете свободно размещать любые символы, за исключением строки ]]>. Пример раздела CDATA внутри элемента, показан на рисунке 3.8.
Рис. 3.8.
  • Инструкции по обработке содержат информацию, необходимую для XML-приложений. (См. лекцию 4.)
  • Комментарии – это примечания к вашему XML-документу, которые прочитываются людьми, но игнорируются XML-процессором. (См. лекцию 4.)
  • На рисунке 3.9 приведен элемент, содержащий инструкцию по обработке и комментарий.
Рис. 3.9. Пустые элементы Вы также можете помещать пустой элемент – т.е. элемент, не имеющий содержимого – в ваш документ. Пустой элемент создается путем размещения конечного тега сразу же после начального тега. Например: Либо вы можете использовать специальный тег пустого элемента: Обе эти нотации являются эквивалентными. Поскольку пустой элемент не имеет содержимого, у вас может возникнуть вопрос о его предназначении. Здесь есть два варианта:
  • вы можете использовать пустой элемент, чтобы указать XML-приложению выполнить действие или отобразить объект. Аналогом в HTML является пустой элемент BR, который является указанием браузеру вставить разрыв строки, а также пустой элемент HR, указывающий на вставку горизонтальной разделительной линии. Другими словами, само присутствие элемента с определенным именем – без какого-либо содержимого – может послужить важной информацией для приложения;
  • пустой элемент может нести информацию посредством атрибутов, о которых вы узнаете далее в этой лекции. (С элементами, которые имеют атрибуты, вы еще не встречались.) Аналогом в HTML является пустой элемент IMG (изображение), содержащий атрибуты, которые сообщают процессору, где искать графический файл и как его отобразить.
Совет. Таблица каскадных стилей может использовать пустой элемент для отображения рисунка, подробнее об этом вы можете узнать в лекции 7. В лекции 8 вы узнаете, как применять связывание данных для доступа к атрибутам пустого или непустого элемента. В лекции 9 вы научитесь использовать HTML-сценарии, а в лекции 10 – XSL-таблицы стилей, для доступа к элементам и их атрибутам, и для последующего выполнения соответствующих действий.

Создайте различные типы элементов
  1. Откройте новый, пустой текстовый файл в вашем текстовом редакторе и наберите XML-документ, содержащийся в Листинге 3.2. Если хотите, можете воспользоваться документом Inventory.xml, созданным вами в лекции 2 в качестве отправной точки.
  2. Воспользуйтесь командой Save (Сохранить) вашего текстового редактора, чтобы сохранить документ на жестком диске, присвоив ему имя Inventory03.xml.
The Adventures of Huckleberry Finn Mark Twain mass market paperback 298 $5.49 Leaves of Grass Walt Whitman hardcover 462 $7.75 The Marble Faun Nathaniel Hawthorne trade paperback 473 $10.95 Moby-Dick Or, the Whale Herman Melville hardcover 724 $9.95 Листинг 3.2. Inventory03.xml (html, txt) Примечание. Созданный вами документ использует CSS с именем Inventory02.css, который вы создали в предыдущем упражнении. Проверьте, чтобы файл с этой таблицей стилей был в той же папке, что файл Inventory03.xml.
  1. В Windows Explorer или в окне папки дважды щелкните на имени ранее сохраненного файла Inventory03.xml. Internet Explorer 5 отобразит документ, как показано на рисунке 3.10.
увеличить изображение Рис. 3.10. Документ содержит следующие типы элементов:
    • элемент с комментарием в качестве его содержимого (INVENTORY). Обратите внимание, что браузер не отображает текст комментария;
    • пустой элемент с именем COVER_IMAGE в начале каждого элемента BOOK. Назначение этого элемента – указать XML-приложению отобразить определенную картинку для книжной обложки. (Атрибут Source содержит имя файла картинки.) Чтобы иметь возможность использовать такой элемент, вам потребуется отобразить XML-документ на HTML-странице посредством сценария, либо с помощью XSL-таблицы стилей (об этом будет рассказано в лекциях 9 и 10), вместо того, чтобы использовать простую CSS-таблицу, как это делается в рассматриваемом примере;
    • элемент (элемент TITLE для Moby-Dick), который содержит символьные данные и дочерний элемент (SUBTITLE). Заметим, что браузер отображает и символьные данные, и дочерний элемент в одной строке, и в одном и том же формате. (CSS-формат, назначенный элементу TITLE, наследуется элементом SUBTITLE.)
Задание атрибутов для элементов В начальный тег элемента, либо в тег пустого элемента вы можете включить одно или несколько описаний атрибутов. Описание атрибута представляет собой пару имя – значение, связанную с данным элементом. Например, следующий элемент PRICE включает атрибут с именем Type, которому присвоено значение retail: $10.95 Следующий элемент BOOK включает два атрибута, Category и Display: The Marble Fauh Nathaniel Hawthorne trade paperback 473 $10.95 Следующий пустой элемент включает атрибут с именем Source, который указывает на имя файла, содержащего картинку, которую следует отобразить: Задание атрибутов обеспечивает альтернативный способ включения информации в элемент. Обычно вы помещаете все относящиеся к элементу данные, которые хотите отобразить, внутри содержимого элемента. Атрибуты же используются для хранения различных свойств элемента, которые не обязательно будут отображены (например, категория, или указания по отображению). В спецификации XML не установлено строгих разграничений относительно типа информации, которую можно описывать с помощью атрибутов или внутри содержимого элемента. Примечание. Когда вы отображаете XML-документ с использованием CSS-таблицы (данный метод будет обсуждаться в лекции 7), браузер не выводит атрибуты или их значения. Отображение же XML-документа с использованием связывания данных (см. лекцию 8), сценария для HTML-страницы (см. лекцию 9), либо XSL-таблицы стилей (см. лекцию 10) дает вам возможность иметь доступ к атрибутам и их значениям, а также отображать значение или выполнять соответствующие действия. Правила для создания атрибутов Описание атрибута состоит из имени атрибута, вслед за которым идет знак равенства и значение атрибута. Вы можете выбрать любое имя атрибута, придерживаясь при этом следующих правил:
  • имя должно начинаться с буквы или символа подчеркивания (_), после чего могут следовать или не следовать другие буквы, цифры, символы точки (.), тире (–) или подчеркивания;
  • спецификация XML оговаривает, что имена атрибутов, начинающиеся с префикса "xml" (в любом сочетании строчных или прописных букв), "зарезервированы для стандартного использования". Хотя для Internet Explorer 5 это ограничение значения не имеет, во избежание проблем в будущем лучше не использовать этот префикс;
  • каждое имя атрибута может только один раз присутствовать в одном и том же начальном теге или в теге пустого элемента.
Например, следующие описания имен в стартовых тегах являются допустимыми: Приведенные ниже имена атрибутов недопустимы: Примечание. В соответствии с XML-спецификацией двоеточие (:) в имени атрибута зарезервировано для задания пространства имен. Пространства имен дают возможность дифференцировать элементы с одними и теми же именами; этот вопрос будет обсуждаться в лекции 7 в разделе "Вставка HTML-элементов в XML-документы и использование пространств имен." Internet Explorer 5 разрешает вам использовать двоеточие в имени атрибута только в том случае, если оно следует за пространством имен, объявленным вами в документе. Например, запись A:Category будет корректной только если вы объявили А как пространство имен.


7399285835582663.html
7399331659923246.html
    PR.RU™