Рубріки: Теория

XSD Schema. Особенности использования

Денис Бородовский

В статье разберемся с XSD-схемой и посмотрим какую роль этот формат работы с документами играет в обработке XML.

Источник: risovach.ru

Содержание:
1. Что такое XSD?
2. История появления XSD
3. Что использовать для открытия файла с расширением .xsd?
4. Заметки к схеме XSD
5. Пространства имен для заметок

1. Что такое XSD?

Чтобы понять XSD, сначала поговорим об XML.

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

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

Официально XSD — это определение схемы XML (XML Schema Definition). Схема — это просто стандартный способ структурирования информации, некая совокупность слов и идей, помещенных в нужное место для лучшего восприятия написанного.

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

Именно по этим причинам в конечном итоге был разработан язык определения схемы XML или спецификация XSD.

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

  • Структура XML. Это информация о том, какие элементы находятся внутри других элементов, какие атрибуты имеет данный элемент, имеет ли элемент текст или подэлементы и прочее.
  • Атомарный тип данных. Он указывает тип данных в элементе или атрибуте например, строка, целое число, дата и прочее.
  • Ограничения. Здесь указывается диапазон значений содержащихся в элементе, атрибуте или шаблоне, которому должны соответствовать эти данные.
  • Описательные привязки. Они позволяют связать текстовые описания с тематическими метаданными, лучше описывающими семантику элемента или атрибута.
  • Альтернативные подсхемы. Позволяют определять наборы возможных групп элементовнапример, различие между блоками адресов Молдовы и Украины.

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

2. История появления XSD

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

С файлами XML появилась возможность большую часть этой работы выполнять автоматически. Проще всего это было сделать при помощи спецификации XSD набора правил для XML-документов, разработанной в 2001 году консорциумом World Wide Web. Чтобы долго не ходить вокруг да около, давайте рассмотрим на примерах преимущества такого подхода.

Вот как раньше создавали схемы XML с использованием классов на платформе .Net, при этом ничего не зная о XSD:

protected void Button1_Click ( object sender, EventArgs e)
    {
        // Имя DataSet становится корневым XML-элементом
        DataSet MyDataSet = new DataSet("Golfers"); 
 
        // блоки DataTable становятся элементами (строками) в XML-файле.
        DataTable MyDataTable = new DataTable("Golfer");
 
        MyDataSet.Tables.Add (MyDataTable);
 
        // Создаем атрибуты столбцов, чтобы иметь возможность
        // ссылаться напрямую в GridView
        MyDataTable.Columns.Add(new DataColumn("ID",
                                 typeof(System.Int32),
                                 null,                                                 MappingType.Attribute));
 
        MyDataTable.Columns.Add(new DataColumn("Name",
                                 typeof(String),
                                 null,
                                 MappingType.Attribute));

        MyDataTable.Columns.Add(new DataColumn("Birthday",
                                 typeof(DateTime),
                                 null,
                                 MappingType.Attribute));

 
        // Записываем XSD
        MyDataSet.WriteXmlSchema ( @ "C: \ GolfersSchema.xsd" );
 
        // Помещаем данные в таблицу
        DataRow TempRow;
        TempRow = MyDataTable.NewRow ();
        TempRow [ "ID" ] = 1;
        TempRow [ "Name" ] = "Бобби Джонс" ;
        TempRow [ "Birthday" ] = new DateTime (1902, 2, 22);
        MyDataTable.Rows.Add (TempRow);
 
        TempRow = MyDataTable.NewRow ();
        TempRow [ "ID" ] = 2;
        TempRow [ "Name" ] = "Сэм Снид" ;
        TempRow [ "Birthday" ] = new DateTime (1912, 4, 15);
        MyDataTable.Rows.Add (TempRow);
 
        TempRow = MyDataTable.NewRow ();
        TempRow [ "ID" ] = 3;
        TempRow [ "Name" ] = "Тайгер Вудс" ;
        TempRow [ "Birthday" ] = new DateTime (1975, 9, 28);
        MyDataTable.Rows.Add (TempRow);
 
        // Записываем данные
        MyDataSet.WriteXml ( @ "C: \ Golfers.xml" );
    }

А вот как это делают сейчас:

<? xml version = " 1.0 " standalone = " yes " ?>
< Golfers >
< Golfer ID = " 1 " Name = "Бобби Джонс" Birthday = " 1902-02-22 " />
< Golfer ID = " 2 " Name = "Сэм Снид" Birthday = " 1912-04-15" />
< Golfer ID = " 3 " Name = "Тайгер Вудс" Birthday  = " 1975-09-28 />
</ Golfers >

Ну а так выглядит сопутствующая XSD-схема.

Обратите внимание: вы всегда можете войти в нее и что-то подправить.

<? xml version = " 1.0 " standalone = " yes " ?>
< xs: schema id = " Golfers " xmlns = "" xmlns: xs = " http://www.w3.org/2001/XMLSchema " xmlns: msdata = " urn: schemas-microsoft-com: xml-msdata " >
  < xs: element name = "Golfers " msdata: IsDataSet = " true " msdata: UseCurrentLocale = " true " >
    < xs: complexType >
      < xs:choiceminOccurs="0"maxOccurs="unbounded">
        < xs: element name = "Golfer" >
          < xs: complexType >
            < xs: atribute name = " ID " type = " xs: int " />
            < xs: atribute name = " Name " type = " xs: string " />
            < xs: atribute name = " Birthday " type = " xs: dateTime " />
          </ xs: complexType >
        </ xs: element >
      </ xs: choice >
    </ xs: complexType >
  </ xs: element >
</ xs: schema >

Проверим, соответствует ли наш XML-документ приведенной схеме:

protected void Button2_Click (object sender, EventArgs e)
    {
        // Сначала прочтем схему XML
        DataSet MyDataSet = new DataSet();
        MyDataSet.ReadXmlSchema(@"C:\GolfersSchema.xsd");

 
        // Теперь читаем XML-файл 
        MyDataSet.ReadXml ( @ "C: \ Golfers.xml" );
 
        // Смотрим, как это выглядит в GridView
        GridView1.DataSource = MyDataSet;
        GridView1.DataBind ();
    }

3. Что использовать для открытия файла с расширением .xsd?

Документы имеющие расширение .xsd относятся к текстовым файлам, они похожи по формату на XML, поэтому на них распространяются те же правила открытия и редактирования. Для работы с ними сегодня есть много разных приложений.

Наиболее популярное ПО для рассматриваемого формата — Adobe Dreamweaver для ОС Windows и Elf Data XML Editor для ОС Mac — эти программы гарантированно открывают эти файлы.

4. Заметки к схеме XSD

Использование аннотаций или заметок в схемах XSD необходимо для сравнения их с таблицами, а также подключенных к ним баз данных.

Такую аннотированную схему называют схемой сопоставления. Она дает пользователю сведения о взаимодействии информации представленной в виде XML-документа с хранилищем и является, по сути, XML-представлением реляционных данных. Такой подход можно сравнить с комментированием кода в IDE.

5. Пространства имен для заметок

Такие заметки в XSD-схемах можно обозначить при помощи пространства имен, указанном в теге <xsd:schema>, например:

<xsd:schema xmlns:xsd="http://www.w3.org/2022/XMLSchema"   
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
...  
</xsd:schema>  

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

Пример схемы с заметками (annotation):

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

<xs:annotation>
<xs:appinfo>W3Schools Note</xs:appinfo>
<xs:documentation >


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

Ну, а если вы хотите больше информации по рассматриваемой теме — вот несколько полезных ссылок на обучающие видеоролики, подробно объясняющие эту концепцию:

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023