Utilisation de sql:field (Schéma XDR)

Important

Cette rubrique est fournie à titre de référence pour les applications héritées. Cette fonctionnalité ne fera plus l'objet d'aucun travail de développement. Évitez de l'utiliser dans vos nouveaux travaux de développement. Utilisez à la place des schémas XSD annotés pour créer des vues XML. Pour plus d'informations, consultez Introduction aux schémas XSD annotés (SQLXML 4.0). Vous pouvez convertir des schémas XDR annotés existants en schémas XSD. Pour plus d'informations, consultez Conversion de schémas XDR annotés en schémas XSD équivalents (SQLXML 4.0).

L'annotation sql:field spécifie le mappage entre un élément ou attribut d'un schéma annoté et une colonne d'une base de données. Elle peut être ajoutée à un élément ou à un attribut. L'annotation sql:field est ignorée sur les éléments <AttributeType> du schéma annoté. L'attribut sql:field spécifie le nom de la colonne mappée dans une table ou une vue.

Par exemple, sql:field peut être utilisé pour spécifier le nom de colonne lorsque ce nom ne correspond pas au champ dans le schéma spécifié dans XDR. La valeur de sql:field doit être un nom de colonne. Les noms de colonne en quatre parties, comme basededonnées.propriétaire.table.nomcolonne, ne sont pas autorisés. Cela vaut pour toutes les annotations dont la valeur est un nom de colonne.

Exemples

Pour créer des exemples fonctionnels à l'aide des exemples suivants, un certain nombre de conditions doivent être réunies. Pour plus d'informations, consultez Configuration requise pour l'exécution des exemples SQLXML.

A. Spécifier sql:field pour un élément <attribute> du schéma XDR

Dans ce schéma annoté, l'annotation sql:field est spécifiée sur l'élément <attribute> du schéma. L'attribut sql:field mappe l'attribut Email du schéma à la colonne EmailAddress de la table Person.Person.

Dans la mesure où le nom d'attribut BusinessEntityID dans le schéma XDR est identique à la colonne BusinessEntityID de la table Person.Person, sql:field n'est pas spécifié. Le mappage est par défaut.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="Contacts" sql:relation="Person.Person" >
    <AttributeType name="BusinessEntityID" />
    <AttributeType name="Email" />
    <attribute type="BusinessEntityID" />
    <attribute type="Email" sql:field="EmailAddress" />
</ElementType>
</Schema>

Pour tester un exemple de requête XPath par rapport au schéma

  1. Copiez le code de schéma ci-dessus et collez-le dans un fichier texte. Enregistrez ce fichier sous le nom sqlFieldXdr.xml.

  2. Copiez le modèle suivant et collez-le dans un fichier texte. Enregistrez ce fichier sous le nom sqlFieldXdrT.xml dans le répertoire où vous avez enregistré le fichier sqlFieldXdr.xml. La requête dans le modèle sélectionne un client pour lequel BusinessEntityID a la valeur 1.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="sqlFieldXdr.xml">
        /Contacts[@BusinessEntityID="1"]
      </sql:xpath-query>
    </ROOT>
    

    Le chemin d'accès au répertoire spécifié pour le schéma de mappage (sqlFieldXdr.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:\SqlXmlTest\sqlFieldXdr.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 4.0.

Voici le jeu de résultats partiel :

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Contacts BusinessEntityID="1" Email="gustavo0@adventure-works.com" /> 
</ROOT>

Dans un schéma de mappage, les attributs peuvent être déclarés globalement (par exemple, <AttributeType...>, déclaré hors de la portée d'<ElementType>), puis référencés dans <attribute type=...>, comme illustré dans ce schéma.

Dans ce schéma, l'attribut LastName est déclaré globalement et référencé dans la portée de l'<ElementType> Customer.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<AttributeType name="LastName" />
<ElementType name="Contacts" sql:relation="Person.Person" >
    <AttributeType name="BusinessEntityID" />
    <AttributeType name="FName" />
    <AttributeType name="LName" />
    
    <attribute type="CustomerID" />
    <attribute type="FName" sql:field="FirstName" />
    <attribute type="LName" sql:field="LastName" />
</ElementType>
</Schema>

B. Spécifier sql:field pour un <element> dans le schéma XDR

Dans ce schéma annoté, l'annotation sql:field est spécifiée sur <element> dans le schéma. L'annotation sql:field mappe l'élément enfant <Email> du schéma à la colonne EmailAddress de la table Person.Person.

Sans cette annotation explicite, l'élément enfant <Email> de l'élément <Contacts> du schéma n'est pas mappé à la colonne EmailAddress de la table Person.Person, car les éléments sont mappés par défaut à une relation et non à un champ (sauf si <ElementType> contient un attribut textOnly).

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <ElementType name="Email" />
  <ElementType name="Contacts" sql:relation="Person.Person" >
    <AttributeType name="BusinessEntityID" />

    <attribute type="BusinessEntityID" />
    <element type="Email" sql:field="EmailAddress" />
  </ElementType>
</Schema>

Pour tester un exemple de requête XPath sur le schéma

  1. Copiez le code de schéma ci-dessus et collez-le dans un fichier texte. Enregistrez ce fichier sous le nom sqlFieldElementXdr.xml.

  2. Copiez le modèle suivant et collez-le dans un fichier texte. Enregistrez ce fichier sous le nom sqlFieldElementXdrT.xml dans le répertoire où vous avez enregistré le fichier sqlFieldElementXdr.xml. La requête dans le modèle sélectionne un client pour lequel BusinessEntityID a la valeur 1.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="sqlFieldElementXdr.xml">
        /Contacts[@BusinessEntityID="1"]
      </sql:xpath-query>
    </ROOT>
    

    Le chemin d'accès au répertoire spécifié pour le schéma de mappage (sqlFieldElementXdr.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:\SqlXmlTest\sqlFieldElementXdr.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 4.0.

Voici le jeu de résultats partiel :

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Contacts BusinessEntityID="1"> 
    <Email>gustavo0@adventure-works.com</Email> 
  </Contacts> 
</ROOT>

Si content="textOnly" est spécifié sur l'<ElementType> correspondant à l'adresse de messagerie et que le nom par défaut de la colonne SQL est utilisé (« EmailAddress »), l'annotation sql:field n'est pas requise sur l'élément enfant. Dans ce cas, l'élément enfant <EmailAddress> est mappé à la colonne EmailAddress de la table Person.Person.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <ElementType name="EmailAddress" content="textOnly" />
  <ElementType name="Contacts" sql:relation="Person.Person" >
    <AttributeType name="BusinessEntityID" />

    <attribute type="BusinessEntityID" />
    <element type="EmailAddress" />
  </ElementType>
</Schema>