Явное сопоставление элементов и атрибутов XSD с таблицами и столбцами (SQLXML 4.0)
При использовании схемы XSD для представления реляционных баз данных в виде XML элементы и атрибуты схемы должны быть сопоставлены с таблицами и столбцами базы данных. Строки таблицы или представления базы данных будут сопоставлены с элементами в XML-документе. Значения столбцов базы данных сопоставляются с атрибутами и элементами.
При запросах XPath к схеме XSD c заметками данные для элементов и атрибутов схемы берутся из таблиц и столбцов, которым они сопоставлены. Для получения единичного значения из базы данных сопоставление, заданное схемой XSD, должно содержать спецификации и связей, и полей. Если имя элемента или атрибута не совпадает с именем таблицы, представления или столбца, которому оно сопоставлено, для задания сопоставления элемента или атрибута в XML-документе и таблицы (представления) или столбца базы данных используются заметки sql:relation
и sql:field
.
sql-relation
Заметка sql:relation
добавляется для сопоставления узла XML в схеме XSD и таблицы базы данных. Имя таблицы (представления) задано как значение заметки sql:relation
.
Если для элемента задана заметка sql:relation
, ее область действия охватывает все атрибуты и дочерние элементы, описанные в определении сложного типа этого элемента, сокращая, таким образом, усилия по написанию заметок.
Заметка sql:relation
также полезна, если идентификаторы, допустимые в Microsoft SQL Server, недопустимы в XML. Например, "Сведения о заказе" — это допустимое имя таблицы в SQL Server, но не в XML. В этих случаях заметка sql:relation
может использоваться для указания сопоставления, например следующим образом.
<xsd:element name="OD" sql:relation="[Order Details]">
sql-field
Заметка sql-field
сопоставляет атрибут или элемент столбцу базы данных. Заметка sql:field
добавляется для сопоставления узла XML в схеме и столбца базы данных. Нельзя задавать заметку sql:field
на элементе с пустым содержимым.
Примеры
Чтобы создать рабочие образцы на основе следующих примеров, необходимо выполнить определенные требования. Дополнительные сведения см. в разделе Требования для выполнения примеров SQLXML.
A. Задание заметок sql:relation и sql:field
В этом примере схема XSD состоит из <элемента Contact> сложного типа с дочерними <элементами FName> и <LName> и атрибутом ContactID .
Заметка sql:relation
сопоставляет <элемент Contact> с таблицей Person.Contact в базе данных AdventureWorks. Заметка sql:field
сопоставляет <элемент FName> со столбцом FirstName, а <элемент LName> со столбцом LastName.
Для атрибута ContactID заметка не указана. Поэтому атрибут по умолчанию сопоставляется со столбцом с тем же именем.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Contact" sql:relation="Person.Contact" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="FName"
sql:field="FirstName"
type="xsd:string" />
<xsd:element name="LName"
sql:field="LastName"
type="xsd:string" />
</xsd:sequence>
<xsd:attribute name="ContactID"
type="xsd:integer" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
Проверка образца запроса XPath к схеме
Скопируйте приведенный выше код схемы и вставьте его в текстовый файл. Сохраните файл под именем MySchema-annotated.xml.
Скопируйте приведенный ниже шаблон и вставьте его в текстовый файл. Сохраните файл под именем MySchema-annotatedT.xml в том же каталоге, где был сохранен файл MySchema-annotated.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="MySchema-annotated.xml"> /Contact </sql:xpath-query> </ROOT>
Путь к каталогу схемы сопоставления (файл MySchema-annotated.xml) задается относительно каталога, в котором сохранен шаблон. Можно также задать абсолютный путь, например:
mapping-schema="C:\SqlXmlTest\MySchema-annotated.xml"
Создайте и запустите тестовый скрипт SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.
Дополнительные сведения см. в статье Использование ADO для выполнения запросов SQLXML.
Частичный результирующий набор:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Contact ContactID="1">
<FName>Gustavo</FName>
<LName>Achong</LName>
</Contact>
.....
</ROOT>