Partager via


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 elementFormDefaultattributeFormDefault 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, ContactNameet 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 et OrderType 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, OrderIDet ContactName) sont locaux, et non globaux.

Créer un exemple de travail de ce schéma

  1. Copiez le code de schéma précédent 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 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"
    
  3. 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>