Шаг 169 - XML Schema Definition

Данные и связь между ними можно описать с помощью XML(не все конечно). С помощью XML Schema Definition можно определить структуру и типы данных для XML документа(но это пока, что всё находится в разработке, а пока рассмотрим то, что описано в SDK2).

Итак XSD schema(не могу перевести на русский) содержит элемент верхнего уровня "shema", который должен включать следующее пространство имён:

http://www.w3.org/2001/XMLSchema

Этот элемент может содержать определение типов(simpleType или complexType)

attribute и element 	- объявление.
simpleType 		- обычный простой элемент не содержащий других
complexType 		- может содержать другие элементы

Атрибуты minOccurs и maxOccurs определяют минимальное и максимально вхождение. Попробуем теперь описать нашу "базу". Прежде всего объявим нашу схему

<xsd:schema id="LeoDataSet" targetNamespace="" xmlns=""
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

Далее объявим наш DataSet

<xsd:element name="ExampleDataSet" msdata:IsDataSet="true" msdata:Locale="ru-RU">
 <xsd:complexType>
  <xsd:choice maxOccurs="unbounded">

Видим, что тип составной содержит другие элементы. Далее опишем в нём таблицы, я приведу пример небольшой только, остальной посмотрите в исподниках

<xsd:element name="Customers">
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element name="customer_id" msdata:AutoIncrement="true"  type="xsd:int" minOccurs="0" />
   <xsd:element name="name" msdata:ReadOnly="true"  type="xsd:string" minOccurs="0" />
  </xsd:sequence>
 </xsd:complexType>
</xsd:element>

Всё довольно таки просто как мы видим. Теперь приступим к описанию ключей и ссылок. Опишем, что в таблице Customers customers_id это уникальное поле

<xsd:unique name="Constraint1">
  <xsd:selector xpath=".//Customers" />
  <xsd:field xpath="customer_id" />
</xsd:unique>

И осталось описать foregein key

<xsd:keyref name="orders" refer="Constraint1">
 <xsd:selector xpath=".//Orders" />
 <xsd:field xpath="customer_id" />
</xsd:keyref>

Полей в keyref может быть несколько, и они могут иметь одинаковые значения, но они должны однозначно определять одну запись. Теперь весь этот файл откомпилируем с помощью утилиты xsd. Запустим её следующим образом

xsd /d имяфайла.xsd

Где ключ /d определяет, что генерироваться будет класс DataSet. Мы получили класс унаследованный от DataSet. Имеющий поля таблицы(те в свою очередь поля). Теперь подключим файл к нашему проекту и изменим тип нашего dataset на наш. В принципе дальше можно было всё оставить без изменений, но я там изменил так, чтобы мы обращались к таблицам и столбцам из полученного dataset как к полям, что гораздо удобнее.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Leonid Molochniy - 31.10.2001