Создание постоянных элементов с помощью sql:is-constant (схема XDR)
Важно! |
---|
Этот раздел включен в документацию в качестве справочника по приложениям прежних версий. Дальнейшая разработка этой функции проводиться не будет. Рекомендуется избегать использования данной функции в новых разработках. Вместо этого для создания XML-представлений пользуйтесь схемами XSD с заметками. Дополнительные сведения см. в разделе Введение в схемы XSD с заметками (SQLXML 4.0). Можно преобразовать существующие схемы XDR с заметками в схемы XSD. Дополнительные сведения см. в разделе Преобразование схем XDR с заметками в эквивалентные схемы XSD (SQLXML 4.0). |
В результате сопоставления по умолчанию каждый элемент и атрибут в схеме XDR будет сопоставлен с таблицей и столбцом в базе данных. В некоторых случаях может потребоваться создать в схеме XDR элемент, который не будет соответствовать ни одной таблице или столбцу базы данных, но будет отображаться в XML-документе. Такие элементы называют постоянными. Чтобы создать постоянный элемент, укажите заметку sql:is-constant. sql:is-constant принимает логическое значение (0 = FALSE, 1 = TRUE).
Данная заметка указывается в <ElementType>, который не соответствует ни одной таблице базы данных, что делает элемент постоянным. Заметка sql:is-constant может использоваться для следующих задач.
Добавление элемента верхнего уровня в XML-документ. XML требует один элемент верхнего уровня (элемент <root>) для документа.
Создание элементов контейнера, например, элемента <Orders>, который переносит все заказы.
Примеры
Чтобы создать рабочие образцы на основе следующих примеров, необходимо выполнить определенные требования. Дополнительные сведения см. в разделе Требования к запуску примеров SQLXML.
А. Укажите заметку sql:is-constant для добавления элемента контейнера
В данной схеме XDR с заметкой <OrderList> определяется в виде постоянного элемента, содержащего все вложенные элементы <Orders>. Заметка sql:is-constant указывается в элементе OrderList<ElementType>, делая его постоянным, и следовательно не сопоставленным ни с одной таблицей базы данных. Хотя элемент <OrderList> не сопоставляется ни с одной таблицей/столбцом базы данных, он отображается в результирующем XML-документе в виде элемента контейнера, содержащего вложенные элементы <Orders>.
<?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="Sales.SalesOrderHeader" > <AttributeType name="SalesOrderID" /> <attribute type="SalesOrderID" /></ElementType><ElementType name="OrderList" sql:is-constant="1"> <element type="Orders"> <sql:relationship key-relation="Sales.Customer" foreign-relation="Sales.SalesOrderHeader" key="CustomerID" foreign-key="CustomerID" /> </element></ElementType><ElementType name="Sales.Customer" > <AttributeType name="CustomerID" /> <attribute type="CustomerID" /> <element type="OrderList" /></ElementType></Schema>
Проверка образца запроса XPath к схеме
Скопируйте приведенный выше код схемы и вставьте его в текстовый файл. Сохраните файл под именем isConstant-xdr.xml.
Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл под именем isConstant-xdrT.xml в том каталоге, был сохранен файл isConstant-xdr.xml. Запрос XPath в шаблоне выбирает все элементы <Sales.Customer> с атрибутом CustomerID со значением 1.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" ><sql:xpath-query mapping-schema="isConstant-xdr.xml" > /Sales.Customer[@CustomerID=1]</sql:xpath-query></ROOT>
Путь к каталогу схемы сопоставления (файл isConstant-xdr.xml) задается относительно каталога, в котором сохранен шаблон. Можно также задать абсолютный путь, например:
mapping-schema="C:\MyDir\isConstant-xdr.xml"
Создайте и запустите тестовый сценарий SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.
Дополнительные сведения см. в разделе Использование ADO для выполнения запросов SQLXML 4.0.
Полученный результирующий набор показан ниже.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <Sales.Customer CustomerID="1"> <OrderList> <Sales.SalesOrderHeader SalesOrderID="43860" /> <Sales.SalesOrderHeader SalesOrderID="44501" /> <Sales.SalesOrderHeader SalesOrderID="45283" /> <Sales.SalesOrderHeader SalesOrderID="46042" /> </OrderList> </Sales.Customer></ROOT>