Синтаксис языка XML Синтаксис и основные понятия языка XML, создание валидных документов Понятие о языке XML XML - это расширяемый язык разметки Extensible Markup Languageразработанный специально для размещения информации в World Wide Web, наряду с HTML, который давно стал стандартным языком создания Web-страниц. В отличие от HTML, вместо использования ограниченного набора определённых элементов вы имеете возможность создавать ваши собственные элементы и присваивать им любые имена по вашему выбору. Примечание: подразумевается, что читатель данной статьи хотя бы очень поверхностно знаком с языком HTML. XML решает ряд проблем, которые не решает HTML, например: Представление документов любого не только текстового типа, например, музыки, математических уравнений и т. Сортировка, фильтрация и поиск информации. Представление информации в структурированном иерархическом виде. В зависимости от уровня соответствия стандартам документ может быть "верно сформированным" "well-formed"либо "валидным" "valid". Вот несколько основных правил создания верно сформированного документа: Каждый элемент XML должен содержать начальный и конечный тэг либо пустой тэг типакоторый может нести информацию посредством своих атрибутов. Любой вложенный элемент должен быть полностью определён внутри элемента, в состав которого он входит. Документ должен иметь только один элемент верхнего уровня. Имена элементов чувствительны к регистру. Есть три основных способа сообщить браузеру, как отображать каждый из созданных вами XML-элементов: Каскадная таблица стилей Cascading Style Sheet - CSS или расширяемая таблица в формате языка стилевых таблиц Extensible Stylesheet Language - XSL. Этот метод требует создания HTML-страницы, связывания с ней XML-документа и установления взаимодействий HTML-элементов с элементами XML. В дальнейшем HTML-элементы автоматически отображают информацию из связанных с ними XML-элементов. Этот метод требует создания HTML-страницы, связывания с ней XML-документа и получение доступа к XML-элементам с помощью кода сценария JavaScript или VBScript. Индивидуальный пользователь, компания или комитет по стандартам может определить необходимый набор элементов XML и структуру документа, которые будут применяться для особого класса документов. Подобный набор элементов и описание структуры документа называют XML-приложением или XML-словарём. XML-приложение обычно определяется созданием описателя типа документа DTDкоторый является допустимым компонентом XML-документа. DTD устанавливает и определяет имена элементов, которые могут быть использованы в документе, порядок, в котором элементы могут появляться, и доступные к применению атрибуты элементов. DTD обычно включается в XML-документ и ограничивает круг элементов и структур, которые будут использоваться. Примечание: приложение XML Schema позволяет разрабатывать подробные схемы для ваших XML-документов с использованием стандартного синтаксиса XML и является альтернативой DTD. Простейший XML-документ Простейший XML-документ состоит из двух частей: пролога и корневого элемента. Пролог содержит объявление XML, указывающее на то, что это XML-документ, и содержит номер версии XML. Пролог может также содержать необязательные компоненты: Объявление типа документа. Одну или несколько инструкций по обработке. Комментарий может содержать любой текст, за исключением символов "-". Тексты комментариев доступны для написанного внутри HTML-страницы кода сценария. XML-документ можно набрать в любом текстовом редакторе, сохранив документ как текстовый файл с расширением. В дальнейшем такой документ будет открываться двойным щелчком в Internet Explorer. Вот пример простейшего XML-документа: Product 1 10. Наберите таблицу стилей в любом текстовом редакторе, сохранив документ как текстовый файл с расширением. Задание атрибутов элементов В начальный тэг элемента либо в тэг пустого элемента вы можете включить одно или несколько описаний атрибутов. Доступ к атрибутам их значениям даёт отображение XML-документа с использованием XSL-таблицы, связывания данных или сценария см. Инструкции по обработке Инструкция по обработке имеет следующую форму записи: Здесь "кому" есть имя приложения, которому адресована инструкция, а "инструкция" - есть информация, передаваемая приложению. Инструкция может состоять из любой последовательности символов, кроме пары? Если вы используете в качестве XML-процессора Internet Explorer, у вас есть две возможности применения инструкций по обработке: Стандартные инструкции для сообщения браузеру, как отображать документ с использованием таблицы стилей, например: Если вы пишете Web-сценарий для отображения XML-документа, вы можете поместить в документ любые незарезервированные инструкции по обработке, а ваш сценарий будет считывать эти инструкции. Например, вы можете вставить в документ инструкцию по обработке, сообщающую вашему сценарию уровень детализации при отображении: Вы можете поместить инструкцию по обработке в любое место XML-документа вне других элементов разметки: в пролог документа, после корневого элемента, либо внутри содержимого элемента:. В этом случае проще поместить текст, содержащий такие символы, в раздел CDATA. Раздел CDATA начинается с символов. В разделе CDATA не нужно использовать ссылки на символы или предопределённые общие примитивы, т. Разделы CDATA не могут быть вложенными. Вы можете поместить раздел CDATA в любое место, занимаемое символьными данными - т. Разделы CDATA отображаются браузером как содержимое элемента. Создание валидных XML-документов Валидным valid называется корректно сформированный well-formed документ, отвечающий двум дополнительным требованиям: Пролог документа должен содержать определение типа документа DTD - Document Type Definitionзадающее структуру документа. Оставшаяся часть документа должна отвечать структуре, заданной в DTD. Любое отклонение от требований корректности формирования well-formed считается фатальной ошибкой fatal error. Если XML-процессор сталкивается с фатальной ошибкой, он останавливает обработку документа и не пытается её возобновить. Отклонение от требований валидности valid считается лишь ошибкой error. Если XML-процессор сталкивается с ошибкой, он может просто выдать сообщение о ней и продолжить обработку. Процессор Internet Explorer проверяет документ на валидность только в том случае, если вы открываете документ через HTML Web-страницу. Большинство так называемых XML-приложений XML-словарей состоят из стандартного DTD, которое все пользователи приложения включают в свои XML-документы. Объявление типа документа DTD представляет собой блок разметки, который вы должны добавить в пролог XML-документа, имеет следующую форму записи: Здесь "Имя" указывает на имя корневого элемента. Объявления списков атрибутов, которые могут быть использованы с определёнными типами элементов, типы данных атрибутов и значения атрибутов по умолчанию. Объявления примитивов для хранения часто используемых фрагментов текста или для встраивания не относящихся к XML данных в ваш документ. Объявления нотаций, которые описывают форматы данных или идентифицируют программу, используемую для обработки определённого формата. Ссылки на параметрические примитивы. Любой из приведённых выше компонентов может содержаться внутри параметрического примитива и добавляться путём ссылки на параметрический примитив. Объявления типов элементов Объявление типа элемента имеет следующую форму: Здесь "Имя" есть имя объявляемого типа элемента. Указывает, что элемент не может иметь содержимого, например: После этого в документ можно поместить такие элементы: Любое содержимое ANY. Элемент может иметь или не иметь дочерние элементы в любом порядке с любым количеством вхождений, иметь или не иметь чередующиеся символьные данные. Пример: Содержимое дочернее содержимое элемента. Элемент может содержать дочерние элементы, но не может непосредственно содержать символьные данные. Элемент может содержать любое количество смешанных данных, в том числе и чередующихся с дочерними элементами определённых типов. В третьем случае когда "Опись содержимого" представляет из себя "дочернее содержимое элемента" модель содержимого может иметь одну из следующих форм: Последовательная форма. Например, элемент PRODUCT должен иметь один дочерний элемент TITLE, после которого идёт один дочерний элемент PRICE, за которым следует один дочерний элемент MASS: Выборочная форма. Например, элемент PRODUCT должен иметь один дочерний элемент TITLE, или один дочерний элемент PRICE, или один дочерний элемент MASS: Вы можете изменить любую из этих форм модели содержимого, используя знаки:? Ни одного или один из предшествующих элементов. Например, следующее объявление означает, что вы можете включить один или более дочерних элементов TITLE, и что дочерний элемент PRICE является необязательным: Следующее объявление означает, что вы можете включить несколько или ни одного дочерних элементов TITLE, либо один дочерний элемент PRICE, либо один дочерний элемент MASS: Следующее объявление означает, что вы можете включить один или несколько дочерних элементов любого из этих трёх типов в любом порядке: Следующее объявление означает, что каждый элемент PRODUCT должен иметь один дочерний элемент TITLE; за ним должен следовать один дочерний элемент PRICE; после него должен идти один дочерний элемент MASS, NET или GROSS: В четвёртом случае когда "Опись содержимого" представляет из себя "смешанное содержимое" элемент может включать символьные данные. При смешанном содержимом вы можете задавать типы дочерних элементов, но не можете задавать порядок и количество вхождений дочерних элементов. Модель смешанного содержимого может иметь одну из следующих форм: Только символьные данные синтаксически анализируемые символьные данные, Parsed Character Data : Cимвольные данные с необязательными дочерними элементами. Например, следующее объявление означает, что каждый элемент PRODUCT может содержать символьные данные плюс ни одного или несколько дочерних элементов TITLE: Объявления атрибутов Объявление списка атрибутов определяет имена атрибутов, устанавливает тип для каждого атрибута и задаёт востребованность для каждого атрибута, в частности, может задавать значение атрибута по умолчанию. Объявление списка атрибутов имеет следующую форму записи: Здесь "Имя" - имя элемента, для которого задаются атрибуты. Определение атрибута имеет следующую форму записи: Имя ОпрАтр ОбъявУмолч Здесь "Имя" - имя атрибута. ОпрАтр представляет собой тип атрибута. ОбъявУмолч - это объявление значения по умолчанию, которое указывает на востребованность атрибута и содержит некоторую дополнительную информацию. Пример объявления: Вышеприведённое объявление означает, что вы можете присвоить атрибуту Retail любую строку в кавычках ключевое слово CDATA ; если этот атрибут опущен, ему будет присвоено значение по умолчанию "retail". Вы можете присвоить атрибуту Title любую строку в кавычках; этот атрибут должен быть обязательно задан для каждого элемента PRODUCT ключевое слово REQUIRED и не имеет значения по умолчанию. Объявления атрибутов просто включаются в DTD наряду с объявлениями типов элементов, например:. Вы можете задавать тип атрибута тремя различными способами: Строковый тип ключевое слово CDATA, что означает символьные данные, Character Data. Вот список ключевых слов, которые вы можете использовать в определении маркерных типов атрибутов: ID Для каждого элемента атрибут должен иметь уникальное значение. Элемент может иметь только один атрибут типа ID. В объявлении значения по умолчанию такого атрибута должно фигурировать REQUIRED или IMPLIED. IDREF Значение такого атрибута является ссылкой на атрибут типа ID другого элемента. IDREFS Этот тип атрибута похож на IDREF, но его значение может включать ссылки на несколько идентификаторов - разделённых пробелами - внутри строки в кавычках. ENTITY Значение атрибута должно совпадать с именем примитива, объявленного в DTD. Такой примитив ссылается на внешний файл, обычно содержащий не XML-данные. Таким способом, например, определяют путь к файлу, содержащему графические данные рисунок. ENTITIES Этот тип атрибута похож на ENTITY, но его значение может включать ссылки на несколько идентификаторов, разделённых пробелами - внутри строки в кавычках. Таким способом, например, определяют пути к файлам, содержащим графические данные рисунки в альтернативных форматах. NMTOKENS Этот тип атрибута похож на NMTOKEN, но его значение может включать несколько элементарных имён, разделённых пробелами - внутри строки в кавычках. Два способа, которые вы можете использовать в определении нумерованных типов атрибутов: Если вы хотите ограничить значение атрибута "Mass" словами "net" и "gross", вы можете написать следующее: Нумерованный тип можно определить с помощью ключевого слова NOTATION. Каждая из указанных нотаций должна точно соответствовать имени нотации, объявленному в DTD. Нотация описывает формат данных или идентифицирует программу, применяемую для обработки определённого формата данных: Объявление значения атрибута по умолчанию может иметь четыре формы: REQUIRED Вы должны задать значение атрибута для каждого элемента. IMPLIED Вы можете опустить атрибут, но никакое значение по умолчанию назначено не. AttValue Собственно значение по умолчанию. Вы можете опустить атрибут, и ему будет назначено это значение по умолчанию. FIXED AttValue Вы можете опустить атрибут, и ему будет назначено это значение по умолчанию AttValue. Если вы не опускаете атрибут, вы обязаны назначить ему это значение по умолчанию. При таком объявлении указывать атрибут в элементе имеет смысл только для того, чтобы сделать документ более понятным для восприятия. Использование внешних DTD Вы можете поместить все или часть объявлений DTD документа в отдельный файл, а затем ссылаться на этот файл из объявления типа документа. DTD, или часть DTD, содержащаяся в отдельном файле, называется внешним подмножеством DTD. Применение внешнего подмножества DTD имеет смысл для DTD, которые являются общими для группы документов. DOCTYPE PRODUCTS SYSTEM "Products. Например, содержимое файла "Products. Если одно и то же объявление встречается более одного раза, XML-процессор использует первое объявление игнорирует все последующие. Внутреннее подмножество DTD имеет приоритет перед внешним т. Такой способ объединения DTD даёт вам возможность адаптировать или субклассировать DTD для конкретного документа. Вы можете заставить XML-процессор игнорировать часть внешнего DTD с помощью раздела IGNORE. Примечание: разделы IGNORE и INCLUDE можно использовать только во внешнем DTD. Внешнее подмножество DTD файл. Внешний файл, определённый как внешний примитив в DTD и допускающий использование посредством ссылки файл. Строка в кавычках, определённая как внутренний примитив в DTD и допускающая использование посредством ссылки не файл. Однако чаще термин "примитив" используется в узком смысле, а именно - в двух последних смыслах. Механизм примитивов может оказаться удобным для сокращения времени набора документа, а также может облегчить внесение изменений в документ. Кроме того, механизм примитивов необходим при включении не XML-данных в XML-документ. В принципе, механизм примитивов сходен с определением констант в различных языках программирования. Примитивы классифицируются по трём признакам: Общие и параметрические. Общий примитив включает текстовые или нетекстовые данные, которые вы можете использовать внутри корневого элемента. Параметрический примитив содержит XML-текст, который может быть помещён в DTD. Внутренний примитив содержится внутри строки в кавычках. Внешний примитив содержится в отдельном файле. Разбираемый примитив содержит XML-текст символьные данные, разметка или и то, и другое. Когда вы вставляете ссылку на разбираемый примитив в документ, ссылка замещается содержимым примитива. Синтаксический анализатор разбирает содержимое примитива точно так же, как он сканирует текст, непосредственно введённый в документ. Неразбираемый примитив может содержать как XML-данные, так и не XML-данные. Его содержимое нельзя непосредственно вставить в документ посредством ссылки. Реально в XML поддерживается пять типов примитивов: Общие внутренние разбираемые. Примитив создаётся путём объявления его в DTD документа. Использование общих примитивов и нотаций Объявление общего внутреннего разбираемого примитива имеет следующую форму записи: Здесь "Имя" есть имя примитива. Примитив может иметь такое же имя, что и другой параметрический примитив в документе, т. Примитив также может иметь такое же имя, что и элемент или атрибут. Содержимое строки должно быть корректным для места, в которое вы предполагаете вставить примитив. Вы можете вставить общий внешний разбираемый примитив только внутрь содержимого элемента. Объявление общего внешнего неразбираемого примитива имеет следующую форму записи: Здесь "Имя" есть имя примитива. Ключевое слово NDATA указывает, что файл примитива содержит неразбираемые данные они не обрабатываются синтаксическим анализатором. Файл неразбираемого внешнего примитива может содержать любой тип текста или нетекстовые данные. Фактически единственный способ использования этого типа примитива состоит в присвоении его имени атрибуту с типом ENTITY или ENTITIES. Процессор просто делает примитив и его нотацию доступными приложению, которое может выполнять необходимые действия с этой информацией например, он может запустить программу, ассоциированную с нотацией, и указать ей отобразить данные из файла примитива. Нотация описывает определённый формат данных. Это делается путём указания адреса описания формата, адреса программы, которая может обрабатывать данные в этом формате, либо указания просто описания формата. Вы можете использовать нотацию, чтобы описать формат общего внешнего неразбираемого примитива, либо можете присвоить нотацию атрибуту, который имеет нумерованный тип NOTATION. Нотация имеет следующую форму записи: Здесь "Имя" есть имя нотации. Например, вы можете включить в литерал одно из следующих описаний: URL программы, которая может обрабатывать или отображать нужный формат данных: URL документа, который описывает нужный формат данных: Простое описание формата: Использование параметрических примитивов Объявление параметрического внутреннего разбираемого примитива имеет следующую форму записи: Здесь "Имя" есть имя примитива. Примитив может иметь такое же имя, что и общий примитив в документе, т. Имя примитива также может совпадать с именем элемента или атрибута. Строка "Значение" должна содержать одно или несколько объявлений разметки, которые разрешено использовать в DTD. Файл параметрического внешнего разбираемого примитива должен содержать полные объявления разметки любых типов, допустимых в DTD. Вы можете использовать параметрические внешние разбираемые примитивы для хранения группы взаимосвязанных объявлений. Это позволит вам объединять эти группы объявлений различными способами. Параметрический внешний разбираемый примитив работает во многом аналогично внешнему подмножеству DTD, но обеспечивает большую гибкость - вы можете включать несколько файлов внешних объявлений, причём в любом порядке. Параметрический внутренний разбираемый %ИмяПримитива; В DTD, но не внутри объявлений разметки. Параметрический внешний разбираемый %ИмяПримитива; В DTD, но не внутри объявлений разметки. Для вставки ссылок на символы используется международная таблица символов ISO-IEC 10646, содержащая символы многих языков. Коды первых 128 символов совпадают с кодами набора ASCII.

Смотрите также: