XML schema

Оглавление

Прошлый раз я писал про XML namespaces. Сегодня про XML Schema. Мне много приходится сталкиваться с SOAP-сервисами. Применительно к SOAP, XML Schema используется для описания структур данных в WSDL (Web Service Definition Language). Кроме того, XML Schema является современным форматом для описания структуры XML документа, более прогрессивным, чем DTD. Хранится XML схема в xsd — файлах, поэтому её часто называют просто XSD. Подробно про XML схема смотрите на http://www.w3schools.com/ или жмите на баннер ниже.

Пример XML schema:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="note">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="to" type="xs:string"/>
      <xs:element name="from" type="xs:string"/>
      <xs:element name="heading" type="xs:string"/>
      <xs:element name="body" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

</xs:schema>

За что отвечает XML Schema?

  • определяет элементы, которые могут применяться в документе
  • определяет аттрибуты которые могут применяться в документе
  • определяет дочерние элементы
  • определяет порядок дочерних элементов
  • определяет число дочерних элементов
  • определяет должен ли элемент быть пустым или может включать текст
  • определяет типы данных для элементов и аттрибутов
  • определяет default-ные и фиксированные значения для элементов и аттрибутов

Простейший XML

<?xml version="1.0"?>
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

Cоответствующая ему XML схема

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">

<xs:element name="note">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="to" type="xs:string"/>
      <xs:element name="from" type="xs:string"/>
      <xs:element name="heading" type="xs:string"/>
      <xs:element name="body" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

</xs:schema> 

Элемент note является комплексным типом (complex), поскольку включает другие элементы (to, from, heading, body). В свою очередь (to, from, heading, body) — элементарные типы, поскольку не содержат других элементов. Все дочерние элементы у note строкового типа.

Если для документа создана XML schema, она может использоваться для проверки соответствия документов схеме. Для этого схема может указываться в заголовке документа.

<?xml version="1.0"?>

<note
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note> 

Как видно из примера выше, схема задается аттрибутом schemaLocation из namespace «http://www.w3.org/2001/XMLSchema-instance&#187;. Про namespace-ы см. предыдущий пост.

Корневой элемент XML Schema

<schema>
<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
...
...
</xs:schema> 

У элемента <schema> могут быть описаны несколько аттрибутов:

  • xmlns:xs=»http://www.w3.org/2001/XMLSchema&#187; — namespace в котором должна описываться схема
  • targetNamespace=»http://www.w3schools.com&#187; — namespace, в котором будет описана результирующая структура
  • xmlns=»http://www.w3schools.com&#187; — default namespace (namespace для всех тегов, для которых не указан никакой namespace).
  • elementFormDefault=»qualified» — indicates that any elements used by the XML instance document which were declared in this schema must be namespace qualified

Ссылка на схему из XML документа

Приведенный ниже документ ссылается на схему. Ссылка на схему задается атрибутами корневого элемента документа.

<?xml version="1.0"?>

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

<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note> 
  • xmlns=»http://www.w3schools.com&#187; — default namespace
  • xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance&#187; — namespace для схемы
  • xsi:schemaLocation=»http://www.w3schools.com note.xsd» — ссылка на схему, состоит из 2 частей. Первое значение — namespace заданный для документа в схеме, второе поле — собственно местоположение схемы, где её брать.

Другие описания XML schema на русском

Продолжение следует…

Реклама

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s