Перейти к содержимому

Как создать xsd схему из xml

  • автор:

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

Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

Функция Создание образца XML создает образец XML-файла на основании файла XML-схемы (XSD).

Этот пункт можно использовать в следующих случаях.

  • Чтобы понять, как использовать различные конструкции в данной схеме.
  • Чтобы убедиться в том, что схема функционирует должным образом.

Функция Создание образца XML доступна только для глобальных элементов и требует, чтобы набор схем XML был допустимым.

С помощью этой функции обычно создаются допустимые XML-документы. Однако, если схема содержит одно или несколько из следующих ограничений, образец может быть недопустимым.

  • Ограничения удостоверения xs:key , xs:keyref и xs:unique .
  • Аспекты xs:pattern .
  • Перечисления типа xs:QName .
  • Типы xs:ENTITY , xs:ENTITIES и xs:NOTATION .

Также заметьте, что содержимое xs:base64Binary будет создано, только если в схеме есть перечисления для этого типа.

Создание экземпляра XML-документа на основе XSD-файла.

  1. Выполните действия, описанные в разделе «Практическое руководство. Создание и изменение файла схемы XSD».
  2. В обозревателе схемы XML щелкните правой кнопкой мыши глобальный элемент PurchaseOrder , а затем выберите пункт Создать образец XML. Если выбран данный параметр, файл PurchaseOrder.xml со следующим образцом XML-содержимого будет создан и открыт в редакторе XML:
   name1 street1 city1 state1 1  name2 street2 city2 state2 -79228162514264337593543950335  name1 street1 city1 state1 1   

Создание и изменение файла схемы XSD

Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

Данный раздел описывает процесс создания нового файла XML-схемы (XSD) и добавления содержимого в XSD-файл.

Создание нового файла XML-схемы

  1. В Visual Studio откройте меню Файл и последовательно выберите пункты Создать>Файл. Или используйте клавиши CTRL+N.
  2. В диалоговом окне Создать файл выберите пункт Схема XML и нажмите кнопку Открыть. Будет создан новый файл. В Visual Studio откроется начальное представление и пустое окно Обозреватель схемы XML.

Редактирование файла

  1. Щелкните ссылку Используйте редактор XML для просмотра и изменения файла схемы XML в начальном представлении. Откроется редактор XML с новым файлом.
  2. Скопируйте пример кода XML-схемы из Схемы заказа на покупку и вставьте его вместо кода, добавленного в новый XSD-файл по умолчанию. Обозреватель схемы XML будет обновлен новым набором схем.

Пример XML схемы

В этой главе будет показано, как писать XML схемы. Также вы узнаете, что схемы можно писать разными способами.

XML документ

Давайте посмотрим на следующий XML документ под названием «shiporder.xml»:

   John Smith Ola Nordmann 
Langgt 23
4000 Stavanger Norway
Empire Burlesque Special Edition 1 10.90 Hide your heart 1 9.90

Приведенный выше XML документ состоит из корневого элемента shiporder с обязательным атрибутом orderid. Элемент shiporder содержит три дочерних элемента: orderperson, shipto и item. Элемент item используется дважды и содержит элемент title, необязательный элемент note, а также элементы quantity и price.

Строка xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» говорит XML парсеру, что этот документ должен быть проверен на соответствие схеме. Строка xsi:noNamespaceSchemaLocation=»shiporder.xsd» указывает, где именно находится схема (в данном случае она находится в той же папке, что и файл «shiporder.xml»).

Создание XML схемы

Теперь для приведенного выше XML документа создадим XML схему.

Создадим новый файл, который назовем «shiporder.xsd». Для создания XML схемы будем просто следовать за структурой XML документа и определять каждый встреченный элемент. Начнем со стандартной XML декларации, за которой опишем элемент xs:schema, который и определяет саму схему:

Здесь мы используем стандартное пространство имен (xs) и URI, ассоциированный с этим пространством имен, который имеет стандартное значение http://www.w3.org/2001/XMLSchema.

Теперь мы должны определить элемент shiporder. У этого элемента есть атрибут, и он содержит другие элементы, поэтому мы рассматриваем его как элемент составного типа. Определения дочерних элементов элемента shiporder поместим в декларацию xs:sequence, что задает жесткую последовательность подэлементов:

Теперь определим элемент orderperson, который будет простого типа (так как он не содержит ни атрибуты, ни другие элементы). Его тип (xs:string) имеет префикс пространства имен, ассоциированного с XML схемой, что указывает на использование предопределенного типа данных:

Теперь нам нужно определить два элемента составного типа: shipto и item. Начнем с определения элемента shipto:

При помощи схем мы можем определить число возможных вхождений любого элемента. В этом нам помогут атрибуты maxOccurs и minOccurs. Атрибут maxOccurs задает максимальное число вхождений элемента, а атрибут minOccurs задает минимальное число вхождений. По умолчанию значение обоих атрибутов равно 1.

Теперь определим элемент item. Этот элемент может использоваться неограниченное число раз внутри элемента shiporder. Определить такую особенность элемента item позволяет присваивание атрибуту maxOccurs значения «unbounded». Это означает, что элемент item может использоваться столько раз, сколько нужно автору документа. Обратите внимание, что элемент note опционален. Определим это установив атрибут minOccurs в нулевое значение:

Теперь мы можем декларировать атрибут элемента shiporder. Поскольку это обязательный атрибут, используем определение use=»required».

Примечание: Атрибуты должны всегда декларироваться последними:

Вот полный код файла схемы «shiporder.xsd»:

Разделение схемы

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

Следующий способ компоновки схемы заключается в том, что сначала определяются все элементы и атрибуты, а затем на эти определения создаются ссылки при помощи атрибута ref.

Ниже приводится новая компоновка файла схемы («shiporder.xsd»):

Использование поименованых типов

Третий способ компоновки схемы предполагает определение классов или типов, которые позволяют повторное использование определений элементов. Это становится возможным, если дать имена элементам simpleTypes и complexTypes, а затем указать на них при помощи атрибута type.

Третий способ компоновки файла схемы («shiporder.xsd»):

Элемент restriction указывает на то, что тип данных является производным от типов данных из пространства имен W3C XML Schema. Таким образом, следующий фрагмент кода означает, что значение элемента или атрибута должно быть строковым:

Однако гораздо чаще элемент restriction используется для накладывания ограничений на элементы. Посмотрите на следующие строки из приведенной выше схемы:

Этот фрагмент кода указывает, что значение элемента или атрибута должно быть строковым, ровно шесть символов в длину, и этими символами должны быть цифры от 0 до 9.

XSD — умный XML

XSD — это язык описания структуры XML документа. Его также называют XML Schema. При использовании XML Schema XML парсер может проверить не только правильность синтаксиса XML документа, но также его структуру, модель содержания и типы данных.

Такой подход позволяет объектно-ориентированным языкам программирования легко создавать объекты в памяти, что, несомненно, удобнее, чем разбирать XML как обычный текстовый файл.

Кроме того, XSD расширяем, и позволяет подключать уже готовые словари для описания типовых задач, например веб-сервисов, таких как SOAP.

Стоит также упомянуть о том, что в XSD есть встроенные средства документирования, что позволяет создавать самодостаточные документы, не требующие дополнительного описания.

Рассмотрим в качестве примера XSD документ, описывающий часть структуры аккаунта на хабре.

Текст XSD схемы и XML документ, соответствующий этой схеме я не стал включать в статью из-за их размера.

Первая строчка схемы указывает, что документ является XML документом и использует кодировку UTF-8.

Со следующей строки начинается описания главного элемента документа — habra_user.
Строки, документирующие элемент:

< xs:annotation >
< xs:documentation >Главный элемент схемы. Описывает пользователя хабра

Тег описывает «сложный» тип данных user_name. При желании его можно вынести как отдельный тип данных, по аналогии с contact_info. Для этого, нужно блок перенести в и указать атрибут name, а элементу задать атрибут type.

Элементы user_name, first_name, last_name имеют строковый тип и описывают пользователя, имя и фамилию владельца аккаунта.

Элемент date_of_birth имеет тип данных «дата» и описывает дату рождения.

Дату регистрации описывает register_date, имеющий собственный тип данных customDateTime. Значение этого тега будет задаваться с помощью атрибута value. На это указывают строки.

При этом атрибут — обязательный. Чтобы значение соответствовало требованиям, опишем «проверки»:

В таком случае длина строки будет всегда 19, это задано тегом и само значение будет соответствовать шаблону, указанным в теге .

Элементы contact_info и blog — массивы, на это указывает атрибут maxOccurs=«unbounded».

Тег определяет то, что вложенным элементом будет один из элементов ICQ или linkedin.

Тег указывает на то, что вложенные элементы будут blog_name и blog_url именно в такой последовательности. Если последовательность не важна, то нужно использовать тег .

Дополнительно о XSD схемах можно почитать Wikipedia и W3C. Для создания макета была использована программа Altova XMLSpy.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *