xml схема

XML схемы (часть 1)

Перед загрузкой любого xml документа встает проблема валидации. В XML есть несколько уровней корректности документа: ненарушение синтаксиса, валидация (документ соответствует своей грамматике). Для этого служит DTD (см. предыдущую статью). Но DTD сегодня считается устаревшим способом проверки. Хоть он и применяется сегодня, но по сути давно уже уступил место другому стандарту — XML схемам.Почему постепенно отказываются от DTD? У него есть ряд недостатков:

  • сам по себе dtd не является xml, т.е. у него отличный от xml синтаксис языка.
  • Нет проверки типов данных.
  • Нельзя поставить документу в соответствие 2 и более DTD описаний (актуально для составных документов).

И в конце 90-х гг. консорциум w3.org начал работу над новым стандартом. И к 2003г. стандарт был готов и назван ‘xml схема’.

XML схема — это способ описания грамматики какого-то документа. На деле схемы оказались гораздо функциональнее, чем просто описание документа. На сегодня схемы могут описывать любые данные (вплоть до баз данных и объектов с классами). Сегодня схемы стали основным способом описания данных в xml.

XML схема описывает:

  • Словарь (что и с какими именами у вас есть, если это база данных — описание таблиц и колонок, если это xml документ — описываются названия атрибутов и элементов, если это программирование — как называются классы и свойства).
  • Модель содержания (что во что входит, т.е. отношения между элементами и атрибутами и их структура).
  • Типы данных — базовые (встроенные) и созданные вами.

Для любой схемы указывается пространство имен:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
//или так
<xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="examle.xsd">

Элементы XML схемы

Разберем устройство схемы на примере:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <xsd:annotation>
      <xsd:documentation>
         Схема
      </xsd:documentation>
   </xsd:annotation>
</xsd:schema>

Сама схема представляет из себя xml файл.

  • Корневой элемент schema и пространство имен.
  • Блоки документации — описание схемы.

Можно 1 раз написать схему и использовать ее много раз в различных ситуациях.

Описание элементов схемы

Все элементы схемы описываются с помощью конструкции:

<xs:element name="apple" type="xs:string"/>
<xs:element name="price" type="xs:integer"/>

Т.е. пишем имя элемента, а затем тип данных — строка, число и т.д. Причем, если один элемент находится внутри другого элемента, то он наследует его тип данных (как в программировании).

Соответствие схемы и документа

Нет жесткой привязки документа и схемы (в отличие от DTD). Привязка документ-схема делается не в документе. Это делает ваша программа, т.е. в документе не надо указывать ссылку на схему.

Привязка схемы к документу происходит по пространству имен. Сама схема определяет пространство имен нашего документа, а не конкретный документ. Если нужно привязаит схему к нескольким документам, то в схеме прописываем пространство имен, соответствующее каждому документу:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   targetNamespace="http://www.phpmove.ru"
   xmlns="http://fruit.com"
   xmlns:apple="http://apple.com"
   xmlns:orange="http://orange.com">

В самом документе упоминания об xml схеме может и не быть. Часто это так и происходит. Но в документе может быть декларативное описание, где рекомендуется посмотреть эту схему (типа подсказки). Но это не значит, что документ будет обязательно оттуда брать эту схему:

<my:fruit xmlns:my="http://www.fruit.com"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.fruit.com/fruit.xsd">

Т.е. мы просто при помощи schemaLocation указываем полный путь к нашей схеме.

В то же время сам документ может не принадлежать ни к какому пространству имен. Тогда используют noNamespaceSchemaLocation (необязательный атрибут). Т.е. в коде ниже указываем, где взять схему без привязки к пространству имен:

<xsi:noNamespaceSchemaLocation="www.phpmove.ru/example.xsd">

Атрибут noNamespaceSchemaLocation нужен для валидатора, чтобы он знал, где брать схему.

Типы данных в xml схеме

Все типы данных делятся на простые и сложные типы. Простые:

  • int — 1234567.
  • integer — 123456.
  • short — 1234.
  • long — 1234567865432345678.
  • decimal — 1,234.
  • double — 1,2222.
  • float — 1,2222.
  • string — строка.
  • name — Evgeny.
  • Qname — doc:Data (квалификационное имя, например, имя пространства имен).
  • AnyURI — какой-то url адрес.
  • base64Binary — строка, в которую предполагается загонять бинарные данные после сериализации в base64.
  • Date — дата (2012-09-27).
  • DateTime — дата и время.
  • Time — время (22:42:00.000).
  • ID — идентификатор.



Добавить комментарий

Ваш e-mail не будет опубликован.