Создание постоянных элементов при помощи sql:is-constant (SQLXML 4.0)
Чтобы указать постоянный элемент — то есть, элемент в XSD-схеме, который не сопоставляется никакой таблице или столбцу базы данных — можно использовать заметку sql:is-constant. Эта заметка имеет логическое значение (0 = false, 1 = true). Допустимые значения: 0, 1, true и false. Заметка sql:is-constant может быть указана на элементе, не имеющем никаких атрибутов. Если она указана на элементе со значением true (или 1), этот элемент не сопоставляется базе данных, но по-прежнему отображается в XML-документе.
Заметка sql:is-constant может использоваться для следующих задач.
Добавление элемента верхнего уровня в XML-документ. XML требует одного элемента верхнего уровня (корневого элемента) для документа.
Создание элементов контейнера, таких как элемент <элементам контейнера>, который упаковывает все заказы.
Заметка sql:is-constant может быть добавлена к элементу <complexType>.
Примеры
Чтобы создать рабочие образцы на основе следующих примеров, необходимо выполнить определенные требования. Дополнительные сведения см. в разделе Требования к запуску примеров SQLXML.
А. Указание sql:is-constant для добавления элемента контейнера
В этой XSD-схеме с заметками <CustomerOrders> определяется как постоянный элемент путем указания атрибута sql:is-constant со значением 1. Поэтому <CustomerOrders> не сопоставляется ни одной таблице или столбцу базы данных. Этот постоянный элемент состоит из дочерних элементов <Order>.
Хотя элемент <CustomerOrders> не сопоставляется ни одной таблице или столбцу базы данных, он по-прежнему отображается в результирующем XML как элемент контейнера, содержащий дочерние элементы <Order>.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema"><xsd:annotation> <xsd:appinfo> <sql:relationship name="CustOrders" parent="Sales.Customer" parent-key="CustomerID" child="Sales.SalesOrderHeader" child-key="CustomerID" /> </xsd:appinfo></xsd:annotation> <xsd:element name="Customer" sql:relation="Sales.Customer" > <xsd:complexType> <xsd:sequence> <xsd:element name="CustomerOrders" sql:is-constant="1" > <xsd:complexType> <xsd:sequence> <xsd:element name="Order" sql:relation="Sales.SalesOrderHeader" sql:relationship="CustOrders" maxOccurs="unbounded" > <xsd:complexType> <xsd:attribute name="SalesOrderID" type="xsd:integer" /> <xsd:attribute name="OrderDate" type="xsd:date" /> <xsd:attribute name="CustomerID" type="xsd:string" /> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> <xsd:attribute name="CustomerID" type="xsd:string" /> </xsd:complexType> </xsd:element></xsd:schema>
Проверка образца запроса XPath к схеме
Скопируйте приведенный выше код схемы и вставьте его в текстовый файл. Сохраните файл с именем isConstant.xml.
Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл под именем isConstantT.xml в том же каталоге, где был сохранен файл isConstant.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="isConstant.xml"> Customer[@CustomerID=1] </sql:xpath-query></ROOT>Путь к каталогу схемы сопоставления (файл isConstant.xml) задается относительно каталога, в котором сохранен шаблон. Можно также задать абсолютный путь, например:
mapping-schema="C:\MyDir\isConstant.xml"Создайте и запустите тестовый сценарий SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.
Дополнительные сведения см. в разделе Использование объектов ADO для выполнения запросов SQLXML.
Ниже приведен частичный результирующий набор.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <Customer CustomerID="1"> <CustomerOrders> <Order SalesOrderID="43860" OrderDate="2001-08-01" CustomerID="1" /> <Order SalesOrderID="44501" OrderDate="2001-11-01" CustomerID="1" /> <Order SalesOrderID="45283" OrderDate="2002-02-01" CustomerID="1" /> <Order SalesOrderID="46042" OrderDate="2002-05-01" CustomerID="1" /> ... </CustomerOrders> </Customer> </ROOT>