|
Добрый день. Я сейчас прохожу курс повышения квалификации - "Профессиональное веб-программирование". Мне нужно получить диплом по этому курсу. Я так полагаю нужно его оплатить чтобы получить диплом о повышении квалификации. Как мне оплатить этот курс?
|
Введение в XML. Структура XML документа. Объектная модель DOM XML
Языки описания cхем XML
Идея создания собственных тэгов, имеющих специальное значение и помогающих описать содержание документа, сама по себе просто замечательна. Но если каждый пользователь может создавать свои собственные описания, каким образом их распознавать? С этой целью в спецификации XML для описания подобных "самодеятельных" тэгов используются схемы. Они необходимы для того, чтобы:
- описать, что именно является разметкой;
- описать точно, что означает разметка.
Наиболее известными языками описания схем являются следующие:
- DTD (Document Type Definition) - язык определения типа документов, который первоначально использовался в качестве языка описания структуры SGML-документа.
- XDR (XML Data Reduced) - диалект схемы XML, разработанный Microsoft, который поддерживался в Internet Explorer 4 и 5 версий.
- XML Schema или просто XSD (язык определения схем XML) - рекомендация консорциума W3C с 2001 года.
DTD схема
Схема DTD предоставляет шаблон разметки документа, в котором указываются наличие, порядок следования и расположение элементов и их атрибутов в документе XML.
В рамках DTD модель содержимого 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">
Маркированные атрибуты элемента могут быть четырех типов:
И, наконец, в 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.
XDR схема
XML-Data - полное имя языка описания схем, предложенного Майкрософт, а XML-Data Reduced - это "часть" полной рекомендации. Схема XDR - это экземпляр XML, т.е. соответствует всем синтаксическим правилам и стандартам XML.
Реализуя проверки данных на уровне документа с помощью схемы, приложения, генерирующие и принимающие транзакции, можно оптимизировать для обеспечения максимального быстродействия. Соответствие полей и правильность записей проверяются на уровне экземпляров XML.
Корневым элементом в схеме XDR всегда является элемент 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 (только текстовые данные), mixed (смешанные данные). |
| dt:type | Тип данных элемента |
| model | Может принимать значения: |
| Open - разрешено использовать элементы, не определенные в схеме | |
| Closed - запрещено использовать элементы, не определенные в схеме | |
| order | Порядок следования дочерних элементов в экземпляре XML. Допустимые значения: |
| one - предполагается наличие одного документа | |
| many - любое количество элементов в любом порядке | |
| seq - элементы указываются в строго заданном порядке. |
В качестве дочерних элементов для ElementType можно использовать следующие:
| Имя элемента | Описание |
|---|---|
| element | Объявляет дочерний элемент |
| description | Обеспечивает описание элемента ElementType |
| datatype | Обеспечивает тип данных элемента ElementType |
| group | Определяет порядок следования элементов |
| AttributeType | Определяет атрибут |
| attribute | Определяет сведения о дочернем элементе AttributeType |
Для объявления атрибутов используется синтаксис:
<AttributeType
default="default-value"
dt:type="primitive-type"
dt:values="enumerated-values"
name="idref"
required="{yes|no}"
>
В свою очередь элемент AttributeType может иметь атрибуты:
Синтаксис для описания элемента attribute выглядит следующим образом:
<attribute
default="default-value"
type="attribute-type"
[required="{yes|no}"
]>
а его возможные значения могут быть такими:
| Значение | Комментарий |
|---|---|
| default | Значение по умолчанию |
| type | Имя элемента AttributeType, определенного в данной схеме. Должно соответствовать атрибуту name элемента AttributeType |
| required | Указывает на обязательное наличие атрибута в описании |
В отличие от DTD схем XDR поддерживает типы данных. Элемент Schema имеет следующий атрибут:
Xmlns:dt="urn=schemas-microsoft-com:datatypes"
С полным списком типов данных можно ознакомится на странице по адресу: http://msdn.microsoft.com/en-us/library/ms256121(VS.85).aspx
Индикаторы вхождения в схемах XDR имеют синтаксис:
<element
type="element-type"
[minOccur="{0|1}"]
[maxOccur="{1|*}"]
>
XDR схема позволяет определять группы содержания. Так, в элементе 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>
В заключение приведем пример XSD схемы, описывающей структуру 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>

