В 1986 году, задолго до того, как идея создания сети Веб была воплощена в жизнь, универсальный стандартизированный язык разметки SGML ( Standardized Generalized Markup Language ) был утвержден в качестве международного стандарта ( ISO 8879 ) определения языков разметки, хотя SGML существовал еще с конца шестидесятых. Он использовался для того, чтобы описывать языки разметки, предоставляя при этом автору возможность давать формальные определения каждому элементу и
Язык HTML первоначально был всего лишь одним из SGML -приложений. Он описывал правила, по которым должна быть подготовлена информация для World Wide Web. Таким образом, язык HTML - это набор предписаний SGML, сформулированных в виде DTD ), объясняющих, что именно обозначают тэги и элементы. Схема DTD для языка HTML хранится в веб-браузере.
К недостаткам языка HTML можно отнести следующие:
HTML имеет фиксированный набор тэгов. Нельзя создавать свои тэги, понятные другим пользователям.HTML - это исключительно технология представления данных. HTML не несет информации о значении содержания, заключенного в тэгах.HTML - "плоский" язык. Значимость тэгов в нем не определена, поэтому с его помощью нельзя описать иерархию данных.HTML не обладает достаточной мощью для создания веб-приложений на том уровне, к которому в настоящее время стремятся веб-разработчики. Например, на языке HTML невозможно разработать приложение для профессиональной обработки и поиска документов.HTML -документы, используемые как приложения, перегружают Интернет большими объемами трафика в системах клиент-сервер. Примером может служить пересылка по сети большого по объему документа, в то время как необходима только небольшая часть этого документа.Таким образом, с одной стороны, язык HTML является очень удобным средством разметки документов для использования в веб, а с другой - документ, размеченный в HTML, имеет мало информации о своем содержании. Если тот или иной документ несет достаточно полную информацию о своем содержании, появляется возможность сравнительно легко провести автоматическую обобщенную обработку и поиск в файле, хранящем документ. Язык SGML позволяет сохранять информацию о содержании документа, однако вследствие особой сложности он никогда не использовался так широко, как HTML.
Группа экспертов по языку SGML, возглавляемая Джоном Боузэком ( Jon Bosak ) из компании Sun Microsystems, приступила к работе по созданию подмножества языка SGML, которое могло бы быть принято Web -сообществом. Решено было удалить многие несущественные возможности SGML. Перестроенный таким образом язык назвали XML. Упрощенный вариант оказался значительно более доступным, чем оригинал, его спецификации занимали всего 26 страниц по сравнению с более чем 500 страницами спецификаций SGML.
Рассмотрим более детально структуру и особенности этого языка.
XML ( - рекомендованный W3C язык разметки. XML - текстовый формат, предназначенный для хранения структурированных данных, для обмена информацией между программами, а также для создания на его основе специализированных языков разметки. XML является упрощённым подмножеством языка SGML.
Язык XML имеет следующие достоинства:
XML могут быть описаны основные структуры данных - такие как записи, списки и деревья.XML подходит для описания практически любых типов документов;SGML, для которого накоплен большой опыт работы и созданы специализированные приложения;К известным недостаткам языка можно отнести следующие:
XML избыточен.XML документа существенно больше бинарного представления тех же данных (порядка 10 раз).XML документа существенно больше, чем документа в альтернативных текстовых форматах передачи данных (например JSON , YAML ) и особенно в форматах данных, оптимизированных для конкретного случая использования.XML может повлиять на эффективность приложения. Возрастает стоимость хранения, обработки и передачи данных.XML, и можно использовать значительно более простые и производительные решения.XML сложно использовать и их сложно реализовывать в XML XML не содержит встроенной в язык поддержки типов данных. В нём нет понятий "целых чисел", "строк", "дат", "булевых значений" и т. д.XML, ограничена по сравнению с реляционной моделью и объектно-ориентированными графами.Вообще говоря, XML можно рассматривать не только как новый язык разметки, но и как основу для целого семейства технологий:
XML |
Технические рекомендации об использовании XML |
DTD |
Определение типа документа (схема) |
|
Формат XML (схема Microsoft ) |
|
Определение схемы XML (схемы W3C ) |
| Пространство имен | Метод определения имен элементов и атрибутов |
|
Язык путей XML |
XLink |
Язык ссылок XML |
XPointer |
Язык указателей XML |
DOM |
API для объектной модели документа |
|
Простой API для XML |
|
Расширяемый |
|
Объекты форматирования |
|
Язык преобразований |
XInclude |
Синтаксис XML Include |
|
Синтаксис XML Base URI |
По-сути, XML служит SGML, XML, HTML и некоторыми другими языками показана на следующей диаграмме:
(рис 9.1) Взаимосвязь между SGML, XML и HTML Важным отличием XML от HTML является то большое внимание, которое уделяется контролю за тем, насколько точно соблюдаются правила языка при разметке документов. В зависимости от этого принято выделять правильно построенные и действительные XML документы.
Документ XML считается правильно построенным, если он соответствует всем синтаксическим правилам XML.
Проверка действительности документа предполагает выполнение следующих действий:
Рассмотрим теперь основные синтаксические правила построения XML документов.
XML документ содержит один и только один корневой элемент, содержащий все остальные элементыXML.XML документ имеет следующую структуру :
XML документа называется объявлением XML. Это необязательная строка, указывающая версию стандарта XML (обычно это 1.0). Также здесь может быть указана XML комментарии размещаются внутри пары тегов <!-- и заканчиваются -->. Два знака дефис (--) не могут быть применены ни в какой части внутри комментария.XML -документа состоит из вложенных элементов, некоторые из которых имеют атрибуты и содержимое.К сожалению, описанные выше правила позволяют контролировать только формальную правильность XML документа, но не содержательную. Для решения второй задачи используются так называемые схемы.
Схема четко определяет имя и структуру корневого элемента, включая спецификацию всех его дочерних элементов. Программист может задать, какие элементы и в каком количестве обязательны, а какие - необязательны. Схема также определяет, какие элементы содержат атрибуты, допустимые значения этих атрибутов, в т.ч. значения по умолчанию.
Чаще всего для описания схемы используются следующие спецификации:
DTD (Document Type Definition ) - язык XDR (XML Data Reduced ) - диалект XML, разработанный Microsoft.XSD (язык определения схем XML) - рекомендована консорциумом W3C.XML документ отличается от HTML документа также и тем, как он отображается в веб-браузере. Без использования CSS или -документ отображается как простой текст в большинстве веб-браузеров. Некоторые веб-браузеры, такие как Internet Explorer и Mozilla Firefox отображают структуру документа в виде дерева, позволяя сворачивать и разворачивать узлы с помощью нажатий клавиши мыши.
Наиболее распространены три способа преобразования XML -документа в отображаемый пользователю вид:
CSS.XSLT .XML -документа.Идея создания собственных тэгов, имеющих специальное значение и помогающих описать содержание документа, сама по себе просто замечательна. Но если каждый пользователь может создавать свои собственные описания, каким образом их распознавать? С этой целью в спецификации XML для описания подобных "самодеятельных" тэгов используются схемы. Они необходимы для того, чтобы:
Наиболее известными языками описания схем являются следующие:
DTD (Document Type Definition ) - язык SGML -документа.XDR (XML Data Reduced ) - диалект схемы XML, разработанный Microsoft, который поддерживался в Internet Explorer 4 и 5 версий.XML Schema или просто XSD (язык определения схем XML ) - рекомендация консорциума W3C с 2001 года.Схема DTD предоставляет шаблон разметки документа, в котором указываются наличие, порядок следования и расположение элементов и их атрибутов в документе XML.
В рамках DTD модель содержимого XML документа можно описать следующим образом:
(рис 9.2) Модель содержимого для XML документа Каждый элемент документа может иметь один из типов:
| Содержание | Синтаксис | Комментарий |
|---|---|---|
| Данные | <!ELEMENT имя (#PCDATA)> |
Содержит только текстовые данные |
| Другие элементы | <!ELEMENT имя (дочерний элемент 1, дочерний элемент 2)> |
Содержит только дочерние элементы |
| Смешанное | <!ELEMENT имя (#PCDATA, дочерний элемент)*> |
Содержит комбинацию текстовых данных и дочерних элементов |
EMPTY |
<!ELEMENT имя EMPTY> |
Ничего не содержит |
ANY |
<!ELEMENT имя ANY> |
Может содержать текстовые данные или дочерние элементы |
Атрибуты, находящиеся внутри тэгов документа, описываются отдельно с помощью синтаксиса:
<!ATTList имя_элемента имя_атрибута1 (тип) значение_по_умолчанию …………………………………………………………………………………... имя_элемента имя_атрибутаN (тип) значение_по_умолчанию >
При этом атрибут в DTD может иметь один из трех типов:
Кроме типа атрибута можно также задавать и его модальность:
| Значение | Описание |
|---|---|
#REQUIRED |
Атрибут обязательно должен быть указан |
#FIXED |
Значение атрибута не должно отличаться от указанного |
#IMPLIED |
Необязательное значение |
Рассмотрим в качестве примера описание атрибутов строкового типа для элемента, описывающего некоторое сообщение:
<!ATTLIST message
number CDATA #REQUIRED
date CDATA #REQUIRED
from CDATA #FIXED
status CDATA #IMPLIED>
Если этот элемент содержит атрибуты с перечислением, то их описание может выглядеть, например, следующим образом:
<!ATTLIST message
number ID #REQUIRED
from CDATA #REQUIRED
alert (low | normal | urgent) "normal">
Маркированных атрибуты элемента могут быть четырех типов:
| Значение | Описание |
|---|---|
ID |
Уникальный идентификатор элемента (начинается с буквы, двоеточия или подчеркивания) |
|
Ссылка на элемент, содержащий атрибуты ID |
ENTITIES |
Ссылка на внешний элемент |
NMTOKEN |
Содержит буквы, цифры, точки, знаки подчеркивания, переносы, двоеточия, но не пробелы |
И, наконец, в DTD можно использовать следующие индикаторы вхождения последовательностей:
| Символ | Пример | Описание |
|---|---|---|
| , | (a, b, c) |
Последовательное использование элементов списка |
| | | (a | b | c) |
Используется один из членов списка |
date |
Используется один и только один элемент | |
| ? | subject? |
Необязательное использование (0 или 1 раз) |
| + | paragraph+ |
Используется один или несколько раз |
| * | brother* |
Используется ноль или несколько раз |
В качестве примера приведем DTD схему, описывающую структуру электронного почтового ящика:
<!ELEMENT mailbox (message*)> <!ELEMENT message (head, body)> <!ATTLIST message uid CDATA #REQUIRED> <!ELEMENT head ( from,to+, subject?, CC*, notify?) > <!ELEMENT from (#PCDATA)> <!ELEMENT to (#PCDATA)> <!ELEMENT subject (#PCDATA)> <!ELEMENT CC (#PCDATA)> <!ELEMENT notify EMPTY> <!ELEMENT body (#PCDATA)>
Исходный XML документ, удовлетворяющий данной схеме, может выглядеть, например, так:
<?xml version="1.0" ?>
<!DOCTYPE mailbox SYSTEM "mailbox.dtd">
<mailbox>
<message uid="1">
<head>
<from>user1@myhp.edu</from>
<to>user2@myhp.edu</to>
<subject>Re:</subject>
</head>
<body>
What's up!
</body>
</message>
<message uid="2">
<head>
<from>user3@myhp.edu</from>
<to>user2@myhp.edu</to>
<subject>Remind</subject>
<CC> user1@myhp.edu </CC>
<notify/>
</head>
<body>
Remind me about meeting.
</body>
</message>
</mailbox>
Обратите внимание на 2-ю строчку документа, в которой указывается DTD схему.
В принципе, DTD допускает два способа использования в XML документе.
<!DOCTYPE корневой_элемент [ <!ELEMENT корневой_элемент (модель содержания)> ]>
<!DOCTYPE корневой_элемент SYSTEM "name.DTD">
В заключение укажем на следующие недостатки DTD схем:
XML. Требуется изучение совершенно другого языка.XML, поэтому их нельзя легко расширить или преобразовать к другим языкам разметки - HTML или DHTML .XML.XML-Data - полное имя языка описания схем, предложенного Майкрософт, а XML -Data - это экземпляр XML, т.е. соответствует всем синтаксическим правилам и стандартам XML.
Реализуя проверки данных на уровне документа с помощью схемы, приложения, генерирующие и принимающие транзакции, можно оптимизировать для обеспечения максимального быстродействия. Соответствие полей и правильность записей проверяются на уровне экземпляров XML.
Корневым элементом в схеме всегда является элемент Schema:
<Schema name="имя_схемы"
xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<-- Объявления других элементов -->
</Schema>
Элемент ElementType имеет синтаксис:
<ElementType
content="{empty | texOnly | eltOnly | mixed}">
dt:type "datatype"
model="{open | closed}"
name = "idref"
order="{one | seq | many}"
>
Элемент ElementType может иметь следующие атрибуты:
| Имя атрибута | Описание |
|---|---|
name |
Имя элемента |
content |
Содержание элемента. Допустимые значения: empty (пустой элемент), eltOnly (может быть только контейнером для других элементов), textOnly (только текстовые данные), (смешанные данные). |
dt:type |
Тип данных элемента |
model |
Может принимать значения: Open - разрешено использовать элементы, не определенные в схемеClosed - запрещено использовать элементы, не определенные в схеме |
order |
Порядок следования дочерних элементов в экземпляре one - предполагается наличие одного документаmany - любое количество элементов в любом порядкеseq - элементы указываются в строго заданном порядке |
В качестве дочерних элементов для ElementType можно использовать следующие:
| Имя элемента | Описание |
|---|---|
element |
Объявляет дочерний элемент |
description |
Обеспечивает описание элемента ElementType |
|
Обеспечивает тип данных элемента ElementType |
group |
Определяет порядок следования элементов |
AttributeType |
Определяет атрибут |
attribute |
Определяет сведения о дочернем элементе AttributeType |
Для объявления атрибутов используется синтаксис:
<AttributeType
default="default-value"
dt:type="primitive-type"
dt:values="enumerated-values"
name="idref"
required="{yes|no}"
>
В свою очередь элемент AttributeType может иметь атрибуты:
| Значение | Описание |
|---|---|
default |
Значение по умолчанию |
dt:type |
Один из следующих типов: entity, entities, |
dt:values |
Допустимые значения |
name |
Имя атрибута |
required |
Указывает на обязательное наличие атрибута в описании |
Синтаксис для описания элемента attribute выглядит следующим образом:
<attribute
default="default-value"
type="attribute-type"
[required="{yes|no}"
]>
а его возможные значения могут быть такими:
| Значение | Комментарий |
|---|---|
default |
Значение по умолчанию |
type |
Имя элемента AttributeType, определенного в данной схеме. Должно соответствовать атрибуту name элемента AttributeType |
required |
Указывает на обязательное наличие атрибута в описании |
В отличие от DTD схем поддерживает типы данных. Элемент Schema имеет следующий атрибут:
Xmlns:dt="urn=schemas-microsoft-com:datatypes"
С полным списком типов данных можно ознакомится на странице по адресу: http://msdn.microsoft.com/en-us/library/ms256121(VS.85).aspx
Индикаторы вхождения в схемах имеют синтаксис:
<element
type="element-type"
[minOccur="{0|1}"]
[maxOccur="{1|*}"]
>
схема позволяет определять группы содержания. Так, в элементе ElementType может содержаться элемент group, имеющий синтаксис:
<group order="(one|seq|many)" minOccur="(0|1)" maxOccur="(1|*)">
<element type="ElementType/">
<element type="ElementType/">
<element type="ElementType/">
<element type="ElementType/">
</group>
В заключение приведем пример схемы, описывающей структуру XML документа, содержащего письма электронной почты:
<?xml version = "1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">
<xsd:element name="m_box">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="message" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="message">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="head" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="body" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="uid" use="required" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="head">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="to" minOccurs="1" maxOccurs="unbounded"/>
<xsd:element ref="from" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="date" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="subject" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="cc" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="to" type="xsd:string"/>
<xsd:element name="from" type="xsd:string"/>
<xsd:element name="date" type="xsd:string"/>
<xsd:element name="subject" type="xsd:string"/>
<xsd:elememt name="cc" type="xsd:string"/>
</xsd:schema>
Так же как DTD схема определяет допустимые строительные блоки XML документа.
:
Предполагается, что в перспективе DTD схемы будут замещены в большинстве веб-приложений поскольку :
XML. стала 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 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>Встреча</heading> <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>Встреча</heading> <body>Позвони мне завтра утром</body> </mail>
Здесь строка
xsi:schemaLocation=" http://www.myhp.edu mail.xsd">
указывает на местоположение файла схемы.
Синтаксис для определения простого элемента:
<xs:element name="xxx" type="yyy"/>
где xxx - имя элемента и yyy тип данных элемента.
xs:string xs:decimal xs:integer xs:boolean xs:date xs: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:string xs:decimal xs:integer xs:boolean xs: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 элементов называются фасетами.
Список возможных ограничений приводится ниже:
| Ограничение | Описание |
|---|---|
|
Определяет список допустимых значений |
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>
Сложный элемент в схеме можно определить следующим образом:
<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>
Поскольку дочерние элементы " и " окружены индикатором <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>
Пустой сложный элемент не может иметь содержимого, только атрибуты.
С помощью специальных индикаторов можно указывать, как элементы могут использоваться в документах.
Всего используется семь индикаторов:
Order ):All Choice Sequence Occurrence ):maxOccurs minOccurs Group ) индикаторы:Group name attributeGroup name Пример:
<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>
Для проверки действительности ).
Для проверки схем также существуют специальные валидаторы, например ).
Следует отметить, что согласно спецификации W3C любая программа должна прекратить обработку XML документа, как только будет обнаружена ошибка в этом документе.
В 1986 году, задолго до того, как идея создания сети Веб была воплощена в жизнь, универсальный стандартизированный язык разметки SGML ( Standardized Generalized Markup Language ) был утвержден в качестве международного стандарта ( ISO 8879 ) определения языков разметки, хотя SGML существовал еще с конца шестидесятых. Он использовался для того, чтобы описывать языки разметки, предоставляя при этом автору возможность давать формальные определения каждому элементу и
Язык HTML первоначально был всего лишь одним из SGML -приложений. Он описывал правила, по которым должна быть подготовлена информация для World Wide Web. Таким образом, язык HTML - это набор предписаний SGML, сформулированных в виде DTD ), объясняющих, что именно обозначают тэги и элементы. Схема DTD для языка HTML хранится в веб-браузере.
К недостаткам языка HTML можно отнести следующие:
HTML имеет фиксированный набор тэгов. Нельзя создавать свои тэги, понятные другим пользователям.HTML - это исключительно технология представления данных. HTML не несет информации о значении содержания, заключенного в тэгах.HTML - "плоский" язык. Значимость тэгов в нем не определена, поэтому с его помощью нельзя описать иерархию данных.HTML не обладает достаточной мощью для создания веб-приложений на том уровне, к которому в настоящее время стремятся веб-разработчики. Например, на языке HTML невозможно разработать приложение для профессиональной обработки и поиска документов.HTML -документы, используемые как приложения, перегружают Интернет большими объемами трафика в системах клиент-сервер. Примером может служить пересылка по сети большого по объему документа, в то время как необходима только небольшая часть этого документа.Таким образом, с одной стороны, язык HTML является очень удобным средством разметки документов для использования в веб, а с другой - документ, размеченный в HTML, имеет мало информации о своем содержании. Если тот или иной документ несет достаточно полную информацию о своем содержании, появляется возможность сравнительно легко провести автоматическую обобщенную обработку и поиск в файле, хранящем документ. Язык SGML позволяет сохранять информацию о содержании документа, однако вследствие особой сложности он никогда не использовался так широко, как HTML.
Группа экспертов по языку SGML, возглавляемая Джоном Боузэком ( Jon Bosak ) из компании Sun Microsystems, приступила к работе по созданию подмножества языка SGML, которое могло бы быть принято Web -сообществом. Решено было удалить многие несущественные возможности SGML. Перестроенный таким образом язык назвали XML. Упрощенный вариант оказался значительно более доступным, чем оригинал, его спецификации занимали всего 26 страниц по сравнению с более чем 500 страницами спецификаций SGML.
Рассмотрим более детально структуру и особенности этого языка.
XML ( - рекомендованный W3C язык разметки. XML - текстовый формат, предназначенный для хранения структурированных данных, для обмена информацией между программами, а также для создания на его основе специализированных языков разметки. XML является упрощённым подмножеством языка SGML.
Язык XML имеет следующие достоинства:
XML могут быть описаны основные структуры данных - такие как записи, списки и деревья.XML подходит для описания практически любых типов документов;SGML, для которого накоплен большой опыт работы и созданы специализированные приложения;К известным недостаткам языка можно отнести следующие:
XML избыточен.XML документа существенно больше бинарного представления тех же данных (порядка 10 раз).XML документа существенно больше, чем документа в альтернативных текстовых форматах передачи данных (например JSON , YAML ) и особенно в форматах данных, оптимизированных для конкретного случая использования.XML может повлиять на эффективность приложения. Возрастает стоимость хранения, обработки и передачи данных.XML, и можно использовать значительно более простые и производительные решения.XML сложно использовать и их сложно реализовывать в XML XML не содержит встроенной в язык поддержки типов данных. В нём нет понятий "целых чисел", "строк", "дат", "булевых значений" и т. д.XML, ограничена по сравнению с реляционной моделью и объектно-ориентированными графами.Вообще говоря, XML можно рассматривать не только как новый язык разметки, но и как основу для целого семейства технологий:
XML |
Технические рекомендации об использовании XML |
DTD |
Определение типа документа (схема) |
|
Формат XML (схема Microsoft ) |
|
Определение схемы XML (схемы W3C ) |
| Пространство имен | Метод определения имен элементов и атрибутов |
|
Язык путей XML |
XLink |
Язык ссылок XML |
XPointer |
Язык указателей XML |
DOM |
API для объектной модели документа |
|
Простой API для XML |
|
Расширяемый |
|
Объекты форматирования |
|
Язык преобразований |
XInclude |
Синтаксис XML Include |
|
Синтаксис XML Base URI |
По-сути, XML служит SGML, XML, HTML и некоторыми другими языками показана на следующей диаграмме:
(рис 9.1) Взаимосвязь между SGML, XML и HTML Важным отличием XML от HTML является то большое внимание, которое уделяется контролю за тем, насколько точно соблюдаются правила языка при разметке документов. В зависимости от этого принято выделять правильно построенные и действительные XML документы.
Документ XML считается правильно построенным, если он соответствует всем синтаксическим правилам XML.
Проверка действительности документа предполагает выполнение следующих действий:
Рассмотрим теперь основные синтаксические правила построения XML документов.
XML документ содержит один и только один корневой элемент, содержащий все остальные элементыXML.XML документ имеет следующую структуру :
XML документа называется объявлением XML. Это необязательная строка, указывающая версию стандарта XML (обычно это 1.0). Также здесь может быть указана XML комментарии размещаются внутри пары тегов <!-- и заканчиваются -->. Два знака дефис (--) не могут быть применены ни в какой части внутри комментария.XML -документа состоит из вложенных элементов, некоторые из которых имеют атрибуты и содержимое.К сожалению, описанные выше правила позволяют контролировать только формальную правильность XML документа, но не содержательную. Для решения второй задачи используются так называемые схемы.
Схема четко определяет имя и структуру корневого элемента, включая спецификацию всех его дочерних элементов. Программист может задать, какие элементы и в каком количестве обязательны, а какие - необязательны. Схема также определяет, какие элементы содержат атрибуты, допустимые значения этих атрибутов, в т.ч. значения по умолчанию.
Чаще всего для описания схемы используются следующие спецификации:
DTD (Document Type Definition ) - язык XDR (XML Data Reduced ) - диалект XML, разработанный Microsoft.XSD (язык определения схем XML) - рекомендована консорциумом W3C.XML документ отличается от HTML документа также и тем, как он отображается в веб-браузере. Без использования CSS или -документ отображается как простой текст в большинстве веб-браузеров. Некоторые веб-браузеры, такие как Internet Explorer и Mozilla Firefox отображают структуру документа в виде дерева, позволяя сворачивать и разворачивать узлы с помощью нажатий клавиши мыши.
Наиболее распространены три способа преобразования XML -документа в отображаемый пользователю вид:
CSS.XSLT .XML -документа.Идея создания собственных тэгов, имеющих специальное значение и помогающих описать содержание документа, сама по себе просто замечательна. Но если каждый пользователь может создавать свои собственные описания, каким образом их распознавать? С этой целью в спецификации XML для описания подобных "самодеятельных" тэгов используются схемы. Они необходимы для того, чтобы:
Наиболее известными языками описания схем являются следующие:
DTD (Document Type Definition ) - язык SGML -документа.XDR (XML Data Reduced ) - диалект схемы XML, разработанный Microsoft, который поддерживался в Internet Explorer 4 и 5 версий.XML Schema или просто XSD (язык определения схем XML ) - рекомендация консорциума W3C с 2001 года.Схема DTD предоставляет шаблон разметки документа, в котором указываются наличие, порядок следования и расположение элементов и их атрибутов в документе XML.
В рамках DTD модель содержимого XML документа можно описать следующим образом:
(рис 9.2) Модель содержимого для XML документа Каждый элемент документа может иметь один из типов:
| Содержание | Синтаксис | Комментарий |
|---|---|---|
| Данные | <!ELEMENT имя (#PCDATA)> |
Содержит только текстовые данные |
| Другие элементы | <!ELEMENT имя (дочерний элемент 1, дочерний элемент 2)> |
Содержит только дочерние элементы |
| Смешанное | <!ELEMENT имя (#PCDATA, дочерний элемент)*> |
Содержит комбинацию текстовых данных и дочерних элементов |
EMPTY |
<!ELEMENT имя EMPTY> |
Ничего не содержит |
ANY |
<!ELEMENT имя ANY> |
Может содержать текстовые данные или дочерние элементы |
Атрибуты, находящиеся внутри тэгов документа, описываются отдельно с помощью синтаксиса:
<!ATTList имя_элемента имя_атрибута1 (тип) значение_по_умолчанию …………………………………………………………………………………... имя_элемента имя_атрибутаN (тип) значение_по_умолчанию >
При этом атрибут в DTD может иметь один из трех типов:
Кроме типа атрибута можно также задавать и его модальность:
| Значение | Описание |
|---|---|
#REQUIRED |
Атрибут обязательно должен быть указан |
#FIXED |
Значение атрибута не должно отличаться от указанного |
#IMPLIED |
Необязательное значение |
Рассмотрим в качестве примера описание атрибутов строкового типа для элемента, описывающего некоторое сообщение:
<!ATTLIST message
number CDATA #REQUIRED
date CDATA #REQUIRED
from CDATA #FIXED
status CDATA #IMPLIED>
Если этот элемент содержит атрибуты с перечислением, то их описание может выглядеть, например, следующим образом:
<!ATTLIST message
number ID #REQUIRED
from CDATA #REQUIRED
alert (low | normal | urgent) "normal">
Маркированных атрибуты элемента могут быть четырех типов:
| Значение | Описание |
|---|---|
ID |
Уникальный идентификатор элемента (начинается с буквы, двоеточия или подчеркивания) |
|
Ссылка на элемент, содержащий атрибуты ID |
ENTITIES |
Ссылка на внешний элемент |
NMTOKEN |
Содержит буквы, цифры, точки, знаки подчеркивания, переносы, двоеточия, но не пробелы |
И, наконец, в DTD можно использовать следующие индикаторы вхождения последовательностей:
| Символ | Пример | Описание |
|---|---|---|
| , | (a, b, c) |
Последовательное использование элементов списка |
| | | (a | b | c) |
Используется один из членов списка |
date |
Используется один и только один элемент | |
| ? | subject? |
Необязательное использование (0 или 1 раз) |
| + | paragraph+ |
Используется один или несколько раз |
| * | brother* |
Используется ноль или несколько раз |
В качестве примера приведем DTD схему, описывающую структуру электронного почтового ящика:
<!ELEMENT mailbox (message*)> <!ELEMENT message (head, body)> <!ATTLIST message uid CDATA #REQUIRED> <!ELEMENT head ( from,to+, subject?, CC*, notify?) > <!ELEMENT from (#PCDATA)> <!ELEMENT to (#PCDATA)> <!ELEMENT subject (#PCDATA)> <!ELEMENT CC (#PCDATA)> <!ELEMENT notify EMPTY> <!ELEMENT body (#PCDATA)>
Исходный XML документ, удовлетворяющий данной схеме, может выглядеть, например, так:
<?xml version="1.0" ?>
<!DOCTYPE mailbox SYSTEM "mailbox.dtd">
<mailbox>
<message uid="1">
<head>
<from>user1@myhp.edu</from>
<to>user2@myhp.edu</to>
<subject>Re:</subject>
</head>
<body>
What's up!
</body>
</message>
<message uid="2">
<head>
<from>user3@myhp.edu</from>
<to>user2@myhp.edu</to>
<subject>Remind</subject>
<CC> user1@myhp.edu </CC>
<notify/>
</head>
<body>
Remind me about meeting.
</body>
</message>
</mailbox>
Обратите внимание на 2-ю строчку документа, в которой указывается DTD схему.
В принципе, DTD допускает два способа использования в XML документе.
<!DOCTYPE корневой_элемент [ <!ELEMENT корневой_элемент (модель содержания)> ]>
<!DOCTYPE корневой_элемент SYSTEM "name.DTD">
В заключение укажем на следующие недостатки DTD схем:
XML. Требуется изучение совершенно другого языка.XML, поэтому их нельзя легко расширить или преобразовать к другим языкам разметки - HTML или DHTML .XML.XML-Data - полное имя языка описания схем, предложенного Майкрософт, а XML -Data - это экземпляр XML, т.е. соответствует всем синтаксическим правилам и стандартам XML.
Реализуя проверки данных на уровне документа с помощью схемы, приложения, генерирующие и принимающие транзакции, можно оптимизировать для обеспечения максимального быстродействия. Соответствие полей и правильность записей проверяются на уровне экземпляров XML.
Корневым элементом в схеме всегда является элемент Schema:
<Schema name="имя_схемы"
xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<-- Объявления других элементов -->
</Schema>
Элемент ElementType имеет синтаксис:
<ElementType
content="{empty | texOnly | eltOnly | mixed}">
dt:type "datatype"
model="{open | closed}"
name = "idref"
order="{one | seq | many}"
>
Элемент ElementType может иметь следующие атрибуты:
| Имя атрибута | Описание |
|---|---|
name |
Имя элемента |
content |
Содержание элемента. Допустимые значения: empty (пустой элемент), eltOnly (может быть только контейнером для других элементов), textOnly (только текстовые данные), (смешанные данные). |
dt:type |
Тип данных элемента |
model |
Может принимать значения: Open - разрешено использовать элементы, не определенные в схемеClosed - запрещено использовать элементы, не определенные в схеме |
order |
Порядок следования дочерних элементов в экземпляре one - предполагается наличие одного документаmany - любое количество элементов в любом порядкеseq - элементы указываются в строго заданном порядке |
В качестве дочерних элементов для ElementType можно использовать следующие:
| Имя элемента | Описание |
|---|---|
element |
Объявляет дочерний элемент |
description |
Обеспечивает описание элемента ElementType |
|
Обеспечивает тип данных элемента ElementType |
group |
Определяет порядок следования элементов |
AttributeType |
Определяет атрибут |
attribute |
Определяет сведения о дочернем элементе AttributeType |
Для объявления атрибутов используется синтаксис:
<AttributeType
default="default-value"
dt:type="primitive-type"
dt:values="enumerated-values"
name="idref"
required="{yes|no}"
>
В свою очередь элемент AttributeType может иметь атрибуты:
| Значение | Описание |
|---|---|
default |
Значение по умолчанию |
dt:type |
Один из следующих типов: entity, entities, |
dt:values |
Допустимые значения |
name |
Имя атрибута |
required |
Указывает на обязательное наличие атрибута в описании |
Синтаксис для описания элемента attribute выглядит следующим образом:
<attribute
default="default-value"
type="attribute-type"
[required="{yes|no}"
]>
а его возможные значения могут быть такими:
| Значение | Комментарий |
|---|---|
default |
Значение по умолчанию |
type |
Имя элемента AttributeType, определенного в данной схеме. Должно соответствовать атрибуту name элемента AttributeType |
required |
Указывает на обязательное наличие атрибута в описании |
В отличие от DTD схем поддерживает типы данных. Элемент Schema имеет следующий атрибут:
Xmlns:dt="urn=schemas-microsoft-com:datatypes"
С полным списком типов данных можно ознакомится на странице по адресу: http://msdn.microsoft.com/en-us/library/ms256121(VS.85).aspx
Индикаторы вхождения в схемах имеют синтаксис:
<element
type="element-type"
[minOccur="{0|1}"]
[maxOccur="{1|*}"]
>
схема позволяет определять группы содержания. Так, в элементе ElementType может содержаться элемент group, имеющий синтаксис:
<group order="(one|seq|many)" minOccur="(0|1)" maxOccur="(1|*)">
<element type="ElementType/">
<element type="ElementType/">
<element type="ElementType/">
<element type="ElementType/">
</group>
В заключение приведем пример схемы, описывающей структуру XML документа, содержащего письма электронной почты:
<?xml version = "1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">
<xsd:element name="m_box">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="message" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="message">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="head" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="body" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="uid" use="required" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="head">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="to" minOccurs="1" maxOccurs="unbounded"/>
<xsd:element ref="from" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="date" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="subject" minOccurs="1" maxOccurs="1"/>
<xsd:element ref="cc" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="to" type="xsd:string"/>
<xsd:element name="from" type="xsd:string"/>
<xsd:element name="date" type="xsd:string"/>
<xsd:element name="subject" type="xsd:string"/>
<xsd:elememt name="cc" type="xsd:string"/>
</xsd:schema>
Так же как DTD схема определяет допустимые строительные блоки XML документа.
:
Предполагается, что в перспективе DTD схемы будут замещены в большинстве веб-приложений поскольку :
XML. стала 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 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>Встреча</heading> <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>Встреча</heading> <body>Позвони мне завтра утром</body> </mail>
Здесь строка
xsi:schemaLocation=" http://www.myhp.edu mail.xsd">
указывает на местоположение файла схемы.
Синтаксис для определения простого элемента:
<xs:element name="xxx" type="yyy"/>
где xxx - имя элемента и yyy тип данных элемента.
xs:string xs:decimal xs:integer xs:boolean xs:date xs: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:string xs:decimal xs:integer xs:boolean xs: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 элементов называются фасетами.
Список возможных ограничений приводится ниже:
| Ограничение | Описание |
|---|---|
|
Определяет список допустимых значений |
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>
Сложный элемент в схеме можно определить следующим образом:
<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>
Поскольку дочерние элементы " и " окружены индикатором <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>
Пустой сложный элемент не может иметь содержимого, только атрибуты.
С помощью специальных индикаторов можно указывать, как элементы могут использоваться в документах.
Всего используется семь индикаторов:
Order ):All Choice Sequence Occurrence ):maxOccurs minOccurs Group ) индикаторы:Group name attributeGroup name Пример:
<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>
Для проверки действительности ).
Для проверки схем также существуют специальные валидаторы, например ).
Следует отметить, что согласно спецификации W3C любая программа должна прекратить обработку XML документа, как только будет обнаружена ошибка в этом документе.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.