Использование схем XSD с заметками в запросах (SQLXML 4.0)
Можно указать запросы по схеме с заметками, чтобы получать данные из базы данных, указывая запросы XPath в шаблоне по XSD-схеме.
Элемент <sql:xpath-query> позволяет указать запрос XPath к XML-представлению, определенному схемой с заметками. Схема с заметками, по которой будет выполнен запрос XPath, идентифицируется с использованием атрибута mapping-schema элемента <sql:xpath-query>.
Шаблоны являются допустимыми XML-документами, которые содержат один или несколько запросов. Запросы FOR XML и XPath возвращают фрагмент документа. Шаблоны выполняют роль контейнеров для фрагментов документов; таким образом шаблоны обеспечивают способ указать один элемент верхнего уровня.
В примерах, приведенных в этом разделе, шаблоны задают запрос XPath по схеме с заметками для получения данных из базы данных.
В качестве примера рассмотрим схему с заметками:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema"> <xsd:element name="Person.Contact" > <xsd:complexType> <xsd:attribute name="ContactID" type="xsd:string" /> <xsd:attribute name="FirstName" type="xsd:string" /> <xsd:attribute name="LastName" type="xsd:string" /> </xsd:complexType> </xsd:element></xsd:schema>
Для иллюстрации эта XSD-схема хранится в файле с именем Schema2.xml. Затем можно направить задать запрос XPath по схеме с заметками, указанной в следующем файле шаблона (Schema2T.xml):
<sql:xpath-query xmlns:sql="urn:schemas-microsoft-com:xmlsql" > Person.Contact[@ContactID="1"]</sql:xpath-query>
Затем можно создать и запустить тестовый сценарий SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить запрос, как часть файла шаблона. Дополнительные сведения см. в разделе Использование ADO для выполнения запросов SQLXML 4.0.
Использование встроенных схем сопоставления
Схему с заметками можно включить непосредственно в шаблон, а затем задать запрос XPath в шаблоне по встроенной схеме. Шаблон может также быть диаграммой обновления.
Шаблон может включать несколько встроенных схем. Для использования встроенной схемы, включенной в шаблон, укажите атрибут id с уникальным значением на элементе <xsd:schema>, а затем используйте #idvalue для ссылки на встроенную схему. Поведение атрибута id идентично sql:id ({urn:schemas-microsoft-com:xml-sql}id), используемому в XDR-схемах. Дополнительные сведения см. в разделе Использование схем XDR с заметками в запросах (является устаревшим в SQLXML 4.0).
Например, следующий шаблон указывает две встроенные схемы с заметками:
<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql'><xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:ms='urn:schemas-microsoft-com:mapping-schema' id='InLineSchema1' sql:is-mapping-schema='1'> <xsd:element name='Employees' ms:relation='HumanResources.Employee'> <xsd:complexType> <xsd:attribute name='LoginID' type='xsd:string'/> <xsd:attribute name='Title' type='xsd:string'/> </xsd:complexType> </xsd:element></xsd:schema><xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:ms='urn:schemas-microsoft-com:mapping-schema' id='InLineSchema2' sql:is-mapping-schema='1'> <xsd:element name='Contacts' ms:relation='Person.Contact'> <xsd:complexType> <xsd:attribute name='ContactID' type='xsd:string' /> <xsd:attribute name='FirstName' type='xsd:string' /> <xsd:attribute name='LastName' type='xsd:string' /> </xsd:complexType> </xsd:element></xsd:schema><sql:xpath-query xmlns:sql='urn:schemas-microsoft-com:xml-sql' mapping-schema='#InLineSchema1'> /Employees[@LoginID='adventure-works\guy1']</sql:xpath-query><sql:xpath-query xmlns:sql='urn:schemas-microsoft-com:xml-sql' mapping-schema='#InLineSchema2'> /Contacts[@ContactID='1']</sql:xpath-query></ROOT>
Шаблон также задает два запроса XPath. Каждый элемент <xpath-query> уникально идентифицирует схему сопоставления, указывая атрибут mapping-schema.
При задании встроенной схемы в шаблоне заметка sql:is-mapping-schema также должна быть указана на элементе <xsd:schema>. Заметка sql:is-mapping-schema имеет логическое значение (0 = false, 1 = true). Встроенная схема с sql:is-mapping-schema="1" обрабатывается как встроенная схема с заметками и не возвращается в XML-документе.
Заметка sql:is-mapping-schema принадлежит пространству имен шаблона urn:schemas-microsoft-com:xml-sql.
Чтобы протестировать этот пример, сохраните шаблон (InlineSchemaTemplate.xml) в локальном каталоге, а затем создайте и используйте тестовый сценарий SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон. Дополнительные сведения см. в разделе Использование ADO для выполнения запросов SQLXML 4.0.
В дополнение к указанию атрибута mapping-schema на элементе <sql:xpath-query> в шаблоне (при наличии запроса XPath) или на элементе <updg:sync> в диаграмме обновления, можно сделать следующее:
Укажите атрибут mapping-schema на элементе <ROOT> (глобальное объявление) в шаблоне. Затем эта схема сопоставления становится схемой по умолчанию, которая будет использоваться всеми узлами XPath и диаграмм обновления без явной заметки mapping-schema.
Укажите атрибут mapping schema с помощью объекта Command ADO.
Атрибут mapping-schema, указанный на элементе <xpath-query> или <updg:sync>, имеет наивысший приоритет; объект Command ADO имеет самый низкий приоритет.
Обратите внимание, что если указать запрос XPath в шаблоне и не указывать схему сопоставления, по которой выполняется запрос XPath, то запрос XPath обрабатывается как запрос типа dbobject. Например, рассмотрим следующий шаблон.
<sql:xpath-query xmlns:sql="urn:schemas-microsoft-com:xmlsql"> Production.ProductPhoto[@ProductPhotoID='100']/@LargePhoto</sql:xpath-query>
Шаблон задает запрос XPath, но не задает схемы сопоставления. Поэтому этот запрос обрабатывается как запрос типа dbobject, в котором Production.ProductPhoto — имя таблицы, а @ProductPhotoID='100' — предикат, который находит фотографию продукта со значением идентификатора 100. @LargePhoto — столбец, из которого извлекается значение.