Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора.doc
Скачиваний:
20
Добавлен:
14.05.2015
Размер:
646.14 Кб
Скачать

Обработка ошибок

Чтобы установить системное прерывание по обнаружению ошибки, поместите оператор On Error туда, где вы хотите активизировать это системное прерывание.

Sub CausesAnError()

' Direct procedure flow.

On Error GoTo ErrorHandler

' Raise division by zero error.

Err.Raise 11

Exit Sub

ErrorHandler:

' Display error information.

MsgBox "Error number " & Err.Number & ": " & Err.Description

End Sub

Другая форма оператора On Error Resume Next передает управление оператору, следующему за оператором с ошибкой. Этот оператор приводится ниже.

Publ ic Function MyFunctionO

On Error Resume Next

If Err Then

обработка

End If

Exit Function

Resume возвращает управление программой оператору, вызвавшему ошибку, и пытается выполнить его снова. Если это приводит к повторной ошибке, то программа обработки ошибок сработает снова. Если вы используете оператор Resume, то лучше применить счетчик возникновения ошибки. По достижении неко­торого предела счетчика следует выйти из процедуры. Resume Next передает управление оператору, следующему за оператором, приведшим к ошибке. Вы мо­жете использовать этот прием только в том случае, если уверены, что ошибка — не критическая и может быть проигнорирована, или если ваш обработчик ошибок откорректирует ситуацию, вызвавшую ошибку.

Параметры процедур и функций.

Объявление:

Sub CalcFee(AcctTotal As Currency, ContractMonths As Integer)

Вызов:

CalcFee A, 24

Вы можете использовать ключевое слово Optional в определении процедуры или функции для указания того, что данный аргумент является необязательным. Необязательные (Optional) аргументы должны иметь тип Variant.

Sub CalcFee(AcctTotal As Currency, Optional ContractMonths As Variant)

Чтобы создать процедуру для работы с массивом аргументов, в объявлении процедуры используйте аргумент ParamArray, причем не определяя размера массива.

Public Function Calc_Order(ParamArray Сosts As Variant) As Currency

Задание свойств форм, отчетов и элементов управления в Visual BasicОбъекты Form, Report и Control являются объектами Microsoft Access. Свойства таких объектов можно задавать в процедурах Sub, Function или в процедурах обработки событий. Можно также задавать свойства разделов форм и отчетов.

Чтобы задать свойство формы или отчета

Укажите ссылку на конкретную форму или отчет в семействе Forms или Reports, за которой следуют имя свойства и его значение. Например, следующая программная строка задает для свойства Вывод на экран (Visible) формы «Customers» значение True (–1):

Forms!Customers.Visible = True

Свойства формы и отчета можно также задавать из модуля объекта с помощью свойства объекта Me. Программы, использующие свойство Me, выполняются быстрее, чем программы, использующие полные имена объектов. Например, следующая программная строка в модуле формы «Customers» определяет свойство Источник записей (RecordSource) формы «Customers» через инструкцию SQL, возвращающую все записи, в которых значение поля «CompanyName» начинается с «A»:

Me!RecordSource = "SELECT * FROM Customers " _

& "WHERE CompanyName Like 'A*'"

Чтобы задать свойство раздела формы или отчета

Укажите ссылку на форму или отчет в семействе Forms или Reports, за которой следует свойство Section и целое значение или константа, определяющая раздел. В следующем примере задается значение False для свойства Вывод на экран (Visible) верхнего колонтитула формы «Customers»:

Forms!Customers.Section(3).Visible = False

Me!Section(acPageHeader).Visible = False

Примечания

В справке по предметному указателю можно найти следующие сведения о каждом свойстве:

допускается ли задание этого свойства в программе Visual Basic;

режимы, в которых можно задавать свойство. Не все свойства можно задавать во всех режимах. Например, свойство формы Тип границы (BorderStyle) можно задавать только в режиме конструктора формы;

какие значения следует использовать для задания свойства. Часто значения некоторых свойств в программе Visual Basic, отличаются от значений, выбираемых в окне свойств. Например, если значение свойства выбирается из списка, необходимо использовать это значение или его числовой эквивалент.

Чтобы задать в программе Visual Basic стандартные значения свойств для элементов управления, следует использовать метод DefaultControl.

4.1 Механизмы доступа к информации, хранящейся в СУБД, из клиентских приложений. Технологии ODBC, OLE DB, ADO DB. Технология разработки программ, реализующих интерфейс доступа к Microsoft SQL Server с помощью среды Visual Studio.NET.

Механизмы доступа к информации, хранящейся в СУБД, из клиентских приложений. Существует несколько способов доступа к данным из средств разработки и клиентских приложений.

Подавляющее большинство систем управления базами данных содержит в своем составе библиотеки, предоставляющие специальный прикладной программный интерфейс (Application Programming Interface, API) для доступа к данным этой СУБД. Обычно такой интерфейс представляет собой набор функций, вызываемых из клиентского приложения. В случае настольных СУБД эти функции обеспечивают чтение/запись файлов базы данных, а в случае серверных СУБД инициируют передачу запросов серверу баз данных и получение от сервера результатов выполнения запросов или кодов ошибок, интерпретируемых клиентским приложением. Библиотеки, содержащие API для доступа к данным серверной СУБД, обычно входят в состав ее клиентского программного обеспечения, устанавливаемого на компьютерах, где функционируют клиентские приложения.

В последнее время Windows-версии клиентского программного обеспечения наиболее популярных серверных СУБД, в частности Microsoft SQL Server, Oracle, Informix, содержат также COM-серверы, предоставляющие объекты для доступа к данным и метаданным.

Использование клиентского API (или клиентских COM-объектов) является наиболее очевидным (и нередко самым эффективным с точки зрения производительности) способом манипуляции данными в приложении. Однако в этом случае созданное приложение сможет использовать данные только СУБД этого производителя, и замена ее на другую (например, с целью расширения хранилища данных или перехода в архитектуру <клиент-сервер>) повлечет за собой переписывание значительной части кода клиентского приложения - клиентские API и объектные модели не подчиняются никаким стандартам и различны для разных СУБД.

Другой способ манипуляции данными в приложении базируется на применении универсальных механизмов доступа к данным. Универсальный механизм доступа к данным обычно реализован в виде библиотек и дополнительных модулей, называемых драйверами или провайдерами. Библиотеки содержат некий стандартный набор функций или классов, нередко подчиняющийся той или иной спецификации. Дополнительные модули, специфичные для той или иной СУБД, реализуют непосредственное обращение к функциям клиентского API конкретных СУБД.

Отметим, что достоинством универсальных механизмов является возможность применения одного и того же абстрактного API, а во многих случаях - COM-серверов, компонентов, классов для доступа к разным типам СУБД. Поэтому приложения, использующие универсальные механизмы доступа к данным, легко модифицировать, если необходима смена СУБД. При этом нередко модификация затрагивает не код приложения как таковой, а настройки доступа к данным, содержащиеся в реестре или внешних файлах. Однако за подобную универсальность порой приходится платить невозможностью доступа к уникальной функциональности, специфичной для конкретной СУБД, снижением производительности приложений, а также усложнением процедуры поставки приложения - ведь в его состав нужно включать библиотеки, ответственные за реализацию универсальных механизмов, драйверы для тех или иных СУБД, а также обеспечивать настройки, необходимые для их правильного функционирования.

Наиболее популярными среди универсальных механизмов доступа к данным можно назвать следующие:

  • Open Database Connectivity (ODBC).

  • OLE DB.

  • ActiveX Data Objects (ADO).

  • Borland Database Engine (BDE).

Универсальные механизмы ODBC, OLE DB и ADO фирмы Microsoft представляют собой по существу промышленные стандарты. Что касается механизма доступа к данным BDE фирмы Borland, то он так и не стал промышленным стандартом, однако до недавнего времени применялся довольно широко, так как до выхода Delphi 5 был практически единственным универсальным механизмом доступа к данным, поддерживаемым средствами разработки Borland на уровне компонентов и классов.

Наиболее часто используемые в приложениях способы доступа к данным схематически изображены на рис. 1 (Возможные механизмы доступа к данным из приложений и средств разработки

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

  • Непосредственный вызов функций клиентского API (или обращение к COM-объектам клиентских библиотек).

  • Вызов функций ODBC API (или применение классов, инкапсулирующих подобные вызовы).

  • Непосредственное обращение к интерфейсам OLE DB.

  • Применение ADO (или применение классов, инкапсулирующих обращение к объектам ADO).

  • Применение ADO + OLE DB + ODBC.

  • Применение BDE + SQL Links (или применение классов, инкапсулирующих обращение к функциям BDE).

  • Применение BDE + ODBC Link + ODBC.

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

Технологии ODBC, OLE DB, ADO DB. (Open Database Connectivity) — открытый интерфейс баз данных.

Необходимость создания ODBC появилась вследствие того, что каждая фирма — разработчица СУБД использовала свой диалект SQL, что делало невозможным обмен данными между двумя БД различных форматов. Поэтому вначале был разработан общий стандарт на SQL, получивший название CLI (Common Language Interface). Затем каждая фирма разрабатывала драйвер перевода своего диалекта SQL в CLI и наоборот.

ODBC предназначена для обеспечения возможности взаимосвязи между различными SQL-совместимыми БД.

Технология ODBC предусматривает создание дополнительного уровня между приложением и используемой СУБД. В архитектуре ODBC используется один ODBC Driver Manager и несколько ODBC-драйверов, отвечающих за реализацию особенностей доступа к каждой отдельной СУБД.

Преимущества:

-простота разработки приложения;

-технология ODBC позволяет создавать распределенные гетерогенные приложения без учета конкретных СУБД, т.е. приложение становится независимым от СУБД.

Недостатки:

- снижение скорости доступа к данным, что связано с необходимостью трансляции запросов;

- увеличение время обработки запросов, что связано с введением дополнительного программного слоя;

- необходимы предварительная инсталляция и настройка ODBC-драйвера (указание драйвера СУБД, сетевого пути к серверу, базы данных и т.д.) на каждом рабочем месте. Параметры этой настройки являются статическими, т.е. приложение изменить их самостоятельно не может;

- предоставляет доступ только к реляционным SQL-ориентированным БД. OLE DB

Но данные в БД могут быть представлены в любом виде и формате (электронные таблицы, документы в rtf- формате, почтовые системы и т.д.).

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

Это требование и реализует технология OLE DB.

OLE DB ( Object Linking and Embedding Data Base) — технология, предоставляющее решение обеспечения СОМ-приложениям доступ данным независимо от типа источника данных.

В технологии OLE DB используется механизм провайдеров, под которыми понимают поставщиков данных.

Провайдер представляет собой компонент СОМ, позволяющий принимать вызовы OLE DB и выполнять все необходимое для обработки запроса к источнику данных. Провайдер возвращает запрашиваемый объект — обычно это данные в табличном виде.

Кроме поставщика данных имеются также сервис провайдеры, реализующие самые различные сервисные функции.

ADO, DAO

Технологии ODBC и OLE DB считаются хорошими интерфейсами передачи данных, но как программные интерфейсы имеют много ограничений, поскольку являются низкоуровневыми.

Для снятия этих ограничений была предложена технология ADO.

ADO (ActiveX Data Objects).

Данные технологии представляют собой высокоуровневые объектные модели (библиотеки функций) и создают еще один уровень абстракции между приложением и функциями ODBC и OLE DB.

Технология ADO представляет иерархическую модель объектов для доступа к различным OLE DB- провайдерам данных. Объектная модель ADO включает объекты, обеспечивающие соединение с провайдером данных, создание SQL-запросов к данным и т.д.

Модель объекта не содержит таблиц, среды. Здесь основными объектами являются:

- объект Набор данных;

- объект Соединение, создающий связь с провайдером данных;

-объект Команда — выполнение процедуры.

Особенностью технологии ADO является возможность ее использования в Интернет/Интранет-приложениях для доступа к различным источникам данных.

В целом технологию ADO можно охарактеризовать как наиболее современную технологию разработки приложении для работы с распределенными БД по технологии клиент-сервер.

Технология DAO предназначена преимущественно для создания БД с помощью СУБД MS Access, т.к. кроме замены функций ODBC она осуществляет также прямой доступ к функциям ядра MS Jet базы данных Access.

Microsoft Access и Visual Basic

В MS Access используется язык программирования Visual Basic for Applications (VBA), существенным недостатком которого является невозможность создания выполняемых файлов (.EXE), которые бы не требовали для работы наличия Access.

Для создания приложения для работы с данными, нужно сначала создать базу данных. Для этого можно использовать MS Access или другие средства.

DATA CONTROL - объект управления данными. С помощью Data Control можно быстро создавать простые приложения для работы с базами данных практически без написания программного кода. А используя этот элемент управления вместе с объектами доступа к данным (Data Access Objects) можно создавать достаточно мощные по своим функциональным возможностям программные комплексы, предназначенные для обработки информации из баз данных. Объект управления данными - это компонент Visual Basic, который позволяет получить доступ и манипулировать данными, хранящимися в файлах баз данных различных форматов. Используя объект Data, вы можете достаточно быстро создавать работоспособные Windows-приложения практически без написания кода программы. Основные действия объекта управления данными:

1.Подключение (connect) к базе данных. 2.Открытие таблицы БД или определение при помощи соответствующего SQL-запроса критерия выбора записей из полей БД. 3.Передача данных из полей БД к связанным элементам управления, расположенным на форме (поле редактирования), где данные можно просматривать или изменять. 4.Добавление новых записей, удаление записей и обновление содержимого БД (здесь, правда, без написания нескольких строк кода не обойтись). 5.Закрытие базы данных.

Применение объекта Data дает возможность разработчику использовать в своих приложениях БД в наиболее распространенных в настоящее время форматах, таких как Microsoft Access, dBASE, FoxPro, Paradox, Btrieve, а также файлы электронных таблиц Microsoft Excel и Lotus 1-2-3. Кроме того, можно использовать в качестве источника данных обычные текстовые файлы (с расширением txt) или базы данных, доступные через интерфейс Open Database Connectivity (ODBC).

Если приложение должно работать с несколькими источниками данных, то можно одновременно разместить на экранной форме и использовать целый ряд объектов Data.

Свойство RecordSource объекта Data определяет, из какой таблицы базы данных требуется использовать данные. Если требуется использовать данные из нескольких таблиц, для определения требуемого источника данных можно использовать язык структурированных запросов (SQL).

Объект управления данными не работает напрямую с базой данных, а создает в памяти компьютера именованную область, которая используется как буфер между файлом базы данных и объектом Data. В этой области памяти и содержится информация из базы данных. Данные для объекта Recordset определяются свойствами RecordSource и RecordsetType объекта Data.

Таким образом, набор записей (Recordset) представляет собой некоторое подмножество записей из одной или нескольких таблиц БД. При этом, он может содержать как полную копию таблицы, так и ее часть. Если источник данных определен с помощью языка SQL, то набор записей будет содержать строки из БД, удовлетворяющие соответствующему SQL-запросу.

В Visual Basic 5.0 поддерживаются пять типов наборов записей. Но наиболее широко используются только три типа: набор записей динамического типа или динамический набор записей, набор записей типа таблица и статический набор записей.

Связанные с данными элементы управления

При разработке приложений такие действия как открытие БД, определение источника данных и др. возлагаются на объект управления данными. Однако, для создания полноценного приложения совершенно необходимым является наличие у разработчика средств визуализации самих данных. Для решения этой задачи в Visual Basic предусмотрены, так называемые, связанные с данными элементы управления (Data-bound Controls). В связанных элементах управления, расположенных на экранной форме, отображается содержимое полей текущей записи из БД (точнее, из набора записей).

В качестве связанных объектов управления могут выступать некоторые стандартные объекты Visual Basic, например такое как Text box (текстовое окно).

Кроме свойств, присущих обычным элементам управления Visual Basic, эти элементы управления имеют несколько общих свойств, специально предназначенных для связи с базами данных:

DataField – опр. имя поля в наборе записей, созданном объектом управления данными.

DataSource – опр. имя объекта управления данными, с которым связывается элемент управления.

DataChanged - Показывает, было ли изменено содержимое связанного элемента управления.

Кроме стандартных связанных элементов управления, в Visual Basic предусмотрено несколько спец. связанных элементов упр., которые, кроме как для работы с данными обычно не используются: Data-bound list box, Data-bound combo box, Data-bound grid.

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

Любое изменение данных в связанных элементах управления, сделанное пользователем, немедленно отображается в наборе записей и затем в базе данных (если, конечно, не предусмотреть специальных мер).

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

4.2. Способы организации Интернет-доступа к сетевым СУБД. Примеры программирования активных серверных страниц для организации доступа к сетевым реляционным СУБД на языке PHP.

История развития языков для гипертекстовых страниц:

1.HTML — язык компоновки документов и спецификации гиперссылок, используемый для кодировки документов в Web.

2.DHTML — дает возможность взаимодействия web-страниц с пользователем на клиентском компьютере.

3.Языки сценариев (JavaScript, VBScript) — генерируют объекты на основании HTML-страницы на стор клиента в окне браузера.

4. Технология создания динамических интерактивных Web-страниц с использованием объектно-ориентированного мультиплатформенного языка Java. Программы на языке Java называются аплетами и исполняются обычно на стороне клиента.

5.CGI-скрипты — программы, исполняемые на стороне web-сервера. CGI обеспечивает способ, посредством которого web-браузер осуществляет запуск web-приложения на стороне сервера, результатом его работы является html-страница, посылаемая клиенту.

6.ASP (Active Server Pages) – язык описания активных серверных страниц (активные серверные страницы – это файлы, которые обрабатываются на сервере и содержат текст HTML и код сценариев). ASP позволяет перемешивать HTML-код с программным кодом, что позволяет встраивать серверные программы в страницы, причем первые будут выполняться только на стороне сервера.

7.PHP (Personal Home Page) — выполняющийся на стороне сервера мультиплатформенный язык описания сценариев, встраиваемый непосредственно в HTML-код. Целью создания языка является разработка динамически генерируемых страниц в кратчайшие сроки.

8.ASP.NET — 1997 г., технология создания веб-приложений и веб-сервисов, является составной частью платформы MS .NET и развитием более старой технологии MS ASP.

Связь Web-сервера с серверами баз данных.

WWW - доступ к существующим БД может осуществляться по одному основ. сценариев:

1.Однократное или периодическое преобразование содержимого БД в статические документы. В этом варианте содержимое БД просматривает специальная программа, создающая множество файлов – связных HTML-документов.

2.Динамическое создание гипертекстовых документов на основе содержимого БД. Доступ к БД осуществляется программой (CGI, ASP, PHP), запускаемой в ответ на запрос web-клиента. Программа, обрабатывая запрос, просматривает содержимое БД и создает выходной html-документ, возвращаемый клиенту. Эффективно для больших и часто обновляемых БД, но возрастает нагрузка на сервер.

3.Создание информационного хранилища (ИХ) на основе высокопроизводительной СУБД, связанной с web-сервером, с возможностью периодической загрузки данных в ИХ из основных СУБД. Для обработки разнообразных запросов используется промежуточная БД высокой производительности.

www-клиент – www-сервер – обработчик – ИХ.

Использование скриптов, исполняемых Web-сервером.

Существует возможность получения документов как результата выполнения прикладной программы. Это реализуется на Web-сервере благодаря использованию интерфейса CGI. CGI определяет 4 инф. потока: переменные окружения, стандартный вход поток, стандартный вых. поток, аргументы командн. строки.

Perl (Practical Extraction and Report Language) является одним из наиболее гибких языковых средств, служащих для программирования интерфейсов CGI. Полнофункциональный язык программирования.

PHP (PHP Hypertext Preprocessor — препроцессор гипертекста РНР) представляет собой еще один широко применяемый язык сценариев с открытым исходным кодом, операторы которого могут встраиваться в код HTML. Он поддерживается многими Web-серверами, а также является предпочтительным языком Web-сценариев для Linux. Разработка языка РНР проводилась с учетом возможностей многих других языков, таких как Perl, С, Java и даже до определенной степени — платформы Active Server Pages. Он поддерживает нетипизированные переменные, поскольку это позволяет упростить разработку. Назначение данного языка состоит в том, чтобы дать возможность разработчикам Web быстро создавать сценарии динамического формирования страниц. Одним из преимуществ РНР является его расширяемость, поэтому уже разработан целый ряд модулей расширения для поддержки таких функций, как подключение к базе данных, передача и прием электронной почты, а также обработка данных в коде XML.

В настоящее время разработчики чаще всего применяют сочетание таких программных средств с открытым исходным кодом, как HTTP-сервер Apache, язык РНР и одну из систем баз данных — mySQL или PostgreSQL.

4.3. Хранение информации в XML-формате: преимущества и недостатки. Организация хранения данных в XML-формате в СУБД Microsoft SQL Server. Примеры формирования выборок данных с использованием XML-элементов с помощью SQL-запросов. Язык запросов на основе XQuery.

XML - это метаязык, или проще говоря, XML - это язык для создания других языков.

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

  1. XML позволяет разработчику создать собственную разметку структуры хранимой информации(обладает большой гибкостью).

  2. Разбор XML широко распространен, хорошо стандартизирован и реализован большим количеством производителей ПО, что позволяет извлечь информацию из XML-документов практически повсеместно.

  3. В стандарт XML включена поддержка кодовых страниц Unicode, что упрощает создание многоязычных документов.

  4. Приложения могут использовать XML-парсеры для проверки структуры документов, а при использовании схем -- и типов данных. Это может значительно упростить разбор строго структурированных документов, снимая с программиста задачу проверки правильности документа.

  5. XML -- это текстовый формат, то есть читаемый, легко документируемый и, иногда, более простой в отладке.

  6. Для работы с XML создано множество средств на самых разных платформах, что делает использование XML более простым по сравнению с бинарными форматами при обмене сложными информационными потоками.

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

Структура файла формата XML. Простейший XML- документ может выглядеть так, как это показано в Примере 1 Пример 1 

<?xml version="1.0"?>

<list_of_items>

<item id="1"><first/>Первый</item>

<item id="2">Второй <sub_item>подпункт 1</sub_item></item>

<item id="3">Третий</item>

<item id="4"><last/>Последний</item>

</list_of_items>

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

Тело документа XML состоит из элементов разметки (markup) и непосредственно содержимого документа - данных (content). XML - тэги предназначены для определения элементов документа, их атрибутов и других конструкций языка. Любой XML-документ должен всегда начинаться с инструкции , внутри которой также можно задавать номер версии языка, номер кодовой страницы и другие параметры, необходимые программе-анализатору в процессе разбора документа.

Правила создания XML- документа

В общем случае XML- документы должны удовлетворять следующим требованиям:

  • В заголовке документа помещается объявление XML, в котором указывается язык разметки документа, номер его версии и дополнительная информация

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

  • В XML учитывается регистр символов

  • Все значения атрибутов, используемых в определении тэгов, должны быть заключены в кавычки

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

  • Вся информация, располагающаяся между начальным и конечными тэгами, рассматривается в XML как данные и поэтому учитываются все символы форматирования ( т.е. пробелы, переводы строк, табуляции не игнорируются, как в HTML)

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

Организация хранения данных в XML-формате в СУБД Microsoft SQL Server.

Модель данных: реляционная или XML

Если данные хорошо структурированы и известна их схема, то для их хранения наверняка лучше всего подойдет реляционная модель. В SQL Server предусмотрены все необходимые для этого средства и функции. С другой стороны, если данные структурированы частично, не структурированы или если их структура неизвестна, следует подумать о моделировании таких данных.

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

  • данные разрежены, их структура неизвестна или их структура может значительно измениться в будущем;

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

  • данные упорядочены;

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

Если ни одно из этих условий не выполняется, следует выбрать реляционную модель данных. Например, если данные представлены в формате XML, но приложение пользуется базой данных только для их хранения и извлечения, то для этого вполне подойдет тип данных [n]varchar(max). Хранение данных в XML-столбце обеспечивает дополнительные преимущества. В их число входят проверка структуры и правильности данных, а также поддержка детализированных запросов и обновлений XML-данных.

SQL Server поддерживает несколько вариантов хранения XML-данных.

  • Естественное хранение в виде типа xml

Данные при этом хранятся во внутреннем представлении, которое обеспечивает неизменность XML-содержимого данных. Это внутреннее представление включает в себя сведения об иерархии контейнеров, порядке документов и значений элементов и атрибутов. Точнее говоря, при этом обеспечивается неизменность InfoSet-содержимого XML-данных. Сведения о спецификации InfoSet можно найти по адресу: http://www.w3.org/TR/xml-infoset. InfoSet-содержимое не всегда идентично текстовым XML-данным, потому что следующая информация при этом не сохраняется: несущественные пробелы, порядок атрибутов, префиксы пространств имен и XML-декларация.

Для типизированного (то есть связанного с XML-схемой) типа данных xml модуль проверки после обработки схемы (PSVI) добавляет в информационный набор данные о типах и кодирует их во внутреннее представление. Это значительно ускоряет синтаксический анализ. Дополнительные сведения см. в спецификациях XML-схем, разработанных консорциумом W3C XML. Найти их можно по адресам http://www.w3.org/TR/xmlschema-1 иhttp://www.w3.org/TR/xmlschema-2.

  • Сопоставление XML-данных и данных, хранящихся в реляционном формате

Используя аннотированную схему (AXSD), можно разбить XML на столбцы одной или нескольких таблиц. Это обеспечивает правильность данных на реляционном уровне. В результате гарантируется сохранность иерархической структуры данных, хотя порядок элементов не учитывается. Схема не может быть рекурсивной.

  • Хранение больших объектов, [n]varchar(max) и varbinary(max)

При этом хранится идентичная копия данных. Это полезно в приложениях специального назначения, например в приложениях, обрабатывающих юридическую документацию. Большинству приложений точная копия данных не нужна — им хватает XML-содержимого (правильности элементов InfoSet).

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