← Все гайды

Пример XML по XSD: как сгенерировать документ из схемы

· 2 мин чтения

XSDXML

Как получить пример XML-документа по схеме XSD — с обязательными и необязательными элементами, атрибутами, перечислениями и подключёнными схемами.

Пример документа нужен, чтобы показать партнёру формат, подготовить тестовый запрос к SOAP-сервису или проверить, что схема описывает то, что задумано.

Как получить пример

  1. Откройте схему в редакторе XSD.
  2. Выберите Файл → Преобразовать в → XML — пример документа.
  3. Откройте результат в песочнице XML или сохраните в проект рядом со схемой.
Пример XML, построенный по схеме XSD
Пример документа по схеме: значения подобраны по типам

Как строится пример

  • Корень — первый глобальный элемент схемы (если их несколько, окно об этом предупредит).
  • Включаются все элементы и атрибуты — и обязательные, и необязательные, по одному разу, чтобы была видна полная структура.
  • Значения подбираются по типу: число, дата, true; для перечисления — первое значение; fixed и default берутся из схемы.
  • Для xs:choice берётся первый вариант, а перед ним — комментарий со всеми вариантами выбора.
  • Наследование (xs:extension) учитывается: сначала элементы базового типа, затем собственные.
  • Пространство имён: при elementFormDefault="qualified" — xmlns="…" у корня, иначе префикс только у корневого элемента.

Подключённые схемы

Если схема подключает другие файлы через xs:include или xs:import, а хранится в проекте, эти файлы найдутся по относительному пути и их типы попадут в пример. В песочнице связанных файлов нет — окно предупредит, а типы из них заменятся строками.

Проверьте пример

Пример строится по простым правилам и может не пройти ограничения xs:pattern или xs:length. Проверьте его по той же схеме («Проверка XML по XSD») и поправьте значения, на которые укажет валидатор.

Пример

<xs:element name="order">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="status">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="NEW"/>
            <xs:enumeration value="PAID"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="total" type="xs:decimal"/>
      <xs:element name="comment" type="xs:string" minOccurs="0"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:int" use="required"/>
  </xs:complexType>
</xs:element>

Пример документа:

<order id="1">
  <status>NEW</status>
  <total>10.5</total>
  <comment>строка</comment>
</order>

Вопросы и ответы

Как получить пример для другого корневого элемента? Пример строится для первого глобального элемента. Временно переставьте нужный элемент первым в схеме (или в копии схемы) и повторите.

Можно ли получить SOAP-конверт целиком? Пример строится для элемента схемы — тела сообщения. Оберните его в soap:Envelope/soap:Body вручную.