Cодержимое XML элементов
ОСНОВЫ XML
Аббревиатура XML (EXtensible Markup Language) означает - расширяемый язык разметки. XML — это язык, очень похожий на HTML и был создан для описания данных. XML теги не требуют жесткого определения. Пользователь может разработать свои собственные теги XML для описания данных, которые составляется в соответствии с Определением Типа Документа (DTD - document type definition) или в соответствии с XML схемой (XSL - Extensible Style Language). Язык XML — является рекомендация W3C (World Wide Web Consortium).
Основное отличие XML от HTML
Так, как язык XML был создан для хранения данных, он не является заменой языка HTML. Языки XML и HTML преследуют различные цели:
- язык XML это язык описания данных, концентрирующий свое внимание на сущность данных;
- язык HTML это язык, описывающий представление (отображение) данных.
Области применения XML
Вследствие того, что язык XML был разработан для хранения, передачи и обмена данными, он позволит хранить данные отдельно от HTML страницы. Следует заметить, что XML данные могут также храниться внутри HTML страниц как «островки данных». В этом случае описание страницы на языке HTML обеспечивает только форматирование и отображение данных.
Язык XML используется для описания обмена данными. С помощью XML технологий (XML пакетов) возможно, осуществить обмен данными между различными системами, даже в случае их полной несовместимости. Преобразование данных в XML формат позволяет значительно упростить задачу обмена и обеспечивает возможность взаимодействия различных программ.
В настоящее время широко используется обмен финансовой информацией через Интернет, который называется B2B (Business To Business — бизнес для бизнеса).
С помощью XML обычные текстовые файлы (txt) можно использовать для публикации данных. Тот факт, что данные хранятся в обычных текстовых файлах, позволяет технологии XML использовать программно и аппаратно независимые решения для публикации данных. Этот факт упрощает процесс создания баз данных, поскольку с XML могут работать самые различные программы. Также упрощаются процессы развития: обновления операционных систем, серверов, программ и браузеров.
На основе XML пакетов возможно создание эффективных локальных реляционных баз данных, не требующих для функционирования установленных ядер СУБД. Следует отметить, что XML пакеты поддерживают практически все известные типы полей, включая поля типа Array и Nested (Data Set), чем обеспечивается возможность описания объектов, т.е. представляется эффективное средство создания локальных объектных СУБД и объектных электронных документов (ОЭД).
Язык XML используется для создания новых языков, например, на XML написаны языки WAP и WML. Следует отметить, что язык WML, представляет собой язык хранения и представления данных, как HTML для мобильных телефонов. Синтаксис языка WML соответствует синтаксису языка XML.
В настоящее время, опираясь на базовые концепции XML, разработчики всего мира, работают над проблемами создания текстовых процессоров, электронных таблиц и баз данных, которые смогут взаимодействовать без применения ActixeX и подобных платформо - зависимых технологий.
Синтаксис языка XML
Общие положения
Синтаксические правила языка XML однозначны и достаточно просты. Синтаксис языка является самоопределяющим. Именно по этой причине упрощается разработка программ, способных читать и обрабатывать XML.
Рассмотрим пример XML документа.
<?xml version="1.0" encoding="Windows-1251"?>
<note>
<to>Сергей</to>
<from>Наталья</from>
<heading>Напоминание</heading>
<body>Не забудь принести конспект!</body>
</note>
Первая строка в документе является строкой объявления типа документа. В первой строке указывается версия XML и кодировка, которая используется в документе. В нашем случае документ соответствует версии 1.0 спецификации XML, и использует кодировку Windows-1251 (кириллица).
<?xml version="1.0" encoding="Windows-1251"?>
Следующая строка определяет корневой элемент документа. Это все равно, что сказать: «этот документ — записка (note)».
- <note>
Последующие 4 строки описывают 4 элемента записки (note):
- <to>Сергей</to> - кому
- <from>Наталья</from> - от кого
- <heading>Напоминание</heading> - заголовок
- <body>Не забудь принести конспект!</body>- содержание (тело документа).
Последняя строка указывает на завершение корневого элемента:
- </note>
Все элементы XML должны иметь закрывающий тег:
- <p>1-й параграф</p>
- <p>2-й параграф</p>
В приведенном примере объявление типа документа не имеет закрывающий тег. Это не ошибка, так как объявление типа документа не является элементом XML документа.
Следует обратить особое внимание на тот факт, что XML теги чувствительны к регистру. В XML документе тег <Letter> это не то же самое, что тег <letter>. Открывающий и закрывающий теги должны быть написаны одинаково с учетом регистра, например:
- <Message>Это неправильно!</message>
- <message> Это правильно</message>
В XML документе все элементы обязательно должны быть строго вложенными:
- <b><i>Этот текст печатается жирным курсивом</i></b>
Все XML документы должны иметь единственный корневой элемент, т.е. должны содержать единственную пару тегов, определяющую корневой элемент:
- <note>
- --------
- --------
- --------
- </note>
Все остальные элементы должны быть потомками корневого элемента, т.е. представлять дочерние элементы.
Любой элемент может иметь свой дочерний элемент. Дочерние элементы должны быть строго вложены в родительский элемент:
<root>
<child>
<subchild>………</subchild>
</child>
</root>
В рассмотренном примере: root - это корень, child - потомок, а subchild потомок потомка.
Значения атрибутов должны быть заключены в кавычки, например:
<?xml version="1.0" encoding="Windows-1251"?>
<note date="12/11/2008">
<to>Сергей</to>
<from>Наталья</from>
</note>
XML элементы могут иметь атрибуты, которые следуют парой друг за другом: “название атрибута / значение атрибута”, например:
<note date="12/11/2008" time=”12:00” >
В XML пробелы сохраняются. Все подряд идущие пробелы не сокращаются до одного, как в HTML, а воспринимаются, как есть.
В XML, команды CR/LF (перевода строки и возврата каретки) преобразуется в LF. Новая строка всегда обозначается как LF.
В Windows приложениях новая строка обычно записывается как пара специальных символов: возврат каретки (CR — carriage return) и перевод строки (LF — line feed). Эта пара спецсимволов подобна действиям при печати на печатной машинке, в случае, когда вы переходите на следующую строку. В Unix приложениях новая строка обычно обозначается только символом LF.
Коментарии
Синтаксис для записи комментариев в XML аналогичен синтаксису, принятому в HTML, например:
<!-- Это комментарий -->
XML представляет собой обычный текст, заключенный в угловые символы - теги. Программное обеспечение, которое может обрабатывать обычный текст может также читать и XML текст. В обычном текстовом редакторе XML теги будут видимы, и не будут отображаться либо обрабатываться каким-либо образом. В XML-ориентированных программах, XML теги обрабатываться по определенному алгоритму, соответствующему функциональному назначению программы.
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 файле. Следует заметить, что идентификаторы не являются частью данных.
Повторно отметим, что метаданные (данные о данных) должны храниться в атрибутах, в то время как сами данные должны храниться в элементах.
XML Валидация
Правильным XML ("well formed") документом называется документ, имеющий правильный синтаксис. Правильный XML документ, должен соответствовать определенному DTD (определителю типа документа).
<?xml version="1.0" encoding="Windows-1251"?>
<!DOCTYPE note SYSTEM "InternalNote.dtd"><note>
<to>Сергей</to>
<from>Наталья</from>
<heading>Напоминание</heading>
<body>Не забудь принести конспект!</body>
</note>
DTD определяет элементы, которые можно использовать в XML документе. Целью DTD является обозначение правил взаимного расположения элементов и конструкций в XML документе. DTD определяет структуру XML документа и набор используемых элементов (т. е. их названий).
Консорциум W3 поддерживает также и другой способ валидации, названный XML схемой.
Применение DTD или XML схем исключает возможные ошибки, которые приводят
к прекращению обработки XML документа.
Спецификация языка XML указывает на то, что программы должны остановить обработку XML документа, если найдут в нем синтаксические ошибки. Такое правило вводится для того, чтобы упростить написание программ, читающих XML, а также для того, чтобы сделать XML документы совместимыми.