Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При написании схем XSD можно использовать атрибут XSD targetNamespace для указания целевого пространства имен. В этом разделе описывается, как работают атрибуты XSD targetNamespace, elementFormDefault и attributeFormDefault, как они влияют на созданный экземпляр XML и как запросы XPath задаются с помощью пространств имен.
Атрибут xsd:targetNamespace можно использовать для размещения элементов и атрибутов из пространства имен по умолчанию в другое пространство имен. Можно также указать, должны ли локально объявленные элементы и атрибуты схемы отображаться пространством имен либо явным образом, используя префикс или неявно по умолчанию. Атрибуты elementFormDefault и attributeFormDefault можно использовать в элементе <xsd:schema> , чтобы глобально указать квалификацию локальных элементов и атрибутов, или использовать атрибут формы для указания отдельных элементов и атрибутов отдельно.
Примеры
Чтобы создать рабочие образцы на основе следующих примеров, необходимо выполнить определенные требования. Дополнительные сведения см. в разделе "Требования к выполнению примеров SQLXML".
А. Указание целевого пространства имен
Следующая схема XSD указывает целевое пространство имен с помощью атрибута xsd:targetNamespace . Схема также задает значения атрибутов elementFormDefault и attributeFormDefault значение unqualified (значение по умолчанию для этих атрибутов). Это глобальное объявление и влияет на все локальные элементы (Порядок> в схеме) и атрибуты (<CustomerID, ContactName и OrderID в схеме).
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
xmlns:CO="urn:MyNamespace"
targetNamespace="urn:MyNamespace" >
<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"
type="CO:CustomerType" />
<xsd:complexType name="CustomerType" >
<xsd:sequence>
<xsd:element name="Order"
sql:relation="Sales.SalesOrderHeader"
sql:relationship="CustOrders"
type="CO:OrderType" />
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
<xsd:attribute name="SalesPersonID" type="xsd:string" />
</xsd:complexType>
<xsd:complexType name="OrderType" >
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:schema>
В схеме:
Объявления типов CustomerType и OrderType являются глобальными и, следовательно, включаются в целевое пространство имен схемы. В результате, если эти типы ссылаются в объявлении элемента Customer> и его дочернего< элемента Order>, то указывается префикс, связанный с целевым пространством имен.<
Элемент <Customer> также включен в целевое пространство имен схемы, так как это глобальный элемент схемы.
Выполните следующий запрос XPath к схеме:
(/CO:Customer[@CustomerID=1)
Запрос XPath создает этот документ экземпляра (отображаются только несколько заказов):
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<y0:Customer xmlns:y0="urn:MyNamespace"
CustomerID="ALFKI" ContactName="Maria Anders">
<Order CustomerID="ALFKI" OrderID="10643" />
<Order CustomerID="ALFKI" OrderID="10692" />
...
</y0:Customer>
</ROOT>
Этот документ экземпляра определяет пространство имен urn:MyNamespace и связывает с ним префикс (y0). Префикс применяется только к глобальному элементу <Customer> . (Элемент является глобальным, так как он объявлен как дочерний <элемент xsd:schema> в схеме.)
Префикс не применяется к локальным элементам и атрибутам, так как значение атрибутов elementFormDefault и attributeFormDefault имеет значение unqualified в схеме. Обратите внимание, что <элемент Order> является локальным, так как его объявление отображается как дочерний элемент сложного< типа>, который определяет <элемент CustomerType>. Аналогичным образом атрибуты (CustomerID, OrderID и ContactName) являются локальными, а не глобальными.
Создание рабочего примера этой схемы
Скопируйте приведенный выше код схемы и вставьте его в текстовый файл. Сохраните файл как targetNameSpace.xml.
Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл как targetNameSpaceT.xml в том же каталоге, где вы сохранили targetNamespace.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="targetNamespace.xml" xmlns:CO="urn:MyNamespace" > /CO:Customer[@CustomerID=1] </sql:xpath-query> </ROOT>
Запрос XPath в шаблоне возвращает <элемент Customer> для клиента с идентификатором customerID 1. Обратите внимание, что запрос XPath задает префикс пространства имен для элемента в запросе, а не атрибута. (Локальные атрибуты не указаны, как указано в схеме.)
Путь к каталогу, указанный для схемы сопоставления (targetNamespace.xml), относится к каталогу, в котором сохраняется шаблон. Можно также задать абсолютный путь, например:
mapping-schema="C:\MyDir\targetNamepsace.xml"
Создайте и запустите тестовый скрипт SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.
Дополнительные сведения см. в разделе "Использование ADO для выполнения запросов SQLXML".
Если схема задает атрибуты elementFormDefault и attributeFormDefault со значением "qualified", документ экземпляра будет иметь все локальные элементы и атрибуты. Вы можете изменить предыдущую схему, чтобы включить эти атрибуты в <элемент xsd:schema> и снова выполнить шаблон. Так как атрибуты теперь также квалифицированы в экземпляре, запрос XPath изменится, чтобы включить префикс пространства имен.
Это измененный запрос XPath:
/CO:Customer[@CO:CustomerID=1]
Это XML-документ, возвращаемый:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<y0:Customer xmlns:y0="urn:MyNamespace" CustomerID="1" SalesPersonID="280">
<Order SalesOrderID="43860" CustomerID="1" />
<Order SalesOrderID="44501" CustomerID="1" />
<Order SalesOrderID="45283" CustomerID="1" />
<Order SalesOrderID="46042" CustomerID="1" />
</y0:Customer>
</ROOT>