Поделиться через


Задание целевого пространства имен с помощью заметки sql:target-namespace (схема XDR)

Важное примечаниеВажно!

Этот раздел включен в документацию в качестве справочника по приложениям прежних версий. Дальнейшая разработка этой функции проводиться не будет. Рекомендуется избегать использования данной функции в новых разработках. Вместо этого для создания XML-представлений пользуйтесь схемами XSD с заметками. Дополнительные сведения см. в разделе Введение в схемы XSD с заметками (SQLXML 4.0). Можно преобразовать существующие схемы XDR с заметками в схемы XSD. Дополнительные сведения см. в разделе Преобразование схем XDR с заметками в эквивалентные схемы XSD (SQLXML 4.0).

Заметка sql:target-namespace может использоваться для размещения элементов и атрибутов из пространства имен по умолчанию в другом пространстве имен. Атрибут sql:target-namespace можно добавить только к тегу <Schema> в схеме XDR.

Значение sql:target-namespace является URI-код пространства имен (универсальным идентификатором ресурса), используемым для формирования элементов и атрибутов, указанных в схеме сопоставления. Данный URI применяется ко всем элементам и атрибутам пространства имен по умолчанию. XML-документ, возвращаемый запросами к схеме, содержит декларации xmlns:prefix="uri" и префикс элемента и имена атрибутов соответственно. Используемый URI берется из значения примечания sql:target-namespace. Однако префикс формируется произвольно и не соответствует какому-либо значению в схеме (даже если префиксы используются в схеме).

Примеры

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

А. Укажите целевое пространство имен

В этом примере заметка sql:target-namespace используется для указания целевого пространства имен. В результате все элементы и атрибуты, которые перешли бы в пространство имен по умолчанию перенаправляются в целевое пространство имен (MyNamespace).

<?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"        sql:target-namespace="urn:MyNamespace"><ElementType name="Sales.SalesOrderHeader" >   <AttributeType name="SalesOrderID" />   <attribute type="SalesOrderID"/></ElementType><ElementType name="Sales.Customer" >   <AttributeType name="CustomerID" />   <attribute type="CustomerID" />   <element type="Sales.SalesOrderHeader" >      <sql:relationship             key="CustomerID"             foreign-key="CustomerID"             key-relation="Sales.Customer"             foreign-relation="Sales.SalesOrderHeader" />   </element></ElementType></Schema>

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

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

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

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  <sql:xpath-query mapping-schema="TargetNS-Xdr.xml"                    xmlns:x="urn:MyNamespace" >    x:Sales.Customer[@CustomerID=1]  </sql:xpath-query></ROOT>
    

    Запрос XPath в шаблоне запрашивает все элементы <Customer>, определенные в пространстве имен «MyNamespace». Префикс «x» в шаблоне привязан к пространству имен.

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

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

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

Полученный результирующий набор показан ниже.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  <y0:Sales.Customer xmlns:y0="urn:MyNamespace" CustomerID="1">    <y0:Sales.SalesOrderHeader SalesOrderID="43860" />     <y0:Sales.SalesOrderHeader SalesOrderID="44501" />     <y0:Sales.SalesOrderHeader SalesOrderID="45283" />     <y0:Sales.SalesOrderHeader SalesOrderID="46042" />   </y0:Sales.Customer></ROOT>

Обратите внимание, что префиксы сформированы произвольно, но соответствуют тому же пространству имен.