Введение в XML. Структура XML документа
XML Schema
Так же как DTD схема XML Schema определяет допустимые строительные блоки XML документа.
- элементы, входящие в документ
- атрибуты, допустимые в документе
- дочерние элементы
- порядок дочерних элементов
- количество дочерних элементов
- может ли элемент быть пустым или может содержать текст
- типы элементов и атрибутов
- фиксированные и значения по умолчанию элементов и атрибутов
Предполагается, что в перспективе DTD схемы будут замещены XML Schema в большинстве веб-приложений поскольку XML Schema:
- Расширяема для будущих добавлений.
- Более богатые и мощные выразительные возможности.
- Является реализацией XML.
- Поддерживает типы данных.
- Поддерживают пространства имен.
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>Встреча</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"/>