Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
En écrivant des schémas XSD, vous pouvez utiliser l’attribut targetNamespace XSD pour spécifier un espace de noms cible. Cette rubrique décrit le fonctionnement des attributs XSD targetNamespace, elementFormDefault et attributeFormDefault , 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 espace de noms différent. Vous pouvez également spécifier si les éléments et attributs déclarés localement du schéma doivent apparaître qualifiés par un espace de noms, explicitement à l’aide d’un préfixe ou implicitement par défaut. Vous pouvez utiliser les attributs elementFormDefault et attributeFormDefault sur l’élément <xsd :schema> pour spécifier globalement la qualification des éléments et attributs locaux, ou vous pouvez utiliser l’attribut de formulaire pour spécifier séparément des éléments et des attributs individuels.
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.
Un. Spécification d’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 valeurs d’attribut elementFormDefault et attributeFormDefaultsur « non qualifiés » (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 déclarations de type CustomerType et OrderType sont globales et, par conséquent, sont 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 de <l’élément Customer> et de son <élément Enfant Order> , un préfixe est spécifié associé à l’espace de 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 (seuls quelques-uns des ordres sont affichés) :
<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 <global Customer> . (L’élément est global, car il est déclaré en tant qu’enfant d’un <élément xsd :schema> dans le schéma.)
Le préfixe n’est pas appliqué aux éléments et attributs locaux, car la valeur des attributs elementFormDefault et attributeFormDefault est définie sur « non qualifié » dans le schéma. Notez que 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.
Pour créer un exemple de travail de ce schéma
Copiez le code de schéma ci-dessus et collez-le dans un fichier texte. Enregistrez le fichier en tant que targetNameSpace.xml.
Copiez le modèle suivant et collez-le dans un fichier texte. Enregistrez le fichier en tant que targetNameSpaceT.xml dans 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. Notez que 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, consultez Utilisation d’ADO pour exécuter des requêtes SQLXML.
Si le schéma spécifie les attributs elementFormDefault et attributeFormDefault avec la valeur « qualifié », le document d’instance aura 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.
Il s’agit de la requête XPath révisée :
/CO:Customer[@CO:CustomerID=1]
Il s’agit du document XML retourné :
<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>