DataSet (Набор данных) и XML
Вот более русифицированная версия этого XML-документа:
<? xml версия = "1.0" автономный = "да"?> <AirlineBroker> <Авиалинии> <Название> Американский Запад </Название> <Сокращение> AW </Сокращение> <УзелWeb> www.americawest.com </УзелWeb> <ReservationNumber> 555-5Ь5-1212 </ReservationNumber> </Авиалинии> <Авиалинии> <Название> Дельта </Название> <Сокращение> DL </Сокращение> <Узeлweb> www.delta.com </УзeлWeb> <ReservationNumber> 800-456-7890 </ReservationNumber> </Авиалинии> <Рейсы> <Авиалиния> DL </Авиалиния> <FlightNumber> 987 </FlightNumber> <StartCity> Атланта </StartCity> <EndCity> Новый Орлеан </EndCity> <Вылет> 2001-10-05Т20:15:00.0000000-04:00 </Вылет> <Прибытие> 2001-10-05Т22:30:00.0000000-04:00 </Прибытие> <Тип самолета> 737 </Тип самолета> <F.L-(Cust> 1300 </FirstCost> <Bus _ncssCost> 0 </BusinessCost> <EconcmyCost> 450 </EconomyCost> </Рейс:> <Тип самолета> <Тип самолета>737</Тип самолета> <FirstClass> 10 </FirstClass> <BusinessClass> 0 </BusinessClass> <EconomyClass> 200 </EconomyClass> </Тип самолета> <Клиенты> <LastName> Адаме </LastName> <FirstName> Джон </FirstName> <EmailAddress> adams@presidents.org </EmailAddress> <CustomerId> 1 </CustomerId> </Клиенты> </AirlineBroker>
Исходя из этих данных, объект DataSet (Набор данных) создал схему и сохранил ее в файле Airlines.xsd. Дальше мы обсудим некоторые отрывки из этого файла. В нем нет информации о связях или первичных ключах какой бы то ни было таблицы, такой, как Airlines (Авиалинии) или Flights (Рейсы), по той простой причине, что они не были определены в исходной базе данных. Если вы просмотрите созданный файл, вы увидите, что в нем записана и информация о схеме данных таблицы Reservations (Резервирование), несмотря на то, что в этой таблице нет никаких данных.
В первой строке заголовка схемы определено название схемы (AirlineBroker). Кроме того, в нем определены два пространства имен, используемых в этой схеме документа. Одно пространство имен, названное xsd, содержит описание стандарта схемы XML. Второе, названное msdata, содержит описание от Microsoft.
<xsd:schema id="AirlineBroker" targetNamespace="" xmlns="" xmlns:xsd=http://www.w3.org/2001/XMLSchema xmlns:rns data="urn:schemas-microsoft-com:xml-msdata">
В следующей строке описывается элемент под названием AirlineBroker, имеющий атрибут, указывающий, что эта схема получена из объекта DataSet (Набор данных). Это атрибут в определениях Microsoft, а не в пространстве имен W3C Schema. Элемент AirlineBroker относится к составному (не скалярному) типу, т.е. является структурой, состоящей из элементов других типов. Такая структура может содержать произвольное количество элементов (или не содержать ни одного) любого типа, определенного в остальной части схемы.
<xsd:element name="AirlineBroker" msdata:IsDataSet="true"> <xsd:complexType> <xsd:choice maxOccurs="unbounded">
Далее описывается элемент, определяющий тип данных. Этот тип – тоже структура и потому относится к составному (не скалярному) типу, очередность элементов в котором совпадает с очередностью их определения в объекте DataSet (Набор данных). Так уж получилось, что все элементы, соответствующие столбцам таблицы базы данных, определены здесь как имеющие строковый тип string, причем их наличие не считается обязательным. В исходной таблице первичные ключи не определялись, а так как все эти строки в записях базы данных обязательны, объект DataSet (Набор данных) при преобразовании данных вывел и\ из набора таблиц, ограничений и связей, определенных в объекте DataSet (Набор данных) в момент преобразования.
<xsd: element r.ame = "Airlines"> <xsd:conplexType> <xsd:sequence> <xsd: element narre = "Kame" type="xsd:string" minOccurs="0" /> <xsd: element narr:e="Abbreviation" type="xsd:string" minOccurs="0" /> <xsd:element name="KebSite" rype="xsd:string" minOccurs="0" /> <xsd:element name="ReservationNumber" type="xsd:string" minOccurs="0" /> </xsd:sequence> </xsd:complexType> </xsd:element>
Таблица Flights (Рейсы) определена аналогичным образом. Кроме того, что в ней не определен первичный ключ, в ней нет и внешних ключей для столбцов Airline (Авиалиния) и Plane Type (Тип самолета).
<xsd: element na.me = "Fliqhts"> <xsd:complexType> <xsd:sequence> <xsd:element name="Airline" type="xsd:string" minOccurs="0" /> <xsd:element name="FlightNumber" type="xsd:int" rainOccurs="0" /> <xsd:element name="StartCity" type="xsd:string" minOccurs="0" /> <xsd:element name="EndCity" type="xsd:string" minOccurs="C" /> <xsd:element name="Derarture" type="xsd:dateTime" minOccurs="0" /> <xsd:element name="Arrival" type="xsd:dateTime" minOccurs="0" /> <xsd:element name="PlaneType" type="xsd:string" minOccurs="0" /> <xsd:element name="FirstCost" type="xsd:decimal" minOccurs="0" /> <xsd:element name="BusinessCost" type="xsd:decimal" minOccurs="0" /> <xsd:element name="EconomyCost" type="xsa:decimal" minOccurs="0" /> </xsd:sequence> </xsd: ccm,plexType> </xsd:element> </xsd:choice> </xsd:complexType> </xsd:element> </xsd:schema>
К этому определению схемы данных мы еще вернемся позже, а сейчас продолжим рассмотрение примера.