Partager via


Spécification d'un espace de noms cible à l'aide de l'attribut targetNamespace (SQLXML 4.0)

Lors de l’écriture de schémas XSD, vous pouvez utiliser l’attribut XSD targetNamespace pour spécifier un espace de noms cible. Cette rubrique décrit comment fonctionnent les attributs XSD targetNamespace, elementFormDefault et attributeFormDefault, comment ils affectent les instance XML générés et comment 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 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 form pour spécifier des éléments et des attributs individuels 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 l’exécution d’exemples SQLXML.

R. 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 des attributs elementFormDefault et attributeFormDefaultsur « unqualified » (valeur par défaut pour ces attributs). Il s’agit d’une déclaration globale qui 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, 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 associé à l’espace de noms cible est spécifié.

  • 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 instance définit l’espace de noms urn:MyNamespace et lui associe un préfixe (y0). 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 de l’é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 « unqualified » dans le schéma. Notez que l’élément <Order> est local, car sa déclaration apparaît comme un 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 fonctionnel de ce schéma
  1. Copiez le code de schéma ci-dessus et collez-le dans un fichier texte. Enregistrez le fichier sous le nom targetNameSpace.xml.

  2. Copiez le modèle suivant et collez-le dans un fichier texte. Enregistrez ce fichier sous le nom targetNameSpaceT.xml dans le répertoire où vous avez enregistré le fichier 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 pour l'élément dans la requête et pas 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"  
    
  3. 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 « qualified », l’instance document 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. Dans la mesure où les attributs sont désormais également qualifiés dans l'instance, la requête XPath sera modifiée 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>