Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4_XML_-_lektsii.doc
Скачиваний:
8
Добавлен:
25.08.2019
Размер:
221.7 Кб
Скачать

Xml элементы

Элементы XML расширяемы и взаимосвязаны. Элементы XML имеют достаточно простые правила именования. Рассмотрим на примере возможность расширения элементов. Предположим элементы, описывающие исходное сообщение имеют вид:

<note>

<date>2002–08–01</date>

<to>Сергей</to>

<from>Наталья</from>

<body>Не забудь принести конспект!</body>

</note>

Представим, что мы сделали простую программу – вычислитель (parser), которая анализирует XML файл, изымает из него данные, содержащиеся в тегах <to>, <from> и <body> и представляет эту информацию в виде:

Сообщение

Кому: Сергей

От кого: Наталья

Не забудь принести конспект!

А теперь давайте представим, что автор XML документа добавил в него некоторую уточняющую информацию:

<note>

<to>Сергей</to>

<from>Наталья</from>

<heading>Напоминание</heading>

<body>Не забудь принести конспект!</body>

</note>

Стоит вопрос, что тогда произойдет с программой и нужно ли ее переписывать?

Правильно написанную программу переписывать не потребуется. При анализе XML файла программа будет искать содержимое тегов <to>, <from>, и <body> и она, по прежнему, будет выводить на экран такое же напоминание.

В этом и есть суть того, что называется расширяемостью языка XML.

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

Xml с нуля

Введение в XML

  • Что такое HTML

  • Что такое XML

  • Синтакс XML

  • Элементы должны иметь закрывающий тег

  • Элементы должны быть строго вложенными

Представим, что XML документ описывает эту книгу:

<book>

<title>XML с нуля</title>

<prod id="33–657" media="paper"></prod>

<chapter>Введение в XML

<para>Что такое HTML</para>

<para>Что такое XML</para>

</chapter>

<chapter>Синтакс XML

<para>Элементы должны иметь закрывающий тег</para>

<para>Элементы должны быть строго вложенными</para>

</chapter>

</book>

Book (книга) - это корневой элемент. Элементы Title, prod, и chapter являются потомками элемента book. Book является родительским элементом для элементов title, prod и chapter. Элементы Title, prod, и chapter представляют родственные (сестринские элементы), поскольку у них имеется общий родитель book.

Cодержимое XML элементов

Содержимое элементов имеет несколько типов. Элемент может иметь:

  • элементное содержимое;

  • смешанное содержимое;

  • простое содержимое;

  • пустое содержимое.

У элемента также могут быть атрибуты.

В ранее рассмотренном примере book имеет элементное содержимое, потому что содержит другие элементы. Элемент Chapter имеет смешанное содержимое, поскольку содержит как текст, так и другие элементы, а элемент Para имеет простое содержимое, поскольку в нем содержится только текст. Элемент Prod имеет пустое содержимое, поскольку внутри тегов его конструкции ничего нет.

Обратите внимание на тот факт, что у элемента prod есть атрибуты. Атрибут id (индекс) и имеет значение 33–657, а атрибут media имеет значение paper.

Именование элементов

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

  • Имена могут состоять из букв цифр и других символов;

  • Имена не могут начинаться с цифры или знака препинания;

  • Имена не должны начинаться с последовательности символов: xml (или XML, или Xml и т. д.);

  • Имена не могут содержать пробелов.

При присвоении собственных имен элементам необходимо придерживаться следующих правил:

  • Для имен нет ограничений, и у пользователя полная свобода в выборе имен, но важно, чтобы ваши имена элементов было читабельны (понимаемы).

  • Имена с символом подчеркивания в качестве разделителя являются хорошим стилем определения имен, например: <first_name>, <last_name>.

  • Рекомендуется избегать использования символов «-» и «.» в именах. Например, если элементу было присвоено имя first-name, то вполне вероятна ошибка, что некоторые программы попытаются от first вычесть name. В случае если пользователь назвал элемент first.name, некоторые программы могут воспринять это имя как параметр name элемента first.

  • В XML спецификации длина имени не ограничена, но этим не следует злоупотреблять. Имена должны быть короткими и простыми, такими как <book_title>, а не <the_title_of_the_book>.

  • XML документы часто привязаны к какой-либо существующей базе данных, в которой структурные объекты соответствуют элементам XML документа. Хорошим тоном считается присваивать имена XML элементам в соответствии с именами, существующими в базе данных.

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

  • В именах нельзя использовать символ «:», поскольку он зарезервирован для пространств имен.

Атрибуты XML

Атрибуты предназначены для указания дополнительной информации об элементе.

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

<file type="gif">computer.gif</file>

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

  • <person year="1960"> или: <person year='1960'>

Следует отметить важный факт, что если в значении атрибута есть двойные кавычки, то это значение должно быть записано внутри одинарных кавычек, а если в значении атрибута есть одинарные кавычки, то это значение должно быть записано внутри двойных кавычек:

  • <gangster name='George "Shotgun" Ziegler'>

  • <gangster name="George 'Shotgun' Ziegler">

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

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

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

Рассмотрим пример, в котором дата записки определена как атрибут:

<note date="12/11/2002">

<to>Сергей</to>

<from>Наталья</from>

<heading>Напоминание</heading>

<body> Не забудь принести конспект!</body>

</note>

Описать дату записки лучше как отдельный элемент, например:

<note>

<date>12/11/2002</date>

<to>Сергей</to>

<from>Наталья</from>

<heading>Напоминание</heading>

<body> Не забудь принести конспект!</body>

</note>

Если необходимо, то дату записки можно описать в расширенном (более гибком) элементе:

<note>

<date>

<day>12</day>

<month>11</month>

<year>2002</year>

</date>

<to>Сергей</to>

<from>Наталья</from>

<heading>Напоминание</heading>

<body>Не забудь принести конспект!</body>

</note>

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

  • атрибуты не могут содержать больше одного значения, а дочерние элементы могут;

  • атрибуты трудно расширяются в случае необходимости внесения каких-либо изменений;

  • структуры нельзя описать атрибутами, а дочерними элементами можно;

  • программы – parser'ы трудно реализуются для работы с атрибутами, так как атрибуты сложно проконтролировать на соответствие единому DTD (определению типа документа), устанавливающему валидность (правильность) того или иного XML документа.

Таким образом, можно сделать вывод:

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

Однако у правил всегда есть исключения. Рассмотрим случай, который демонстрирует обоснованное применение атрибутов. Иногда пользователь назначает идентификаторы (id) элементам. Эти идентификаторы используются для доступа к определенным XML элементам, подобно тому, как это делается в HTML, например:

<messages>

<note id="p501">

<to>Сергей</to>

<from>Наталья</from>

<heading>Напоминание</heading>

<body>Не забудь принести конспект!</body>

</note>

<note id="p502">

<to>Наталья</to>

<from>Сергей</from>

<heading>Re: Напоминание</heading>

<body>Не забуду!</body>

</note>

</messages>

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

Повторно отметим, что метаданные (данные о данных) должны храниться в атрибутах, в то время как сами данные должны храниться в элементах.