Xml уроки: Учебник XML для начинающих

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 (en-US))).

Пример

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

<message>
    <warning>
        Hello World
    <!--missing </warning> -->
</message>

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

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

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

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

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

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

Не смотря на то, что по умолчанию создано всего пять сущностей, вы можете добавить в документ свои сущности используя Document Type Definition (en-US). Например, создать новую &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.

  • XML.com
  • Extensible Markup Language (XML) @ W3.org
  • XML Example: A List Apart
  • Using XML: A List Apart

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

Last modified: , by MDN contributors

Хранение данных, XML, HTML— Ruby Rush

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

План урока

  1. Как по-человечески хранить данные
  2. Формат данных XML
  3. Чтение XML в Ruby
  4. Немного про HTML

Хранение данных для программ

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

Информация бывает очень сложная. Нельзя просто взять и записать в всё в один файл, как попало. Чтобы избежать неразберихи, люди договариваются о стандартах: розетки, батарейки, usb-входы. Программисты — тем более люди, они договорились о форматах и способах хранения данных.

Цель любого формата — структурировать данные, чтобы с ними было проще эффективнее работать: чтобы сразу было понятно, где файл начинается, где хранится служебная информация, как в нём упакованы данные. Форматов и способов хранения данных много, в нашем курсе мы познакомимся с самыми актуальными: XML, JSON и базы данных.

Формат XML

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

<?xml version="1.0" encoding="utf-8"?>
<account>
  <photos>
    <photo title="фоточка 1" />
    <photo title="фоточка 2" />
  </photos>
  <friends total="2">
    <friend number="1">Гоша</friend>
    <friend number="2">Петя</friend>
  </friends>
</account>
<!-- а вот так, кстати пишутся комментарии -->

Типичный XML файл начинается с заголовка, в котором указывается версия XML и кодировка файла <?xml version="1. 0" encoding="utf-8"?>. Дальше идёт дерево так называемых тегов. Корень у дерева один. Так и в XML-файле корневой тег-контейнер (оборачивающий всё остальное) — один. В нашем случае <account></account>.

Теги записываются в треугольных скобках и бывают открывающие (<photos>) и закрывающие, в начале названия которых стоит слеш (</photos>). Если какой-то элемент XML-структуры состоит из двух таких тегов, то он называется контейнером, т.к. в нём могут находиться другие элементы:

<photos>
  <photo title="фоточка 1" />
  <photo title="фоточка 2" />
</photos>

Если же у тега нет закрывающего, то такой тег содержит слеш в самом конце: (<photo ... />).

Ещё у тегов бывают атрибуты, а у атрибутов — значения. Пары атрибут-значение записываются с помощью знака равно: (<photo title="фоточка 2" />)

Также тег-контейнер может содержать внутри себя кроме других тегов просто обычный текст.

<some_tag>
  Я текст внутри тега "some_tag"
</some_tag>

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

Какие именно теги будут в вашей структуре — уже определяете вы, XML лишь накладывает требования на структуру, которые мы описали выше. Скажем, нельзя открыть тег и не закрыть его, нельзя оставить открой треугольную скобку вот так <error_tag.

XML настолько популярен, что многие программы в нем хранят данные. Например, популярный редактор текста Microsoft Word: его файлы *.docx по сути являются zip-архивами, если такой файл переименовать, поменяв расширение на .zip, то можно залезть внутрь такого архива и посмотреть, какие xml-файлы там лежат.

Проектируем программу для учета расходов

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

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

expenses.xml:

<?xml version="1.0" encoding="utf-8"?>
<expenses>
  <expense date="9.7.2015" category="Образование" amount="900" >
    Книжка по Ruby on Rails
  </expense>
  <expense date="1.7.2015" category="Хороший программист" amount="400" >
    Петличка и провода
  </expense>
  <expense date="23.6.2015" category="Хороший программист" amount="3500" >
    Софтбокс + штатив
  </expense>
</expenses>

Вот так мы будем хранить эти данные. Как вы видите, у нас есть корневой тег expenses, в него вложены теги expense (по одному на каждую трату), внутри каждого такого тега, текст с информацией о покупке, а в атрибутах date, amount и category соответственно дата, сумма и категория покупки.

Как читать формат XML в ruby

Для того, чтобы удобно работать с XML-файлами во всех современных языках есть парсеры. Парсер — это инструмент (чаще всего библиотека) для чтения данных из текста и представления их в удобной для работы с ними форме. Обычно их в каждом языке даже несколько. Какие-то быстрее, какие-то удобнее. Один из таких парсеров (REXML) уже встроен в Ruby (начиная с версии 1.9). Им и воспользуемся.

Программа для учёта расходов

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

Затем мы пройдёмся по всем дням и объединим их в месяцы:

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

Давайте писать программу!

expenses_reader. rb:

require "rexml/document" # подключаем парсер
require "date" # будем использовать операции с датами
current_path = File.dirname(__FILE__)
file_name = current_path + "/my_expenses.xml"
# UNLESS в руби - противоположный по смыслу оператору IF
# прерываем выполнение программы досрочно, если конечно файл не существует.
abort "Извиняемся, хозяин, файлик my_expenses.xml не найден." unless File.exist?(file_name)
file = File.new(file_name) # открыли файл
doc = REXML::Document.new(file) # создаем новый документ REXML, построенный из открытого XML файла
amount_by_day = Hash.new # пустой асс. массив, куда сложим все траты по дням
# выбираем из элементов документа все тэги <expense> внутри <expenses>
# и в цикле проходимся по ним
doc.elements.each("expenses/expense") do |item|
  # (Обратите внимание это локальная переменная объявленая в теле цикла, для каждой итерации
  # создается новая такая. За пределами цикла она не видна.)
  loss_sum = item.attributes["amount"]. to_i # сколько потратили
  loss_date = Date.parse(item.attributes["date"]) # когда. Date.parse(...) создает из строки объект Date
  # иницилизируем нулем значение хэша, если этой даты еще не было
  amount_by_day[loss_date] ||= 0
  # в руби "a ||= b" эквивалентно "if a == nil  a = b"
  # добавили трату за этот день
  amount_by_day[loss_date] += loss_sum
end
file.close
# сделаем хэш, в который соберем сумму расходов за каждый месяц
sum_by_month = Hash.new
# в цикле по всем датам хэша amount_by_day накопим в хэше sum_by_month
# значения потраченных сумм каждого дня
amount_by_day.keys.sort.each do |key|
  # key.strftime("%B %Y") вернет одинаковую строку для всех дней одного месяца
  # поэтому можем использовать ее как уникальный для каждого месяца ключ
  sum_by_month[key.strftime("%B %Y")] ||= 0
  sum_by_month[key.strftime("%B %Y")] += amount_by_day[key] # приплюсовываем к тому что было сумму следующего дня
end
# пришло время выводить статистику на экран
# в цикле пройдемся по всем месяцам и начнем с первого
current_month = amount_by_day. keys.sort[0].strftime("%B %Y")
# выводим заголовок для первого месяца
puts "------[ #{current_month}, всего потрачено: #{sum_by_month[current_month]} р. ]--------"
# цикл по всем дням
amount_by_day.keys.sort.each do |key|
  # если текущий день принадлежит уже другому месяцу...
  if key.strftime("%B %Y") != current_month
    # то значит мы перешли на новый месяц и теперь он станет текущим
    current_month = key.strftime("%B %Y")
    # выводим заголовок для нового текущего месяца
    puts "------[ #{current_month}, всего потрачено: #{sum_by_month[current_month]} р. ]--------"
  end
  # выводим расходы за конкретный день
  puts "\t#{key.day}: #{amount_by_day[key]} р."
end

Немного об HTML

HTML — грубо говоря, одна из разновидностей XML. Требования к разметке в некоторых версиях HTML, однако (а версий HTML много, сейчас, например, самая актуальная HTML5), могут существенно отличаться о того, что мы рассказали про XML.

Когда браузер заходит на какой-то сайт, он отправляет запрос и в качестве ответа получает в том числе текст в формате html. Браузер его обрабатывает и превращает в текст (также как Word превращает xml в те файлы, с которыми мы привыкли работать).

Давайте зайдём на сайт rubyrush.ru и посмотрим его html-разметку. Для этого нажмите на любой неактивный элемент на сайте правой кнопкой мыши и выберите пункт «Исходный код страницы», или просто нажмите Ctrl+U.

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

Итак, мы узнали о формате XML, научились читать данные из XML-файлов и узнали немного про HTML. На следующем уроке мы научимся писать свои XML файлы и сделаем так, чтобы нам не приходилось добавлять траты в файл expenses.xml руками.

Как можно использовать XML?

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


XML используется во многих аспектах веб-разработки.

XML часто используется для отделения данных от представления.


XML отделяет данные от представления

XML не содержит никакой информации о том, как должно быть отображено.

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

Из-за этого в XML существует полное разделение между данными и
презентация.


XML часто является дополнением к HTML

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


XML отделяет данные от HTML

При отображении данных в формате HTML вам не нужно редактировать файл HTML при изменении данных.

При использовании XML данные могут храниться в отдельных файлах XML.

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

Книги.xml


<книжный магазин>

  <книга category="cooking">
   Каждый день<br /> Итальянский
    Джада Де Лаурентис
2005
    30. 00  

 
   Гарри<br /> Поттер
    Дж. К. Роулинг
2005
    29,99  

 
   XQuery<br /> Быстрый старт
    Джеймс Макговерн
Пер Ботнер
    Курт Кейгл
Джеймс Линн
    Вайдьянатан
Нагараджан

    2003 49,99  

 
   Изучение XML
Эрик Т. Рэй
    2003 39,95  

Вы узнаете намного больше об использовании XML и JavaScript в разделе DOM этого руководства.



Данные транзакций

В различных отраслях промышленности существуют тысячи форматов XML для описания повседневных транзакций данных:

  • Акции и акции
  • Финансовые операции
  • Медицинские данные
  • Математические данные
  • Научные измерения
  • Новостная информация
  • Погодные услуги

Пример: XML News

XMLNews — это спецификация для обмена новостями и другой информацией.

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

Пример документа XMLNews:

» ?>

<голова>
Землетрясение в Колумбии

<тело>
<заголовок>
143 человека погибли в результате землетрясения в Колумбии 90 035


Джаред Котлер, корреспондент Associated Press

<дата>
Богота, Колумбия
понедельник, 25 января 1999 г., 7:28 по восточноевропейскому времени



Пример: Служба погоды XML

Национальная служба погоды в формате XML от NOAA (Национальное управление океанических и атмосферных исследований):

0″ encoding=»UTF-8 » ?>

Национальная служба погоды NOAA
http://weather.gov/

<изображение>
http://weather.gov/images/xml_logo.gif
Национальная метеорологическая служба NOAAhttp://weather.gov

Нью-Йорк/Международный аэропорт имени Джона Ф. Кеннеди, штат Нью-Йорк
KJFK
< широта>40,66
-73,78
Пн, 11 февраля 2008 г. 06:51:00 -0500 EST

Несколько облаков
11
-12
36
Запад
280
18,4
29

1023,6
30,23
-11
-24
-7< /windchill_f>
-22
10. 00

http://weather.gov/weather/images/fcicons/
nfew.jpg< /icon_url_name>
http://weather.gov/disclaimer.html
http://weather.gov/disclaimer.html

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


ВЫБОР ЦВЕТА



Лучшие учебники
Учебник по HTML
Учебник по CSS
Учебник по JavaScript
Учебник How To
Учебник по SQL
Учебник по Python
Учебник по W3.CSS
Учебник по Bootstrap
Учебник по PHP
Учебник по Java
Учебник по C++
Учебник по jQuery

8 900 Справочник по HTML
Справочник по CSS
Справочник по JavaScript
Справочник по SQL
Справочник по Python
Справочник по W3.CSS
Справочник по Bootstrap
Справочник по PHP
Цвета HTML
Справочник по Java
Справочник по Angular
Справочник по jQuery

Лучшие примеры
Примеры HTML
Примеры CSS
Примеры JavaScript
Примеры инструкций
Примеры SQL
Примеры Python
Примеры W3. CSS
Примеры Bootstrap
Примеры PHP
Примеры Java
Примеры XML
Примеры jQuery

|

О

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

Copyright 1999-2022 Refsnes Data. Все права защищены.
W3Schools работает на основе W3.CSS.

Выучить xml за Y минут

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

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

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

Некоторые определения и введения

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

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

 



 

Содержимое

 

 
  
 

<элемент />

<ЭЛЕМЕНТ />






<родительский>
  Текст
  <пустой брат/>



<ребенок>
  Текст


Текст
 

XML-документ

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

 

<книжный магазин>
  
    Повседневный итальянский
    Джада Де Лаурентис
    <год>2005
    <цена>30,00
  
  
    Гарри Поттер
    Дж. К. Роулинг
    <год>2005
    <цена>290,99
  
  <категория книги="ВЕБ">
    Изучение XML
    Эрик Т.  Рэй
    <год>2003
    <цена>39,95
  

 

Корректность и проверка

XML-документ является правильно сформированным , если он синтаксически верен. Однако в документ можно добавить дополнительные ограничения, используя определения типа документа (DTD). Документ, элементы которого являются атрибутами, объявленными в DTD и который следует грамматике, указанной в этом DTD, называется 9.0255 действителен по отношению к этому DTD, в дополнение к правильному формату.

Внешнее объявление DTD:

 


<книжный магазин>
  
    Повседневный итальянский
    Джада Де Лаурентис
    <год>2005
    <цена>30,00
  

 

Файл DTD (Bookstore. dtd):

 








 

DTD может быть объявлен внутри самого файла XML:

 





]>
<книжный магазин>
  
    Повседневный итальянский
    <цена>30,00
  

 

Совместимость с DTD и определения схемы XML

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