XML элементы

XML документ состоит из XML элементов.

Что такое XML элемент?

XML элемент — это все от (и включая) начального тега элемента до (и включая) конечного тега элемента.

<price>39.95</price>

Элемент может содержать:

  • другие элементы
  • текст
  • атрибуты
  • или набор из всего выше названного
<bookstore>
   <book category="CHILDREN">
      <title>Harry Potter</title>
      <author>J K. Rowling</author>
      <year>2005</year>
      <price>29.99</price>
   </book>
   <book category="WEB">
      <title>Learning XML</title>
      <author>Erik T. Ray</author>
      <year>2003</year>
      <price>39.95</price>
   </book>
</bookstore>

В приведенном выше примере элементы

<title>, <author>, <year>, <price> содержат текстовый контент, потому что они содержат текст;

<bookstore> и <book> содержат

элементный контент, состоящий из других элементов;

у <book> есть атрибут (category=»CHILDREN»).

Пустые XML элементы

Элемент без контента называется пустым.

При написании элементов без контента (пустых элементов) можно использовать альтернативный синтаксис.

Вместо того, чтобы писать пустой элемент в виде:

<book></book>

Можно написать:

<book />

Такой синтаксис элемента называется самозакрывающийся.

Оба варианта дают одинаковый результат в XML приложениях (парсерах, браузерах и т.д.).

У пустых элементов могут быть атрибуты.

Правила написания имен XML

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

  • Имена элементов регистрозависимы
  • Имена элементов должны начинаться с буквы или символа подчеркивания
  • Имена элементов не могут начинаться с сочетания «xml» (или XML, или Xml и т.п.)
  • Имена элементов могут содержать буквы, числа, дефис, символ подчеркивания и точку
  • Имена элементов не могут содержать пробельные символы
  • Имена элементов не могут начинаться с цифры или символа пунктуации

В качестве имен можно использовать любые слова. Нет зарезервированных слов (кроме слова xml).

Хорошая практика составления имен

Старайтесь придумать описательные имена: <first_name>, <last_name>, <date>, <author>.

Имена следует составлять короткие и простые, вроде: <book_title>; а не: <the_title_of_the_book>.

Избегайте символ «-«. Если вы напишите нечто вроде «first-name», то некоторые приложения могут решить, что вы хотите вычесть «name» из «first».

Избегайте символ «.». Если вы напишите нечто вроде «first.name», то некоторые приложения могут решить, что «name» это свойство объекта «first».

Избегайте символ «:». Двоеточие зарезервировано для механизма пространства имен.

Не-латинские символы, вроде, éòá вполне легальны в XML, однако, если некое приложение их не поддерживает, то возникнут проблемы.

Соглашение по написанию имен

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

СтильПримерОписание
Нижний регистр<firstname>Все буквы в нижнем регистре
Верхний регистр<FIRSTNAME>Все буквы в верхнем регистре
С символом подчеркивания<first_name>Слова разделяются символом подчеркивания
В стиле Pascal<FirstName>Первые буквы всех слов в верхнем регистре
«Верблюжий горб»<firstName>Первые буквы всех слов за исключением первого в верхнем регистре

Если вы выбрали какой-либо стиль написания имен, то следует последовательно придерживаться его!

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

Расширяемость XML элементов

XML элементы могут быть расширены, чтобы нести больше информации.

Взгляните на следующий пример:

<note>
   <to>Tove</to>
   <from>Jani</from>
   <body>Не забудь про меня в эти выходные!</body>
</note>

Давайте представим, что мы создали приложение, которое извлекает элементы <to>, <from> и <body> из XML документа и формирует следующее сообщение:

СООБЩЕНИЕ

Кому: Tove

От: Jani

Не забудь обо мне в эти выходные!

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

<note>
   <date>2008-01-10</date>
   <to>Tove</to>
   <from>Jani</from>
   <heading>Напоминание</heading>
   <body>Не забудь про меня в эти выходные!</body>
</note>

Прервется ли работа нашего приложения?

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

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

XML атрибуты

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

Атрибуты предоставляют дополнительную информацию об элементе.

XML атрибуты

В HTML атрибуты предоставляют некоторую дополнительную информацию об элементе:

<img src="computer.gif">
<a href="demo.asp">

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

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

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

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

<person sex="female">

либо так:

<person sex='female'>

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

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

либо использовать символы сущностей:

<gangster name="George &quot;Shotgun&quot; Ziegler">

XML элементы или атрибуты

Посмотрите на следующие примеры:

Пример 1

<person sex="female">
   <firstname>Anna</firstname>
   <lastname>Smith</lastname>
</person>

Пример 2

<person>
   <sex>female</sex>
   <firstname>Anna</firstname>
   <lastname>Smith</lastname>
</person>

В первом примере пол указан в атрибуте. Во втором, пол записан, как элемент. Оба примера предоставляют одну и ту же информацию.

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

Что лучше?

Следующие три XML документа содержат совершенно одинаковую информацию:

Пример 1

Дата записана, как атрибут date:

<note date="10/01/2008">
   <to>Tove</to>
   <from>Jani</from>
   <heading>Напоминание</heading>
   <body>Не забудь обо мне в эти выходные!</body>
</note>

Пример 2

Дата записана, как элемент <date>:

<note>
   <date>10/01/2008</date>
   <to>Tove</to>
   <from>Jani</from>
   <heading>Напоминание</heading>
   <body>Не забудь обо мне в эти выходные!</body>
</note>

Пример 2

Дата записана, как расширенный элемент <date>, что на наш взгляд является наилучшим вариантом:

<note>
   <date>
      <day>10</day>
      <month>01</month>
      <year>2008</year>
   </date>
   <to>Tove</to>
   <from>Jani</from>
   <heading>Напоминание</heading>
   <body>Не забудь обо мне в эти выходные!</body>
</note>

Избегать XML атрибуты?

При использовании атрибутов возникают некоторые проблемы:

  • атрибуты не могут содержать множественные значения (элементы могут)
  • атрибуты не могут содержать древовидные структуры (элементы могут)
  • атрибуты сложно расширять (для будущих изменений)

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

Никогда не используйте следующие конструкции:

<note
   day="10" month="01" year="2008"
   to="Tove" from="Jani" heading="Напоминание"
   body="Не забудь обо мне в эти выходные!">
</note>

XML атрибуты для метаданных

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

<messages>
   <note>
      <to>Tove</to>
      <from>Jani</from>
      <heading>Напоминание</heading>
      <body>Не забудь обо мне в эти выходные!</body>
   </note>
   <note>
      <to>Jani</to>
      <from>Tove</from>
      <heading>Re: Напоминание</heading>
      <body>Не забуду</body>
   </note>
</messages>

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

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

Пример схемы XML

❮ Предыдущая Далее ❯


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


XML-документ

Давайте посмотрим на этот XML-документ под названием «shiporder.xml»:

xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»
xsi :noNamespaceSchemaLocation=»shiporder.xsd»>
Джон Смит
<доставка>
Ола Нордманн
<адрес>Ланггт 23
4000 Ставангер
Норвегия

<элемент>
Империя бурлеска
Специальное издание
<количество>1
<цена>10,90

<элемент>
Спрячь свое сердце
<количество>1
9,90

Приведенный выше XML-документ состоит из корневого элемента «shiporder», который содержит обязательный атрибут под названием «orderid». Элемент «shiporder» содержит три разные дочерние элементы: «orderperson», «shipto» и «item». Элемент «предмет» появляется дважды и содержит «название», необязательный элемент «примечание», «количество» и «цена». элемент.

Строка выше: xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» сообщает синтаксическому анализатору XML, что этот документ должен быть проверен на соответствие схеме. Строка: xsi:noNamespaceSchemaLocation=»shiporder.xsd» указывает, ГДЕ находится схема (здесь она находится в той же папке, что и «shiporder.xml»).



Создание XML-схемы

Теперь мы хотим создать схему для XML-документа выше.

Начнем с открытия нового файла, который мы назовем «shiporder.xsd». Чтобы создать схему, мы могли бы просто следовать структуру в XML-документе и определяем каждый элемент по мере его нахождения. Мы начнем со стандартного объявления XML, за которым следует элемент xs:schema, определяющий схему:


w3.org/2001/XMLSchema»>

< /xs:schema>

В приведенной выше схеме мы используем стандартное пространство имен (xs) и URI с этим пространством имен связано определение языка схемы, которое имеет стандартное значение http://www.w3.org/2001/XMLSchema.

Далее мы должны определить элемент «shiporder». Этот элемент имеет атрибут и содержит другие элементы, поэтому мы рассматриваем его как сложный тип. Дочерние элементы элемента «shiporder» окружены Элемент xs:sequence, определяющий упорядоченную последовательность подэлементов:







Затем мы должны определить элемент «orderperson» как простой тип (поскольку он не содержат никаких атрибутов или других элементов). Тип (xs:string) имеет префикс с префиксом пространства имен, связанным с XML-схемой, который указывает предопределенный тип данных схемы:

Далее мы должны определить два элемента сложного типа: «shipto» и «элемент». Начнем с определения элемента «shipto»:










С помощью схем мы можем определить количество возможных вхождений элемента с атрибутами maxOccurs и minOccurs. maxOccurs указывает максимальное количество вхождений элемента, а minOccurs указывает минимальное количество вхождений для элемента. Значение по умолчанию для maxOccurs и minOccurs равно 1!

Теперь мы можем определить элемент «item». Этот элемент может появляться несколько раз внутри элемента «shiporder». Это определяется установкой maxOccurs атрибут элемента «item» на «unbounded», что означает, что может быть как много вхождений элемента «item» по желанию автора. Обратите внимание, что Элемент «примечание» является необязательным. Мы указали это, установив minOccurs атрибут на ноль:










Теперь мы можем объявить атрибут элемента «shiporder». С это обязательный атрибут, который мы указываем use=»required».

Примечание: Объявления атрибутов всегда должны быть последними:

Вот полный список файла схемы называется «shiporder.xsd»:


w3.org/2001/XMLSchema»>





























Разделение схемы

Предыдущий метод проектирования очень прост, но его трудно читать и поддерживать, когда документы сложные.

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

Вот новый дизайн файла схемы («shiporder.xsd»):









































Использование именованных типов

Третий метод проектирования определяет классы или типы, что позволяет повторно использовать элемент определения. Это делается путем именования элементов simpleTypes и complexTypes, а затем указать на них через атрибут type элемента.

Вот третий вариант файла схемы («shiporder.xsd»):

































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

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





Указывает, что значение элемента или атрибута должно быть строкой, состоящей ровно из шести символов подряд, и эти символы должны быть число от 0 до 9.

❮ Предыдущий Следующий ❯


Синтаксис XML

❮ Предыдущий Далее ❯


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


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

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


 
    . ….
 

В этом примере является корневым элементом:

» ?>

  Тове
  Яни
  Напоминание
 Не забывайте меня в эти выходные!


Пролог XML

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

» ?>

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

XML-документы могут содержать международные символы, например норвежские øæå или Французский êèé.

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

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

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

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



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

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

Это абзац.



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


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

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

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

Это правильно

«Открывающий и закрывающий теги» часто называют «Открывающими и закрывающими тегами». Использовать Что вы предпочитаете. Это точно то же самое.


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

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

Этот текст выделен жирным шрифтом и курсивом

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

Этот текст полужирный и курсив

В приведенном выше примере «Правильно вложенный» просто означает, что, поскольку элемент открывается внутри элемента , он должен быть закрыт внутри элемента элемент.


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

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

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


  Tove
  Jani


Ссылки на объекты

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

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

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

salary < 1000

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

salary < 1000

В XML имеется 5 предопределенных ссылок на объекты:

< < меньше
> > больше
& и амперсанд
апостроф
" » кавычка

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