XML документ можно представить в виде древовидной структуры, которая начинается с "корня" и заканчивается "листьями".
Ниже приведен пример XML документа:
<?xml version="1.0" encoding="Windows-1251"?> <mail> <to>user1@domain.ru</to> <from>user2@domain.ru </from> <subject>Встреча</subject> <body>Позвони мне завтра утром</body> </mail>
В первой строке помещена XML декларация, описывающая версию XML и используемую кодировку
В следующей строке описан корневой элемент документа.
В последующих четырех строках описаны 4 дочерних элемента относительно корневого: ( to, from, subject и body ).
И в последней строке указывается конец корневого элемента.
XML документ должен содержать корневой элемент, который является родительским для всех остальных элементов. Любой элемент (кроме находящихся на самом нижнем уровне дерева) может иметь вложенные элементы (дочерние элементы).
С помощью терминов родитель, дочерний и потомок описываются отношения между элементами в дереве XML документа. Родители содержат дочерние элементы, а дочерние элементы одного уровня называются потомками (братьями или сестрами).
Элементы могут иметь текстовое содержимое и атрибуты.
Ниже приведена схема, показывающая отношения между элементами и атрибутами этого документа:

Кроме того в XML документе следует выполнять еще несколько несложных правил:
Некоторые из символов (их всего 5) имеют специальное значение в XML. Для их обозначения используются альтернативные сочетания:
| замена | символ |
|---|---|
| lt; | < |
| gt; | > |
| amp; | |
| apos; | ' |
| quot; | " |
Комментарии в XML выделяются также как и в HTML:
<!-- Это комментарий -->
В отличие от HTML, который игнорирует повторы пробелов, XML сохраняет полную длину строки из пробелов.
XML документы, оформленные в соответствии с приведенными выше правилами, называются "правильно оформленными". Если при этом они еще и соответствуют правилам DTD (
Действительные XML документы содержат ссылку на DTD файл, например:
<!DOCTYPE note SYSTEM "mail.dtd">
DTD схема предназначена для определения структуры XML документа путем задания списка допустимых элементов, например
<!DOCTYPE mail [ <!ELEMENT note (to,from,subject,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT subject (#PCDATA)> <!ELEMENT body (#PCDATA)> ]>
Консорциум W3C поддерживает альтернативную к DTD, основанную на XML схему, называемую как " XML Schema ":
<xs:element name="mail">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="subject" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Для проверки действительности XML документа можно использовать специальные валидаторы, например W3C валидатор (http://validator.w3.org/). Для проверки схем также существуют специальные валидаторы, например XML Schema валидатор (http://www.w3.org/2001/03/webdata/xsv).
Согласно спецификации W3C XML программа должна прекратить обработку XML документа, как только будет обнаружена ошибка в этом документе.
DTD (
DTD может описываться как внутри XML документа, так и с помощью внешней ссылки.
Пример
<?xml version="1.0"?> <!DOCTYPE note [ <!ELEMENT mail (to,from,subject,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT subject (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note> <to>user1@domain.ru</to> <from>user2@domain.ru</from> <heading>Встреча</heading> <body> Позвони мне завтра утром </body> </note>
В данном примере:
!DOCTYPE mail определяет корневой элемент документа mail.
!ELEMENT note определяет элемент note,который содержит четыре элемента:
" to, from, subject, body ".
!ELEMENT to определяет элемент to типа "#PCDATA".
!ELEMENT from определяет элемент from типа "#PCDATA".
!ELEMENT subject определяет элемент subject типа "#PCDATA".
!ELEMENT body определяет элемент body типа "#PCDATA".
Пример
<?xml version="1.0"?> <!DOCTYPE note SYSTEM "mail.dtd"> <note> <to>user1@domain.ru</to> <from>user2@domain.ru</from> <heading>Встреча</heading> <body> Позвони мне завтра утром </body> </note>
Для чего необходимо использование DTD?
С точки зрения DTD все XML документы (HTML документы) строятся из следующих строительных блоков:
При описании структуры элементов, содержащих вложенные элементы можно использовать специальные операторы, задающие множественность их вхождения:
+ ': один и более раз, например, <!ELEMENT note (message+)>* ': ноль и более раз, например, <!ELEMENT note (message*)><!ELEMENT note (message?)>Объявление вида <!ELEMENT note (message|body)> указывает на возможность вхождения в элемент note другого элемента: message ИЛИ body.
Атрибуты элементов описываются в форме:
<!ATTLIST element-name attribute-name attribute-type default-value>
например:
<!ATTLIST payment type CDATA "check">
Соответствует XML коду:
<payment type="check" />.
Тип атрибута может принимать одно из значений:
| Тип | Описание |
|---|---|
| CDATA | Символьные данные |
| ( en1 | en2 |..) | Значение из списка |
| ID | Уникальный id |
| id другого элемента | |
| Список других id | |
| NMTOKEN | Допустимое XML имя |
| NMTOKENS | Список допустимых XML имен |
| ENTITY | Специальные символы |
| ENTITIES | Список специальных символов |
| NOTATION | Имя нотации |
| xml: | Предопределенное XML имя |
Значение по умолчанию может быть одним из следующих:
| Значение | Интерпретация |
|---|---|
| #REQUIRED | Обязательно |
| #IMPLIED | Не обязательно |
| #FIXED value | Значение фиксировано |
Так же как DTD схема XML Schema определяет допустимые строительные блоки XML документа.
XML Schema:
Предполагается, что в перспективе DTD схемы будут замещены XML Schema в большинстве веб-приложений поскольку XML Schema:
XML Schema стала W3C рекомендацией в 2001 году.
Рассмотрим в качестве примера XML документ:
<?xml version="1.0" encoding="Windows-1251"?> <mail> <to>user1@domain.ru</to> <from>user2@domain.ru </from> <subject>Встреча</subject> <body>Позвони мне завтра утром</body> </mail>
Структура данного документа может быть рассмотрена с помощью следующей XML Schema:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.myhp.edu"
xmlns=" http://www.myhp.edu"
elementFormDefault="qualified">
<xs:element name="mail">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="subject" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
В данном примере элемент mail имеет тип complexType, поскольку содержит другие элементы. Другие элементы документа имеют простой тип, поскольку не включают других элементов.
Ссылка на схему в XML документе выглядит следующим образом:
<?xml version="1.0"?> <mail xmlns="http:// www.myhp.edu " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.myhp.edu mail.xsd"> <to>user1@domain.ru</to> <from>user2@domain.ru </from> <subject>Встреча</subject> <body>Позвони мне завтра утром</body> </mail>
Элемент <schema> является корневым элементом любой схемы XML Schema.
Данный элемент может содержать несколько атрибутов, например:
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.myhp.edu" xmlns="http://www.myhp.edu" elementFormDefault="qualified"> ... ... </xs:schema>
Следующий фрагмент:
xmlns:xs="http://www.w3.org/2001/XMLSchema"
указывает на то, что элементы и типы данных, используемые в схеме входят в пространство http://www.w3.org/2001/XMLSchema. Причем, все элементы и типы данных из этого пространства имен должны иметь префикс xs.
Фрагмент:
targetNamespace="http://www.myhp.edu"
указывает на то, что элементы, определяемые в схеме входят в пространство "http://www.myhp.edu".
Во фрагменте:
xmlns="http://www.myhp.edu"
указывается, что пространством имен по умолчанию является "http://www.myhp.edu"
Следующий фрагмент:
elementFormDefault="qualified"
указывает на то, что любые элементы, объявленные в схеме, должны принадлежать пространству имен.
Ссылка на внешнюю схему может выглядеть следующим образом:
<?xml version="1.0"?> <mail xmlns=" http://www.myhp.edu " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.myhp.edu mail.xsd"> <to>user1@domain.ru</to> <from>user2@domain.ru </from> <subject>Встреча</subject> <body>Позвони мне завтра утром</body> </mail>
Здесь строка
xsi:schemaLocation=" http://www.myhp.edu mail.xsd">
указывает на местоположение файла схемы.
Синтаксис для определения простого элемента:
<xs:element name="xxx" type="yyy"/>
где xxx – имя элемента и yyy тип данных элемента.
Встроенными типами данных элементов являются следующие:
xs:string xs:decimalxs:integerxs:booleanxs:datexs:timeНапример, фрагмент XML документа:
<lastname>Refsnes</lastname> <age>36</age> <dateborn>1970-03-27</dateborn>
описывается в схеме следующим образом:
<xs:element name="lastname" type="xs:string"/> <xs:element name="age" type="xs:integer"/> <xs:element name="dateborn" type="xs:date"/>
Следующие фрагменты:
<xs:element name="color" type="xs:string" default="red"/>
и
<xs:element name="color" type="xs:string" fixed="red"/>
описывают значение элемента по умолчанию и фиксированное значения соответственно.
Все атрибуты описываются простыми типами данных.
Простые элементы не могут иметь атрибутов. Если элемент имеет атрибуты, он рассматривается как имеющий сложный тип. Сам атрибут рассматривается всегда как имеющий простой тип.
Описание атрибута обычно дается следующим образом:
<xs:attribute name="xxx" type="yyy"/>
где xxx – имя атрибута, а yyy - определяет тип данных атрибута.
Встроенными типами данных для атрибутов являются соледующие:
xs:stringxs:decimal xs:integerxs:booleanxs:datexs:timeНапример, XML элемент с атрибутом:
<lastname lang="EN">Smith</lastname>
описывается соответствующей схемой:
<xs:attribute name="lang" type="xs:string"/>
Значение по умолчанию и фиксированное значение атрибута описываются следующим образом:
<xs:attribute name="lang" type="xs:string" default="EN"/>
и
<xs:attribute name="lang" type="xs:string" fixed="EN"/>
соответственно.
Для описания обязательных атрибутов (по умолчанию все атрибуты являются необязательными) используется следующая нотация:
<xs:attribute name="lang" type="xs:string" use="required"/>
Для задания допустимых значений величин XML элементов и атрибутов можно использовать ограничения. Ограничения на значения XML элементов называются фасетами.
Список возможных ограничений приводится ниже:
| Ограничение | Описание |
|---|---|
enumeration |
Определяет список допустимых значений |
fractionDigits |
Указывет максимальное число десятичных позиций. Должно быть неотрицательным |
length |
Указывает точное число символов или элементов в списке. Должно быть неотрицательным |
maxExclusive |
Указывает верхнюю границу числовых значений |
maxInclusive |
Указывает верхнюю границу числовых значений |
maxLength |
Указывает максимальное число символов или элементов в списке. Должно быть неотрицательным |
minExclusive |
Указывает нижнюю невключаемую границу числовых значений |
minInclusive |
Указывает нижнюю включаемую границу числовых значений |
minLength |
Указывает минимальное число символов или элементов в списке. Должно быть неотрицательным |
pattern |
Определяет точно последовательность символов (шаблон), которая допустима |
totalDigits |
Определяет точное число цифр. Должно быть неотрицательным |
|
Указывает как обрабатывать неотображаемые символы (пробел, табуляция и др.) |
Примеры ограничения:
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="120"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z0-9]{8}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
При описании документов, имеющих сложную иерархическую структуру, можно сначала определить все элементы и атрибуты, а затем ссылаться на них.
Рассмотрим следующий пример:
<employee> <firstname>John</firstname> <lastname>Smith</lastname> </employee>
Сложный элемент в схеме можно определить следующим образом:
<example><xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> <xs:element name="employee"> <xs:complexType> <xs:sequence> <xs:element ref="firstname"/> <xs:element ref="lastname"/> </xs:sequence> </xs:complexType> </xs:element>
Другой подход заключается в повторном использовании именованных элементов.
employee " element может быть объявлен непосредственно по имени:<xs:element name="employee">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Поскольку дочерние элементы " firstname " и " lastname " окружены индикатором <sequence>, то они должны в документе появляться именно в этой последовательности.
employee " может иметь атрибут типа, ссылающийся на имя сложного типа:<xs:element name="employee" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
Несколько элементов могут ссылаться на тот же самый сложный тип:
<xs:element name="employee" type="personinfo"/>
<xs:element name="student" type="personinfo"/>
<xs:element name="member" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
Также можно строить сложный элемент на базе существующего сложного элемента с добавлением нескольких элементов:
<xs:element name="employee" type="fullpersoninfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="fullpersoninfo">
<xs:complexContent>
<xs:extension base="personinfo">
<xs:sequence>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Пустой сложный элемент не может иметь содержимого, только атрибуты.
С помощью специальных индикаторов можно указывать, как элементы могут использоваться в документах.
Всего используется семь индикаторов:
Пример:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string" maxOccurs="10"/>
</xs:sequence>
</xs:complexType>
</xs:element>
1.Описание структуры XML-документа с помощью DTD-схемы.
<?xml version="1.0"?>
<timetable>
<day dayOfWeek="Monday">
<lesson type="practical">
<timeFrom>08.00</timeFrom>
<timeTo>09.30</timeTo>
<subject>Deutsch</subject>
<teacher>Borisova</teacher>
<room>216</room>
</lesson>
<lesson type="lecture">
<timeFrom>09.40</timeFrom>
<timeTo>11.10</timeTo>
<subject>SAP Administration</subject>
<teacher>Egorov</teacher>
<room>384</room>
</lesson>
<lesson type="practical">
<timeFrom>11.20</timeFrom>
<timeTo>12.50</timeTo>
<subject>SAP Administration</subject>
<teacher>Petrov</teacher>
<room>384</room>
</lesson>
</day>
</timetable>
Загрузите этот файл в браузере. Обратите внимание на иерархическую структуру документа.
<?xml version="1.0"?> <!DOCTYPE timetable[ <!ELEMENT timetable (day*)> <!ELEMENT day (lesson+)> <!ELEMENT lesson (timeFrom, timeTo, subject, teacher, room?)> <!ELEMENT timeFrom (#PCDATA)> <!ELEMENT timeTo (#PCDATA)> <!ELEMENT subject (#PCDATA)> <!ELEMENT teacher (#PCDATA)> <!ELEMENT room (#PCDATA)> <!ATTLIST day dayOfWeek CDATA #REQUIRED> <!ATTLIST lesson type CDATA #REQUIRED> ]>
2.Описание структуры XML-документа с помощью XML Schema.
<?xml version="1.0"?>
<timetable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="timetable.xsd">
<day dayOfWeek="Monday">
<lesson type="practical">
<timeFrom>08.00</timeFrom>
<timeTo>09.30</timeTo>
<subject>Deutsch</subject>
<teacher>Borisova</teacher>
<room>216</room>
</lesson>
<lesson type="lecture">
<timeFrom>09.40</timeFrom>
<timeTo>11.10</timeTo>
<subject>SAP Administration</subject>
<teacher>Egorov</teacher>
<room>384</room>
</lesson>
<lesson type="practical">
<timeFrom>11.20</timeFrom>
<timeTo>12.50</timeTo>
<subject>SAP Administration</subject>
<teacher>Petrov</teacher>
<room>384</room>
</lesson>
</day>
</timetable>
<?xml version="1.0" encoding="ISO-8859-1" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name = "timetable"> <xs:complexType> <xs:sequence> <xs:element ref = "day" minOccurs = "0" maxOccurs = "unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name = "day"> <xs:complexType> <xs:sequence> <xs:element ref = "lesson" maxOccurs = "unbounded"/> </xs:sequence> <xs:attribute name = "dayofWeek" use = "required" type = "xs:string"/> </xs:complexType> </xs:element> <xs:element name = "lesson"> <xs:complexType> <xs:sequence> <xs:element ref = "timeFrom"/> <xs:element ref = "timeTo"/> <xs:element ref = "subject"/> <xs:element ref = "teacher"/> <xs:element ref = "room" minOccurs = "0"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name = "timeFrom" type = "xs:string"/> <xs:element name = "timeTo" type = "xs:string"/> <xs:element name = "subject" type = "xs:string"/> <xs:element name = "teacher" type = "xs:string"/> <xs:element name = "room" type = "xs:string"/> </xs:schema>
В приведенном ниже XML документе описана экзаменационная ведомость:
<gradeReport id="120851"> <date>10-06-2008</date> <subject>Computer Science Fundamentals</subject> <examiner>prof.Litvinov</examiner> <gradeList> <gradeRecord id="1"> <student>Ivanov</student> <grade>4</grade> </gradeRecord> <gradeRecord id="2"> <student>Petrov</student> <grade>3</grade> </gradeRecord> <gradeRecord id="3"> <student>Sidorov</student> <grade>5</grade> </gradeRecord> </gradeList> </gradeReport>
Опишите структуру данного документа с помощью DTD схемы и XML Schema. Проверьте обе схемы с помощью соответствующих программ-валидаторов.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.