Как используется XML

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

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

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

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

Благодаря этому с XML мы получаем полное отделение данных от их представления.

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

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

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

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

При этом, если нужно отобразить только данные не меняя внешнего вида документа, то не имеет смысла редактировать сам файл HTML.

С XML данные можно хранить в отдельных файлах XML. При этом вы сосредотачиваетесь на использовании HTML/CSS для отображения и шаблонизации и можете быть уверены, что поступающие новые данные не потребуют каких-либо изменений в коде HTML документа. А при помощи всего нескольких строк JavaScript вы можете прочитать XML файл и изменить данные на любой HTML странице.

Books.xml

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book category="cooking">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
  <book category="children">
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book category="web">
    <title lang="en">XQuery Kick Start</title>
    <author>James McGovern</author>
    <author>Per Bothner</author>
    <author>Kurt Cagle</author>
    <author>James Linn</author>
    <author>Vaidyanathan Nagarajan</author>
    <year>2003</year>
    <price>49.
99</price> </book> <book category="web" cover="paperback"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore>

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

XML упрощает распределение данных

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

XML данные хранятся в простом текстовом формате. Это обеспечивает программную и аппаратную независимость.

Это позволяет легко создавать данные, которые могут использоваться самыми разными приложениями.

XML упрощает передачу данных

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

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

XML упрощает модификацию платформы

Переход на новые системы (аппаратные или программные платформы) всегда занимает много времени. Множество данных необходимо конвертировать в новые форматы. При этом часто несовместимые данные теряются.

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

XML делает ваши данные более доступными

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

Благодаря XML ваши данные становятся доступными для всех видов «машин чтения» (голосовых машин, новостных каналов и т.д.), что позволяет значительно проще обращаться к ним людям с ограничениями по зрению и другими физическими проблемами.

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

С использованием XML было создано множество языков программирования в Интернете.

Вот несколько примеров:

  • XHTML
  • WSDL для описания доступных веб-сервисов
  • WAP и WML как языки разметки для портативных устройств типа КПК
  • RSS языки для новостных каналов
  • RDF и OWL для описания ресурсов и онтологии
  • SMIL для описания мультимедиа для сети

Хранение данных, 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 руками.

PostgreSQL: Документация: 15: 8.13. Тип XML

8.13.1. Создание значений XML
8.13.2. Обработка кодировки
8. 13.3. Доступ к значениям XML

Тип данных xml может использоваться для хранения данных XML. Его преимущество перед хранением XML-данных в текстовом поле состоит в том, что он проверяет входные значения на правильность форматирования, и имеются вспомогательные функции для выполнения над ними безопасных для типов операций; см. раздел 9.15. Использование этого типа данных требует, чтобы установка была собрана с настроить --with-libxml .

Тип xml может хранить правильно сформированные «документы», как определено стандартом XML, а также фрагменты «содержимого», которые определяются ссылкой на более разрешающий «узел документа» данных XQuery и XPath. модель. Грубо говоря, это означает, что фрагменты контента могут иметь более одного элемента верхнего уровня или символьного узла. Выражение xmlvalue IS DOCUMENT можно использовать для оценки того, является ли конкретный 9Значение 0011 xml — это полный документ или только фрагмент содержимого.

Ограничения и примечания о совместимости для типа данных xml можно найти в разделе D.3.

8.13.1. Создание значений XML

Чтобы создать значение типа xml из символьных данных, используйте функцию xmlparse :

XMLPARSE ({ДОКУМЕНТ | СОДЕРЖАНИЕ}   значение  )
 

Примеры:

XMLPARSE (ДОКУМЕНТ 'Руководство...')
XMLPARSE (CONTENT 'abcbarfoo')
 

Хотя это единственный способ преобразования строк символов в значения XML в соответствии со стандартом SQL, синтаксис, специфичный для PostgreSQL:

xml 'бар'
'бар'::xml
 Также можно использовать 

.

Тип xml не проверяет входные значения на соответствие объявлению типа документа (DTD), даже если входное значение указывает DTD. В настоящее время также отсутствует встроенная поддержка проверки на соответствие другим языкам схем XML, таким как XML Schema.

Обратная операция, производящая значение строки символов из xml , использует функцию xmlserialize :

XMLSERIALIZE ({ДОКУМЕНТ | СОДЕРЖИМОЕ} ​​  значение   AS   тип  )
 

тип может быть символом , символом, изменяющимся , или текстом (или псевдонимом для одного из них). Опять же, согласно стандарту SQL, это единственный способ преобразования между типом xml и символьные типы, но PostgreSQL также позволяет просто преобразовать значение.

Когда значение строки символов приводится к типу xml или из него без прохождения через XMLPARSE или XMLSERIALIZE соответственно, выбор ДОКУМЕНТ по сравнению с СОДЕРЖАНИЕ определяется «параметром XML» параметр конфигурации сеанса , который можно установить стандартной командой:

УСТАНОВИТЬ ОПЦИЮ XML {ДОКУМЕНТ | СОДЕРЖАНИЕ };
 

или более похожий на PostgreSQL синтаксис

УСТАНОВИТЕ xmloption TO {ДОКУМЕНТ | СОДЕРЖАНИЕ };
 

По умолчанию CONTENT , поэтому разрешены все формы данных XML.

8.13.2. Обработка кодировки

Необходимо соблюдать осторожность при работе с несколькими кодировками символов на клиенте, сервере и в передаваемых через них XML-данных. При использовании текстового режима для передачи запросов на сервер и результатов запроса клиенту (что является обычным режимом) PostgreSQL преобразует все символьные данные, передаваемые между клиентом и сервером, и наоборот, в кодировку символов соответствующего конца; см. Раздел 24.3. Сюда входят строковые представления значений XML, например, в приведенных выше примерах. Обычно это означает, что объявления кодировки, содержащиеся в XML-данных, могут стать недействительными, поскольку символьные данные преобразуются в другие кодировки при перемещении между клиентом и сервером, поскольку встроенное объявление кодировки не изменяется. Чтобы справиться с таким поведением, объявления кодирования, содержащиеся в символьных строках, представляемых для ввода в xml тип игнорируется , и предполагается, что содержимое находится в текущей кодировке сервера. Следовательно, для корректной обработки строки символов XML-данных должны быть отправлены клиентом в текущей клиентской кодировке. Клиент несет ответственность либо за преобразование документов в текущую клиентскую кодировку перед их отправкой на сервер, либо за соответствующую настройку клиентской кодировки. На выходе значения типа xml не будут иметь объявления кодировки, и клиенты должны предполагать, что все данные находятся в текущей клиентской кодировке.

При использовании двоичного режима для передачи параметров запроса на сервер и возврата результатов запроса клиенту преобразование кодировки не выполняется, поэтому ситуация отличается. В этом случае будет соблюдаться объявление кодировки в XML-данных, и если оно отсутствует, данные будут считаться в UTF-8 (как того требует стандарт XML; обратите внимание, что PostgreSQL не поддерживает UTF-16). . На выходе данные будут иметь декларацию кодировки, определяющую кодировку клиента, если кодировка клиента не является UTF-8, и в этом случае она будет опущена.

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

Предупреждение

Некоторые функции, связанные с XML, могут вообще не работать с данными, отличными от ASCII, если сервер использует кодировку, отличную от UTF-8. Известно, что это проблема для xmltable() и 9.0011 xpath() в частности.

8.13.3. Доступ к значениям XML

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

Поскольку для типа данных xml нет операторов сравнения, невозможно создать индекс непосредственно для столбца этого типа. Если требуется быстрый поиск в данных XML, возможные обходные пути включают приведение выражения к типу строки символов и его индексирование или индексирование выражения XPath. Конечно, фактический запрос должен быть скорректирован для поиска по индексированному выражению.

Функцию текстового поиска в PostgreSQL также можно использовать для ускорения поиска XML-данных по всему документу. Однако необходимая поддержка предварительной обработки пока недоступна в дистрибутиве PostgreSQL.

K2 Concepts — Типы данных XML

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

XML-схемы делят определяемые пользователем типы данных на две широкие категории: простые и сложные:

  • SimpleTypes: элементы, атрибуты и значения, которые содержат только текст (т. е. без вложенности элементов и т. д.)
  • ComplexTypes: элементы, содержащие атрибуты или другие элементы

В этом разделе также рассматриваются:

  • Расширение определений данных и
  • Типы контента

Основные типы данных

 В следующей таблице перечислены все основные типы данных, поддерживаемые XML:

Встроенные типы данных XML
Тип Описание Тип Описание
струна Любой символ нормализованная строка Строка, нормализованная пробелами, в которой все пробелы, символы табуляции, возврата каретки и перевода строки преобразуются в одиночные пробелы
токен Строка, не содержащая последовательности из двух или более пробелов, символов табуляции, возврата каретки и перевода строки байт Числовое значение от -128 до 127
байт без знака Числовое значение от 0 до 255 hex64Binary Двоичная информация в кодировке Base 64
шестнадцатеричный двоичный Двоичная информация в шестнадцатеричном коде целое число Числовое значение, представляющее целое число
положительныйЦелое число Целое число, значение которого больше 0 отрицательное целое Целое число, значение которого меньше 0
nonNegativeInteger Целое число, значение которого равно 0 или больше 0 неположительное целое число Целое число, значение которого равно 0 или меньше 0
ряд Числовое значение от -2 147 483 648 до 2 147 483 647 Целое без знака Числовое значение от 0 до 4 294 967 295
длинный Числовое значение от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 unsignedLong Числовое значение от 0 до 18 446 744 073 709 551 615
короткий Числовое значение от -32 768 до 32 767 unsignedShort Числовое значение от 0 до 65 535
десятичный Числовое значение, которое может содержать или не содержать дробную часть поплавок Любое 32-битное действительное число с плавающей запятой
например 1Е4, 1267. 43233Е12, 12.78е-2, 12
двойной Любое 64-битное действительное число с плавающей запятой
например 1Е4, 1267.43233Е12, 12.78е-2, 12
Логический Логическое значение, включая True, False, 0 и 1
время Момент времени, который повторяется каждый день в формате ЧЧ:ММ:СС, например, 12:30:00, на этот раз ссылается на UTC (Всемирное скоординированное время) дата Значение даты в формате ГГГГ-ММ-ДД
ДатаВремя Комбинированное значение даты и времени в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС продолжительность Длина временного интервала в расширенном формате
например, P1Y1M1D1h2M1S = 1 год + 1 месяц + 1 день + 1 час + 1 минута + 1 секунда
гМесяц Месяц по григорианскому календарю, месяц (ММ), часть даты гГод Год по григорианскому календарю, год (ГГГГ) часть даты
г ГодМесяц Год и месяц по григорианскому календарю, год-месяц (ГГГГ-ММ) часть даты гДень Григорианский день, день (ДД) часть даты
гМесяцДень Конкретный день месяца, часть дня месяца (ММ-ДД) даты Имя Строка, основанная на правильно сформированных элементах и ​​правилах именования атрибутов
QName Полное имя пространства имен XML, например. если пространство имен определено как
xmlns:html="http://www.w3.org/1999/xhtml" , полное имя для разрешается в {http://www.w3 .org/1999/xhtml} стр.
NCName Часть имени пространства имен справа от префикса пространства имен и двоеточия, например. если пространство имен определено как xmlns:html="http://www.w3.org/1999/xhtml" NCName будет html="http://www.w3.org/1999/xhtml"
любой URI Представляет URI (универсальный идентификатор ресурса) и может содержать URL или URN язык Языковая константа, определенная в RFC 1766, например. en-us (RFC 1766, коды языков ISO 639) (по состоянию на сентябрь 2005 г.)

Simple Types

Объявление simpleType имеет следующий формат:

Копия


Содержание:(аннотация?, (ограничение|список|объединение))


Содержание:(аннотация?, (simpleType?,(minExclusive|minInclusive|maxExclusive|maxInclusive|totalDigits|fractionDigits|length|minLength|maxLength
|enumeration|whiteSpace|шаблон)))


Содержание:(аннотация?, (simpleType?))


Содержание:(аннотация?, (simpleType))

 Дополнительную информацию о дополнительных параметрах см. на странице www.xml.dvint.com/docs/SchemaDataTypesQR-1.pdf (по состоянию на сентябрь 2005 г.)

 Несмотря на то, что формат объявления simpleType кажется очень запутанным, они имеют простую структуру:

  • Открывающий тег элемента simpleType содержит три атрибута
  1. id — предоставляет уникальный идентификатор элементу
  2. .
  3. final — ограничивает получение новых типов данных из этого simpleType:
  • #все — нет ограничений на один тип
  • ограничение — только часть определенного типа данных
  • список — ограниченная последовательность значений
  • объединение — комбинация одного или нескольких типов данных
  1. имя  — — имя типа данных, который определяет этот элемент
  • Сам тип данных определяется путем объединения основных встроенных типов данных с использованием ограничения, списка и объединения (которые имеют ту же функцию, что и выше)
  • Ограничивающие факторы, которые могут применяться в ограничении:
Ограничивающие факторы в XML
Тип Описание
длина Количество символов или для списков количество вариантов списка
минДлина Минимальное количество символов или минимальное количество вариантов списка для списков
максимальная длина Максимальное количество символов или максимальное количество вариантов списка для списков
узор Определяет шаблон или последовательность допустимых символов
перечисление Ограничивает допустимые значения набором указанных значений
пробел Устанавливает, как обрабатываются символы перевода строки, табуляции, пробелы и возврат каретки при анализе документа
макс. включительно Максимальное значение, включая указанное число
мин включительно Минимальное значение, включая указанное число
максЭксклюзив Максимальное значение без указанного числа
минЭксклюзив Минимальное значение без указанного числа
всего цифр Количество цифр, допустимое для недесятичной части десятичного числа (должно быть положительным числом)
дробьЦифры Количество цифр, допустимое для недесятичной части десятичного числа (должно быть неотрицательным числом)
  • Перечислены основные элементы данных, из которых определяется тип simpleType

Структуру лучше всего понять на примере:

Копия

0″ кодировка=»UTF-8″>

  


  




Сложные типы

Возможность определять сложные типы данных в XML — одна из его самых мощных функций.

Объявление элемента сложного типа используется для описания сбора и выбора данных.

Определение сложного типа проще всего понять как набор переменных данных — элементов — и модель контента (которая представляет собой комбинированную конструкцию).

Копия

  

    




  

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

  • Последовательность : требует, чтобы все элементы отображались в точном порядке, указанном
  • Группа : ссылки на глобальную предопределенную или общую группу элементов (дополнительную информацию см. в XML-схеме)
  • .
  • Выбор : только один из элементов может появиться в документе
  • Все : должны появиться все элементы, но порядок не имеет значения
.
Количество значений каждого элемента задается с помощью переменных minOccurs и maxOccurs — это может быть любое неотрицательное целое число. Аналогичным образом указание minOccurs="0" определяет элемент как необязательный. Ограничения возникновения  более подробно обсуждаются в XML-схеме

Атрибуты определяются как обычно, с дополнительными Ограничениями использования , если атрибут обязательный или необязательный

Элементы simpleType и complexType могут быть ограничены с помощью ограничения данных

Расширение определений данных

Все определения данных в XML могут быть расширены. Следующий пример расширяет приведенное выше определение contactDetails.

Копия

  

    

      

    

Контекст элемента — типы содержимого

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