XSD Schema. Особенности использования
В статье разберемся с XSD-схемой и посмотрим какую роль этот формат работы с документами играет в обработке XML.
Содержание:
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 xml:lang="en"> This Schema defines a W3Schools note! </xs:documentation> </xs:annotation> . . . </xs:schema>
Разобравшись с XSD более детально, становится понятно, что без него пользователю было бы очень неудобно работать с XML-документами.
Ну, а если вы хотите больше информации по рассматриваемой теме — вот несколько полезных ссылок на обучающие видеоролики, подробно объясняющие эту концепцию:


Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: