Создание разделов CDATA с использованием sql:use-cdata (SQLXML 4.0)

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

Иногда в базе данных в Microsoft SQL Server могут содержаться символы, которые в средстве синтаксического анализа XML рассматриваются как символы разметки. Например, символами разметки считаются угловые скобки (< и >), символ меньше или равно (<=), а также амперсанд (&). Но специальные символы такого типа можно заключить в раздел CDATA во избежание их обработки в качестве символов разметки. Текст в разделе CDATA обрабатывается средством синтаксического анализа XML как простой текст.

Заметка sql:use-cdata используется для указания на то, что данные, возвращаемые SQL Server, необходимо ввести в раздел CDATA (т. е. заметка указывает, должно ли значение из столбца, обозначенного заметкой sql:field, быть заключено в раздел CDATA). Заметку sql:use-cdata можно задавать только для элементов, которые сопоставляются со столбцом базы данных.

Заметка sql:use-cdata имеет логическое значение (0 = false, 1 = true). Допустимые значения: 0, 1, true и false.

Эту заметку нельзя использовать с sql:url-encode или для типов атрибутов ID, IDREF, IDREFS, NMTOKEN и NMTOKENS.

Примеры

Чтобы создать рабочие образцы на основе следующих примеров, необходимо выполнить определенные требования. Дополнительные сведения см. в разделе Требования к запуску примеров SQLXML.

А.Указание заметки sql:use-cdata для элемента

В следующей схеме заметке sql:use-cdata присвоено значение 1 (True) для элемента <AddressLine1>, находящегося внутри элемента <Address>. В результате этого данные возвращаются в разделе CDATA.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
  <xsd:element name="Address" 
               sql:relation="Person.Address" 
               sql:key-fields="AddressID" >
   <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="AddressID"  type="xsd:string" />
          <xsd:element name="AddressLine1" type="xsd:string" 
                       sql:use-cdata="1" />
        </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Проверка образца запроса XPath к схеме

  1. Скопируйте приведенный выше код схемы и вставьте его в текстовый файл. Сохраните этот файл с именем UseCData.xml.

  2. Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните этот файл под именем UseCDataT.xml в том же каталоге, в котором был сохранен файл UseCData.xml.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
        <sql:xpath-query mapping-schema="UseCData.xml">
            /Address[AddressID &lt; 11]
        </sql:xpath-query>
    </ROOT>
    

    Путь к каталогу схемы сопоставления (файл UseCData.xml) задается относительно каталога, в котором сохранен шаблон. Можно также задать абсолютный путь, например:

    mapping-schema="C:\SqlXmlTest\UseCData.xml"
    
  3. Создайте и запустите тестовый скрипт SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.

    Дополнительные сведения см. в разделе Использование ADO для выполнения запросов SQLXML 4.0.

Ниже приведен частичный результирующий набор.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Address> 
    <AddressID>1</CustomerID> 
    <AddressLine1> 
      <![CDATA[ 1970 Napa Ct.  ]]> 
    </AddressLine1> 
  </Address>
  <Address>
    <AddressLine1> 
      <![CDATA[ 9833 Mt. Dias Blv. ]]> 
    </AddressLine1> 
  </Address>
  ...
</ROOT>