Поддержка типов данных xml в SQLXML 4.0
Начиная с версии SQL Server 2005, SQL Server через тип данных xml поддерживает типизированные данные XML. В этом разделе представлены сведения о том, как SQLXML 4.0 распознает экземпляры типов данных xml и реализует их поддержку.
Работа с типами данных xml
Следующие примеры представлены для более глубокого понимания работы с таблицами SQL, реализующими столбцы с типами данных xml.
Задача |
Пример |
Раздел |
---|---|---|
Сопоставление столбца xml и его включение в XML-представление |
«Сопоставление XML-элемента со столбцом типа данных xml» |
Сопоставление элементов и атрибутов XSD с таблицами и столбцами по умолчанию (SQLXML 4.0) |
Вставка данных в столбец xml с диаграммами обновления |
«Вставка данных в столбец типа данных xml» |
Вставка данных с помощью диаграмм обновления XML (SQLXML 4.0) |
Массовая загрузка XML-данных в столбец xml |
«Массовая загрузка XML-данных в столбцы типа данных xml» |
Рекомендации и ограничения
Тип <xsd:any> не может быть сопоставлен со столбцом, включающим тип данных xml. В SQLXML это делается с помощью заметки sql:overflow-field. Другой способ обойти это ограничение — сопоставление поля с типом данных xml в качестве элемента xsd:anyType. Этот способ показан в примере «Сопоставление XML-элемента со столбцом типа данных xml», ссылка на который дана в таблице выше.
Запрос XPath к содержимому столбца с типом данных xml не поддерживается.
Использование столбца xml в заметках, где он не поддерживается (например, sql:relationship и sql:key-fields) или не разрешается, приведет к ошибкам SQL Server, которые невозможно будет перехватить в приложении среднего уровня, реализующим SQLXML 4.0. Это происходит потому, что SQLXML не требуются сведения о типах SQL. Это напоминает поведение SQLXML в случае с другими типами данных, например двоичными и BLOB.
Сопоставление столбцов xml поддерживается только для схем XSD. Схемы XDR не поддерживают сопоставление столбцов xml.
При синтаксическом анализе XML SQLXML 4.0 использует поддержку, предусмотренную в SQL Server. Столбец xml может быть сопоставлен либо как типизированный, либо как нетипизированный XML. В обоих случаях SQLXML 4.0 не проверяет входной XML. Если входной XML недопустим или имеет неверный формат, то SQL Server сообщает об этом SQLXML и передает пользователю сведения об ошибках, возвращенные сервером.
SQLXML 4.0 зависит от ограниченной поддержки DTD, реализованной в SQL Server. SQL Server позволяет использовать внутреннее DTD в типе данных xml, с помощью которого можно определять значения по умолчанию и заменять ссылки на сущности их развернутым содержимым. SQLXML передает XML-данные серверу «как есть» (в том числе внутренние DTD). Можно преобразовывать определения DTD в документы схем XML (XSD) при помощи инструментов сторонних компаний и загружать эти данные вместе со встроенными схемами XSD в базу данных.
SQLXML 4.0 не сохраняет инструкции обработки декларации XML (например, <?xml version='1.0'?>) на основе поведения SQL Server. Вместо этого XML-декларация рассматривается как директива синтаксическому анализатору XML SQL Server, а его атрибуты (версия, кодировка и автономность) после преобразования данных в тип xml будут потеряны. Все XML-данные хранятся в кодировке UCS-2. Все остальные инструкции по обработке в экземпляре XML сохраняются, они допустимы в столбцах xml и могут поддерживаться SQLXML.