Spécifier un espace de noms cible à l’aide de l’attribut targetNamespace (SQLXML 4.0)
S’applique à : SQL ServerAzure SQL Database
En écrivant des schémas XSD, vous pouvez utiliser l’attribut XSD targetNamespace
pour spécifier un espace de noms cible. Cet article décrit le fonctionnement des attributs et elementFormDefault
attributeFormDefault
XSDtargetNamespace
, leur impact sur l’instance XML générée et la façon dont les requêtes XPath sont spécifiées avec des espaces de noms.
Vous pouvez utiliser l’attribut xsd:targetNamespace
pour placer des éléments et des attributs de l’espace de noms par défaut dans un autre espace de noms. Vous pouvez également spécifier si les éléments et attributs du schéma déclarés localement doivent apparaître qualifiés par un espace de noms, soit explicitement en utilisant un préfixe, soit implicitement par défaut. Vous pouvez utiliser les attributs et les elementFormDefault
attributs de l’élément <xsd:schema>
pour spécifier globalement la qualification des éléments et des attributs locaux, ou vous pouvez utiliser l’attribut form
pour spécifier des éléments et des attributs individuels attributeFormDefault
séparément.
Exemples
Pour créer des exemples fonctionnels à l'aide des exemples suivants, vous devez répondre à certaines conditions requises. Pour plus d’informations, consultez Configuration requise pour exécuter des exemples SQLXML.
A. Spécifier un espace de noms cible
Le schéma XSD suivant spécifie un espace de noms cible à l’aide de l’attribut xsd:targetNamespace
. Le schéma définit également les elementFormDefault
valeurs et attributeFormDefault
les valeurs "unqualified"
d’attribut sur (valeur par défaut pour ces attributs). Il s’agit d’une déclaration globale et affecte tous les éléments locaux (<Order>
dans le schéma) et les attributs (CustomerID
, ContactName
et OrderID
dans le schéma).
<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>
Dans le schéma :
Les
CustomerType
déclarations de type etOrderType
globales sont donc incluses dans l’espace de noms cible du schéma. Par conséquent, lorsque ces types sont référencés dans la déclaration d’élément et son<Order>
élément enfant, un préfixe est spécifié associé à l’espace de<Customer>
noms cible.L’élément
<Customer>
est également inclus dans l’espace de noms cible du schéma, car il s’agit d’un élément global dans le schéma.
Exécutez la requête XPath suivante sur le schéma :
(/CO:Customer[@CustomerID=1)
La requête XPath génère ce document d'instance (seules quelques commandes sont affichées) :
<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>
Ce document d’instance définit l’espace de noms Urn :MyNamespace et associe un préfixe (y0) à celui-ci. Le préfixe est appliqué uniquement à l’élément <Customer>
global. (L’élément est global, car il est déclaré en tant qu’enfant d’élément <xsd:schema>
dans le schéma.)
Le préfixe n’est pas appliqué aux éléments et attributs locaux, car la valeur et elementFormDefault
attributeFormDefault
les attributs sont définis "unqualified"
dans le schéma. L’élément <Order>
est local, car sa déclaration apparaît en tant qu’enfant de l’élément <complexType>
qui définit l’élément <CustomerType>
. De même, les attributs (CustomerID
, OrderID
et ContactName
) sont locaux, et non globaux.
Créer un exemple de travail de ce schéma
Copiez le code de schéma précédent et collez-le dans un fichier texte. Enregistrez le fichier sous le nom
targetNamespace.xml
.Copiez le modèle suivant et collez-le dans un fichier texte. Enregistrez le fichier dans
targetNameSpaceT.xml
le même répertoire que celui où vous avez enregistré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>
La requête XPath dans le modèle retourne l’élément
<Customer>
pour le client avec un CustomerID de 1. La requête XPath spécifie le préfixe d’espace de noms de l’élément dans la requête et non pour l’attribut. (Les attributs locaux ne sont pas qualifiés, comme spécifié dans le schéma.)Le chemin d’accès au répertoire spécifié pour le schéma de mappage (
targetNamespace.xml
) est relatif au répertoire dans lequel le modèle est enregistré. Vous pouvez également spécifier un chemin d'accès absolu, par exemple :mapping-schema="C:\MyDir\targetNamepsace.xml"
Créez et utilisez le script de test SQLXML 4.0 (Sqlxml4test.vbs) pour exécuter le modèle.
Pour plus d'informations, voir Utilisation d'ADO pour exécuter des requêtes SQLXML 4.0.
Si le schéma spécifie et attributeFormDefault
les attributs elementFormDefault
avec la valeur"qualified"
, le document d’instance possède tous les éléments et attributs locaux qualifiés. Vous pouvez modifier le schéma précédent pour inclure ces attributs dans l’élément <xsd:schema>
et réexécuter le modèle. Étant donné que les attributs sont désormais également qualifiés dans l’instance, la requête XPath change pour inclure le préfixe d’espace de noms.
La requête XPath modifiée est présentée ci-dessous :
/CO:Customer[@CO:CustomerID=1]
Le document XML renvoyé est présenté ci-dessous :
<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>