Язык xml и html

Язык xml и html

История развития XML

На первых порах Интернет-технологии развивались достаточно хаотично. Для их упорядочения и стандартизации был организован консорциум W3C (www.w3.org), в задачи которого входит формирование политики развития и стандартизации технологий, а также политики формирования новой платформы WWW (Web2), в основе которой лежит язык XML и его окружение: группа моделей и стандартов, основанных на нем.

Вместе с исследованиями в области ИИ и представления знаний они формируют новую концепцию Web, называемую Семантический Веб (Semantic Web).

Язык XML (Extensible Markup Language, расширяемый язык разметки) был разработан рабочей группой XML Working Group консорциума W3C.

Язык XML — это метаязык (язык разметки), являющийся подмножеством стандарта SGML (Standard Generalized Markup Language Стандартного обобщенного языка разметки [ISO 8879]).

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

Сравнение языков HTML и XML

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

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

В отличие от XML, язык HTML — конкретный (не расширяемый) язык. Функциональность тегов разметки в нем фиксирована.

Для совместимости этих языков был разработан язык XHTML (extensible HTML, расширяемый HTML), являющийся результатом применения правил синтаксиса XML к стандарту HTML.

Последняя версия спецификации XML находиться по адресу http://www.w3c.org/TR/rec-xml.

Не заменяя HTML, XML в настоящее время используется в сочетании с ним, расширяя возможности Web-страниц для:

· виртуального представления документов любого типа;

  • сортировки, фильтрации, упорядочения, поиска и манипулирования информацией иными способами;
  • представления информации в структурированном виде.

Рис. 2.1

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

Цели и задачи XML

При разработке языка XML ставились следующие задачи:

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

XML был разработан главным образом для хранения и распространения информации в Web

2. XML должен иметь широкий круг применения.

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

3. XML должен быть совместим с SGML.

XML является специализированной ветвью SGML. Преимущество здесь заключается в простоте адаптации программных средств SGML для работы с HTML.

4. Обработчики документов XML должны быть просты в написании.

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

5. Количество необязательных свойств в XML должно быть сведено к минимуму.

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

6. XML документы должны быть удобны для чтения и достаточно понятны.

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

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

7. Подготовка XML документа должна осуществляться быстро.

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

8. Процедура построения XML документа должна быть формальной и точной.

Спецификация XML написана на формальном языке, используемом для представления компьютерных языков, с нотацией, известной как расширенная форма Бэкуса-Наура (Extended Backus-Naur Form (EBNF)). Этот формальный язык, хотя и достаточно сложен для восприятия, лишен двусмысленности и существенно облегчает написание XML-документов, а в особенности программ для их обработки.

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

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

10. Краткость при разметке XML документа имеет минимальное значение.

В соответствии с пунктом 6 (XML-документ должен быть ясным и понятным для пользователя), XML-разметка не должна быть излишне сжатой, чтобы не вступать в противоречие с указанной целью.

XML ( /ˌeks em ˈel/ англ. eXtensible Markup Language ) — расширяемый язык разметки. Рекомендован Консорциумом Всемирной паутины (W3C). Спецификация XML описывает XML-документы и частично описывает поведение XML-процессоров (программ, читающих XML-документы и обеспечивающих доступ к их содержимому). XML разрабатывался как язык с простым формальным синтаксисом, удобный для создания и обработки документов программами и одновременно удобный для чтения и создания документов человеком, с подчёркиванием нацеленности на использование в Интернете. Язык называется расширяемым, поскольку он не фиксирует разметку, используемую в документах: разработчик волен создать разметку в соответствии с потребностями к конкретной области, будучи ограниченным лишь синтаксическими правилами языка. Расширение XML — это конкретная грамматика, созданная на базе XML и представленная словарём тегов и их атрибутов, а также набором правил, определяющих какие атрибуты и элементы могут входить в состав других элементов. Сочетание простого формального синтаксиса, удобства для человека, расширяемости, а также базирование на кодировках Юникод для представления содержания документов привело к широкому использованию как собственно XML, так и множества производных специализированных языков на базе XML в самых разнообразных программных средствах.

Читайте также:  Я хочу чтобы ты приехал хорошо расскажи

XML является подмножеством SGML.

Содержание

Язык XML [ править | править код ]

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

Нормативным считается английский вариант документа, поэтому основные термины приводятся с их английскими оригиналами.

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

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

Физическая и логическая структуры документа [ править | править код ]

С физической точки зрения документ состоит из сущностей (англ. entities ), из которых каждая может отсылать на другую сущность. Единственный корневой элемент — документная сущность. Содержание сущностей — символы.

С логической точки зрения документ состоит из комментариев (англ. comments ), объявлений (англ. declarations ), элементов (англ. elements ), ссылок на сущности (англ. character references ) и инструкций обработки (англ. processing instructions ). Всё это в документе структуризуется разметкой (англ. markup ).

Физическая структура [ править | править код ]

Сущность — мельчайшая часть в документе. Все сущности что-нибудь содержат, и у всех них есть имя (существуют исключения, напр. документная сущность). Проще говоря, термин «сущность» описывает «сущую вещь», «что-то» [6] .

Документ состоит из сущностей, содержание которых — символы. Все они разделены на два типа: символьные данные (англ. character data ) и разметки. К разметке принадлежат: теги (англ. tags ), обозначающие границы элементов, объявления и инструкции обработки, включая их атрибуты (англ. attributes ), ссылки на сущности, комментарии, а также последовательности символов, обрамляющие секции «CDATA». Часть документа, не принадлежащая разметке, составляет символьные данные документа.

Логическая структура [ править | править код ]

Все составляющие части документа обобщаются в пролог и корневой элемент. Корневой элемент — обязательная часть документа, составляющая всю его суть (пролог, вообще говоря, может отсутствовать). Может включать (а может не включать) вложенные в него элементы и символьные данные, а также комментарии. Вложенные в корневой элемент элементы, в свою очередь, могут включать вложенные в них элементы, символьные данные и комментарии, и так далее. Пролог может включать объявления, инструкции обработки, комментарии. Его следует начинать с объявления XML, хотя в определённой ситуации допускается отсутствие этого объявления.

Элементы документа должны быть правильно вложены: любой элемент, начинающийся внутри другого элемента (то есть любой элемент документа, кроме корневого), должен заканчиваться внутри элемента, в котором он начался. Символьные данные могут встречаться внутри элементов как непосредственно так и в специальных секциях «CDATA». Объявления, инструкции обработки и элементы могут иметь связанные с ними атрибуты. Атрибуты используются для связывания с логической единицей текста пар имя-значение.

Символы разметки [ править | править код ]

Разметка всегда начинается символом и заканчивается символом > . Наряду с символами и > , специальную роль для разметки играет также символ & . Угловые скобки обозначают границы элементов, инструкций обработки и некоторых других последовательностей. Амперсанд позволяет выполнить замену текста при помощи сущностей (англ. entities ) [6] [7] .

Решение проблемы неоднозначности разметки [ править | править код ]

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

> & &

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

Правило замены символов, используемых в разметке, на ими обозначаемые сущности не распространяется на символьные данные в секциях «CDATA», зато выполняется во всех остальных местах документа.

Числовые ссылки на символы [ править | править код ]

Числовые ссылки на символы указывают кодовую позицию символа в наборе символов документа. Числовые ссылки на символы могут принимать две формы [8] :

  1. синтаксис «&#D;», где D — десятичное число;
  2. cинтаксис «&#xH;» или «&#XH;», где H — шестнадцатеричное число (шестнадцатеричные числа в числовых символьных ссылках не чувствительны к регистру).

Примеры числовых ссылок на символы:

  • å — (в десятичной форме) представляет букву «а» с маленьким кружком над ней (используется, например, в норвежском языке);
  • å — (в шестнадцатеричном) представляет собой тот же символ;
  • å — (в шестнадцатеричном) также представляет тот же символ;
  • И — (в десятичной форме) представляет заглавную букву кириллицы «I»;
  • — (в шестнадцатеричном) представляет китайский символ для воды;

Имена [ править | править код ]

В языке XML все имена должны начинаться с буквы, символа подчёркивания (_) или двоеточия (:) и продолжаться только допустимыми для имён символами, а именно они могут содержать только буквы, входящие в секцию букв кодировки Unicode, арабские цифры, дефисы, знаки подчёркивания, точки и двоеточия. Однако имена не могут начинаться со строки xml в любом регистре. Имена, начинающиеся с этих символов, зарезервированы для использования консорциумом W3C. Нужно помнить, что так как буквы не ограничены исключительно символами ASCII, то в именах можно использовать слова из родного языка.

Читайте также:  Краска для вагонки леруа мерлен

Пролог [ править | править код ]

Объявление XML [ править | править код ]

Объявление XML указывает версию языка, на которой написан документ. Поскольку интерпретация содержимого документа зависит от версии языка, то Спецификация предписывает начинать документ с объявления XML. В первой (1.0) версии языка использование объявления не было обязательным, в последующих версиях оно обязательно. Таким образом, версия языка определяется из объявления, и если объявление отсутствует, то принимается версия 1.0.

Кроме версии XML,объявление может также содержать информацию о кодировке документа и «оставаться ли документу со своим собственным DTD, или с подключённым».

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

если XML-документ ссылается на другие DTD-файлы, которые описывают, что документ может содержать, вы должны указать standalone="no"

если XML-документ не ссылается на другие файлы и будет пользоваться своим DTD, вы должны указать standalone="yes"

Объявление типа документа [ править | править код ]

Для объявления типа документа существует специальная инструкция !DOCTYPE . Она позволяет задать при помощи языка DTD, какие в документ входят элементы, каковы их атрибуты, какие сущности могут использоваться и кое-что ещё.

Например, вот корректный документ:

В нём есть корневой элемент Hello, world! , и с логической точки зрения документ существует. Однако он недействителен (англ. not valid ) [9] .

При помощи Объявления типа документа (DTD) возможно описывать его содержание и логическую структуру, а также связывать с определённым элементом пару «имя — значение». Вот как выглядит пролог в записи Бэкуса — Наура [10] :

После XML-объявления могут следовать комментарии, инструкции обработки или же пустые пространства [11] , но затем идёт Объявления типа документа, где «Name» — имя корневого тега, «ExternalID» — внешний идентификатор, а «intSubset» — объявление разметки или же ссылка на сущность. Как гласит спецификация, если внешний идентификатор объявляется вместе с внутренним объявлением, то последнее идёт перед первым [12] .

Здесь « SYSTEM "hello.dtd" » — внешний идентификатор: адрес «hello.dtd» позволяет задействовать данные в документе «hello.dtd» как объявления разметки.

Здесь же разметка была объявлена местно.

Инструкция обработки [ править | править код ]

Инструкции обработки (англ. processing instruction, PI ), позволяют размещать в документе инструкции для приложений. В следующем примере показана инструкция обработки, передающая xml-stylesheet-приложению (например, браузеру) инструкции в файле my-style.css посредством атрибута href:

Комментарий [ править | править код ]

Комментарии (англ. comment ) не относятся к символьным данным документа. Комментарий начинается последовательностью « », внутри не может встречаться комбинация символов «—». Символ & не используется внутри комментария в качестве разметки.

Корневой элемент [ править | править код ]

Элемент и его разметка [ править | править код ]

Элемент (англ. element ) является понятием логической структуры документа. Каждый документ содержит один или несколько элементов. Границы элементов представлены начальным и конечным тегами. Имя элемента в начальном и конечном тегах элемента должно совпадать. Элемент может быть также представлен тегом пустого, то есть не включающего в себя другие элементы и символьные данные, элемента.

Тег (англ. tag ) — конструкция разметки, которая содержит имя элемента.

Тег пустого элемента:

В элементе атрибуты могут использоваться только в начальном теге и теге пустого элемента.

Пример кулинарного рецепта, размеченного с помощью XML:

Секция CDATA [ править | править код ]

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

Корректный документ [ править | править код ]

Корректный (англ. well-formed ) документ соответствует всем общим правилам синтаксиса XML, применимым к любому XML-документу: правильная структура документа, совпадение имен в начальном и конечном теге элемента и т. п. Документ, который неправильно построен, не может считаться документом XML.

Пространства имён [ править | править код ]

Пример документа [ править | править код ]

Регламентация работы с документами: правила, языки, программные интерфейсы [ править | править код ]

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

Кодировка документов [ править | править код ]

Спецификация требует, чтобы обрабатывающие программы поддерживали по крайней мере две кодировки Юникод: UTF-8 и UTF-16.

XML-процессор и приложение [ править | править код ]

Спецификация XML определяет понятия XML-процессор и приложение. XML-процессор (парсер) — программа, анализирующая разметку и передающая информацию о структуре документа другой программе — приложению.

Спецификация XML налагает определённые требования на процессор, не касаясь требований к приложению.

Действительный документ. Проверяющие и непроверяющие процессоры [ править | править код ]

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

XML-процессоры делятся на два класса: проверяющие и непроверяющие.

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

Непроверяющие процессоры не проверяют действительность документа, но обязанности по предварительной обработке документа, упомянутые выше, остаются за ними.

Описание типов: языки схем [ править | править код ]

Для описания типов документов используются языки схем (англ. schema language ). Поскольку XML является подмножеством языка SGML, то он унаследовал разработанный для SGML язык Document Type Definition (DTD). Позднее были разработаны и другие языки схем, наиболее известны из которых XML Schema, RELAX NG.

Преобразование документа XML [ править | править код ]

Для решения задачи преобразования документа XML в другую схему или другой формат предназначен язык XSLT.

Читайте также:  Смарт часы и гарнитура одновременно

Формат для визуализации документа [ править | править код ]

Для форматированного документа (документа, подготовленного к визуализации) предназначен формат XSL-FO.

Языки запросов [ править | править код ]

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

XQuery — язык программирования, ориентированный на работу с документами.

Чтение XML: три варианта API [ править | править код ]

Для чтения XML есть три варианта API [13] .

Событийный API (event-driven API, push-style API) — XML-процессор читает XML; при определённом событии (появлении открывающего или закрывающего тега, текстовой строки, атрибута) вызывается callback-функция.

  • + Расходует мало памяти [13] .
  • + При обработке огромного XML есть стандартная точка, позволяющая мгновенно остановить обработчик [13] .
  • − Крайне сложен для прикладного программиста: приходится держать в памяти информацию, в каком месте документа мы находимся.
  • + Библиотека проста в программировании.
  • − Затруднена поддержка перекрёстных ссылок: надо организовать временное хранение строковых ссылок, а когда документ будет считан — преобразовать идентификаторы в указатели.
  • − При ошибке в XML в памяти остаётся полусозданная структура предметной отрасли; программист должен своими руками корректно уничтожить её.
  • − API только для чтения, для записи потребуется другой API.
  • ± Естественный выбор, когда из огромного XML надо извлечь немного данных [13] .
  • ± Естественный выбор, когда XML надо преобразовать в структуру предметной отрасли [13] .
  • Примеры библиотек: SAX, Expat

Потоковый API (также pull-style API) — устроен на манер потоков ввода-вывода.

  • + Расходует мало памяти.
  • ± Информация, в каком месте документа мы находимся, неявно задаётся местом в потоке выполнения. Это серьёзно упрощает работу прикладного программиста. На продуманных API объём кода приближается к таковому для DOM.
  • − Библиотека сложна в программировании.
  • − Сложно сделать, чтобы «почти верные» XML с перепутанным порядком тегов работали правильно.
  • − Затруднена поддержка перекрёстных ссылок.
  • − При ошибке в XML в памяти остаётся полусозданная структура предметной отрасли; программист должен своими руками корректно уничтожить её.
  • − API только для чтения, для записи потребуется другой API.
  • Примеры библиотек: StAX

Объектный API (Document Object Model, DOM, «объектная модель документа») — считывает XML и воссоздаёт его в памяти в виде объектной структуры.

  • − Расходует много памяти — намного больше, чем сам XML занимает на диске. На pugixml расход памяти втрое и более превышает длину XML.
  • + Прост для прикладного программиста.
  • + Библиотека проста в программировании.
  • + Зачастую удаётся распознать «почти верные» XML с перепутанным порядком тегов.
  • + Позволяет произвольный доступ к XML [13] . Это, например, упрощает работу с перекрёстными ссылками.
  • + При ошибке в XML в памяти остаётся полусозданная структура XML, которая будет автоматически уничтожена самой библиотекой.
  • + Общий API для чтения и записи.
  • ± Естественный выбор, когда объектом предметной области является сам XML: например, в веб-браузере[13] , XML-редакторе, в импортёре к программе-локализатору, который извлекает строки из XML произвольной структуры.
  • ± Естественный выбор, когда нужно загрузить XML, слегка переработать и сохранить [13] . Те части, которые трогать не нужно, не требуют никакого кода.
  • Примеры библиотек: JDOM, TinyXML, pugixml

Бывают и гибридные API: внешние и маловажные части читаются потоковым методом, а внутренние и важные — объектным.

Многие считают, что html — это подмножество xml. И, соответственно, пишут код в том же стиле. Но это не так, между этими разметками есть различия. Есть некоторые правила xml, которые неприменимы в html.

Я рассмотрю три основные ошибки тех, кто пытается писать html в стиле xml.

1. Самозакрывающиеся теги

Первая и самая распространенная ошибка. Я много раз видел, как кто-то пытается закрыть html тег с
помощью /> Например, или
.
Но даже если элемент не имеет содержимого, все равно так писать нельзя. Потому как в отличие от xml
в html закрывать теги с помощью /> запрещено. Тег можно закрывать только явно, с помощью . Это не просто хороший стиль. Браузер воспринимает символ "/" внутри элемента как ошибку и игнорирует его. Элемент просто не закрывается.

Давайте посмотрим, как браузер обрабатывает такие теги. Выполним следующий html:

Все вроде бы нормально, но выглядеть это будет так:

Как видно, браузер не закрыл элемент, завершающийся />. Его нужно было закрывать при помощи явного

И кстати, даже серьезные компании, бывает, пишут неправильно.

2. Закрытие тегов

Хорошо, теги нужно явно закрывать. Значит, нужно всегда писать ? Нет. Не все так просто. Согласно спецификации в html некоторые теги нужно обязательно закрывать, некоторые необязательно, а некоторые запрещено.

Приведу примеры:

  • Обязательно нужно закрывать div, span, script, table и footer;
  • Такие теги, как option, li, tr, body можно закрывать, а можно и нет. С точки зрения качества кода, конечно, лучше всегда закрывать теги, но стандарт разрешает не делать этого;
  • А вот некоторые теги, такие как input, br, img и hr закрывать запрещено. Если написать или
    — то это будет невалидный html. Такие теги нужно оставлять незакрытыми.

Конечно, эти примеры не полные. По каждому отдельному тегу смотрите документацию.

3. Запись булевых атрибутов

Как записывать булевы атрибуты в html (такие как checked и disabled)? Те, кто пишет html в стиле xml, случается, записывают их так:
Так делать не нужно. В html нет значения «true». Стандарт говорит, что если атрибут заявлен в разметке, то его значение уже true.

Можно выбрать один из трех вариантов записи:

Я предпочитаю использовать короткий третий вариант, вроде: .

Ссылка на основную публикацию
Adblock detector