XML - расширенный язык разметки (eXtensible Markup Language) Моисеевой О. Макушиной Д. Зачем нам это надо? Основой WWW является HTML – набор тэгов, который позволяет создавать разметку документа Недостатки HTML: даже самый большой список тэгов не в состоянии полностью удовлетворить запросы создателей документов силу того, что этот список ограничен HTML – документы ориентированы прежде всего на отображение, а не на автоматическую обработку. Из базы данных можно передать данные в HTML-документ. Обратная операция намного сложнее. Корни XML 1986 г. – организация ISO (International Organization for Standardization) принимает язык SGML (Standard Generalized Markup Language) в качестве официального стандарта SGML позволяет: описывать структурированные данные организовывать и представлять информацию, содержащуюся в документах создавать свои конструкции разметки Недостатки SGML: описание спецификации занимает более 500 страниц Следствие => создание языка XML, отличного от SGML и HTML Корни XML XML – подмножество SGML, расширенный язык разметки, пришедший на смену HTML XML позволяет: создавать свой язык для каждого типа документа или даже для каждого документа отдельно максимально легко интегрировать данные из различных приложений Недостатки XML: адекватное отображение содержимого XML-файлов различными браузерами достигается далеко не всегда Структура XML - документов В XML докумение можно выделить 2 основные части: 1. 2. Описания структуры документа DTD – блок (Document Type Definition) Непосредственно содержание документа В первой части мы можем использовать: • Инструкции XML – процессора • Объявление элементов структуры документа • Атрибуты для каждого элемента • Cущности DTD-блок может внедряться как в сам документ, так и находиться во внешнем файле. В XML – документе, как и в любой объектной иерархии существует некий корневой элемент, от которого наследуются все остальные. Содержимое XML – документа (2-ая часть) форматируется при помощи тэгов, которые определяются в описании типа документа. Наименования тэгов полностью совпадают с наименованием элементов Инструкция XML - процессора В качестве первой строки каждого XML – документа должна использоваться исполняемая инструкция, предназначенная для XML – процессора: <?xml version=“1.0”?> xml – ключевое слово для каждой исполняемой инструкции version - параметр инструкции, указывающий на то, что будет использоваться первая версия стандарта XML. Пролог XML – документа – блок исполняемых инструкций. Инструкция для указания конкретной кодировки, которая будет использоваться: <?xml encoding=“UTF-8”?> encoding – параметр инструкции UTF-8 – одна из наиболее часто используемых кодировок Инструкция XML - процессора Инструкция, позволяющая правильно обработать DTD-блок: <?xml standalone=‘no’?> standalone – параметр для указания местонахождения описание структуры для данного XML – документа Значения: no – извещает XML-процессор, что для данного документа DTD-блок выделен в отдельный файл yes – указывает на то, что DTD-блок размещен в теле документа Инструкция XML - процессора Определение XML – инструкций из спецификаций XML в форме Бэкуса-Наура: XMLDecl ::= ‘<?xml’ VersionInfo EncodingDecl? SDDecl? S? ‘?>’ VersionInfo ::= S ‘version’ Eq (‘VersionNum’ | “VersionNum”) Eq ::= S? ‘=’ S? VersionNum ::= ([a-zA-Z0-9_.:] | ‘-’)+ Левая часть – имя конструкции ::= - оператор эквивалентности Правая часть – расшифровка имени, которая содержит формат и правила оформления Объявление типа документа DTD-блок – объявление типа документа, помещаятся сразу после исполняемой инструкции, указывающей на тот факт, что данный документ создан с применением языка XML. В нем определяются: Элементы документа Атрибуты элементов Сущности комментарии Объявление типа документа Пример DTD-блока <!DOCTYPE body [ <!ELEMENT body (#PCDATA)> <!ENTITY name “Igor”> ]> 1 стр. – объявление типа документа и его наименования. В качестве наименования типа документа мы используем имя самого старшего элемента, который включает в себя все остальные элементы. [] – содержат описание структуры всего документа Объявление типа документа DTD-блоки могут находиться как внутри документа, так и вне его. Для подключения можно использовать конструкцию подобную следующей: <!DOCTYPE main PUBLIC “-//New Boundaries//SweetImmersing//EN”//www.newbound aries.com/sweet/dtd/main.dtd” PUBLIC – файл рассматривает международная организация по стандартизации ISO SYSTEM - файл не рассматривается международной организацией по стандартизации ISO Объявление типа документа DTD-файл, содержащий DTD-блок подчиняется спецификации XML, т.е. является обычным XML-документом без значимого содержимого. Первой его строкой также будет исаполняемая инструкция. Номер версии стандарта XML обычно не указывается, но указывается используемая кодировка. Объявление типа документа DTD-блок должен быть: 1. Хорошо оформденным 2. Правильным Хорошо оформлен: У документа только один элемент верхнего уровня, и содержимое документа располагается полностью внутри сответствующего тэга В одном тэге не могут употребляться несколько раз одни и те же атрибцты элемента Все сущности должны объявляться до их использования Все тэги должны быть правильно вложены друг в друга Пример: <?xml version=“1.0” standalone=“yes”?> <body>well-formed document </body> Примечание: XML-процессоры чувствительны к регистру символов. Объявление типа документа Правильным считается XML-документ, который удовлетворяет требованиям, предъявляемым к хорошо-оформленным документам, и рпи этом имеет соответствующий DTD-блок и подчиняется всем правилам, описанным в нем. Пример: <?xml version=“1.0” standalone=“yes”?> <!DOCTYPE body [<!ELEMENT body (#PCDATA)> ]> <body>valid document </body> Элементы XML-документа Элемент – основная структурная единица XML-документа. Объявляется в DTD-блоке, а затем при разметке значимого содержимого документа используются тэги, наименования которых совпадают с наименованием элементов. Пример 1: <!DOCTYPE body [ <!ELEMENT body (#PCDATA)> ]> ELEMENT – ключевое слово body – наименование элемента PCDATA (parseable character data ) – тип (любая информация, с которой может работать XML-процессор) Элементы XML-документа Пример 2: (усложненная организация с иерархией документов) <!ELEMENT firm (name+, address, phone*, fax*, email, info)> <!ELEMENT name (#PCDATA)> <!ELEMENT address (#PCDATA)> <!ELEMENT phone (#PCDATA)> <!ELEMENT fax (#PCDATA)> <!ELEMENT email (#PCDATA)> <!ELEMENT info (#PCDATA)> Модификаторы: + применяется для элементов, которые в родительском элементе считаются обязательными, должны встречаться хотя бы один раз * указывает на то, что элемент может встретиться в описание родительского элемента любое количество раз ? Используюися для тех элементов, которые могут появляться в описание родительского элемента только один раз, или вообще не появляться Атрибуты элементов Атрибут позволяет максимально полно детализировать информацию, предназначенную для отображения или использования в элементе. <!ELEMENT text (#PCDATA)> <!ATTLIST text create_data CDATA #REQUIRED last_modified CDATA #IMPLIED author CDATA #REQUIRED editor CDATA “Kondikova E.V.”> create_data - наименование CDATA – тип #REQUIRED – модификатор атрибута Атрибуты элементов Три типа атрибутов: 1. CDATA – данные толко в виде строк 2. Type – перечисляемый тип Пример: <!ATTLIST my_element type (a|b|c “c”)> Маркер - специализированный атрибут, значение которого несет заранее предопределенный тип информации. При использовании мркера нужно включить в описание одно из семи ключевых слов. Пример: <!ATTLIST my_element id ID #REQUIRED 1. Атрибуты элементов Модификаторы атрибутов: 1. CDATA – данные толко в виде строк 2. Type – перечисляемый тип Пример: #REQUIRED – указывает на то, что для данного атрибута значение может быть не определено, т.е. этот атрибут не является обязательным для применения #IMPLIED – указывает на то , что атрибут должен быть обязательно применен. Т.е. во всех экземплярах элемента в значимом содержимом XML-документа должно быть обязательно присвоено значение этому атрибуту #FIXED – применяется в тех случаях, когда заданное для атрибута значение по умолчанию является фиксированным, т.е. не поддается изменению Пример: <!ELEMENT text (#PCDATA)> <!ATTLIST text create_data CDATA #REQUIRED last_modified CDATA #IMPLIED author CDATA #REQUIRED editor CDATA “Kondikova E.V.”>