Создание разделов CDATA с использованием sql:use-cdata (схема XDR)
![]() |
---|
Этот раздел включен в документацию в качестве справочника по приложениям прежних версий. Дальнейшая разработка этой функции проводиться не будет. Рекомендуется избегать использования данной функции в новых разработках. Вместо этого для создания XML-представлений пользуйтесь схемами XSD с заметками. Дополнительные сведения см. в разделе Введение в схемы XSD с заметками (SQLXML 4.0). Можно преобразовать существующие схемы XDR с заметками в схемы XSD. Дополнительные сведения см. в разделе Преобразование схем XDR с заметками в эквивалентные схемы XSD (SQLXML 4.0). |
В XML, разделы CDATA используются, чтобы отделить блоки текста, содержащие символы, которые в противном случае могли бы быть восприняты как элементы разметки.
Данные Microsoft SQL Server могут содержать символы, воспринимаемые как специальные синтаксическим анализатором XML; например, такие символы, как <, >, <=, &, обрабатываются как символы разметки. Если нужно, чтобы данные SQL Server, содержащие специальные символы, не рассматривались как элементы разметки, можно поместить их в раздел CDATA. Текст в разделе CDATA обрабатывается, как простой текст.
Заметка sql:use-cdata указывает, что данные, возвращенные SQL Server, помещаются в раздел CDATA. Используйте заметку sql:use-cdata, чтобы показать, что значение из столбца, указанного sql:field, должно быть заключено в раздел CDATA. Заметка sql:use-cdata может быть указана на <ElementType> или <element>, и принимает логическое значение (0 = FALSE, 1 = TRUE). Заметку sql:use-cdata нельзя использовать с sql:url-encode или любым типом атрибутов ID, IDREF, IDREFS, NMTOKEN или NMTOKENS.
Примеры
Чтобы создать рабочие образцы на основе следующих примеров, необходимо выполнить определенные требования. Дополнительные сведения см. в разделе Требования к запуску примеров SQLXML.
А. Задание заметки sql:use-cdata на элементе
В этой схеме заметка sql:use-cdata установлена в значение 1 (TRUE) для элемента <AddressLine1>. В результате данные для <AddressLine1> возвращаются в разделе CDATA.
<?xml version="1.0" ?><Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <ElementType name="AddressID" content="textOnly" /> <ElementType name="AddressLine1" content="textOnly" /> <ElementType name="Address" sql:relation="Person.Address"> <element type="AddressID" /> <element type="AddressLine1" sql:use-cdata="1" /> </ElementType></Schema>
Проверка образца запроса XPath к схеме
Скопируйте приведенный выше код схемы и вставьте его в текстовый файл. Сохраните файл с именем UseCdataXdr.xml.
Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл под именем UseCdataXdrT.xml в том же каталоге, где был сохранен файл UseCdataXdr.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="UseCdataXdr.xml"> /Address[@AddressID=1] </sql:xpath-query></ROOT>
Путь к каталогу схемы сопоставления (файл UseCdataXdr.xml) задается относительно каталога, в котором сохранен шаблон. Можно также задать абсолютный путь, например:
mapping-schema="C:\MyDir\UseCdataXdr.xml"
Создайте и запустите тестовый сценарий SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.
Дополнительные сведения см. в разделе Использование ADO для выполнения запросов SQLXML 4.0.
Полученный результирующий набор показан ниже.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <Address> <AddressID>1</AddressID> <AddressLine1> <![CDATA[ 1970 Napa Ct.]]> </AddressLine1> </Address></ROOT>