Partager via


Utilisation de sql:relation (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:relation est ajoutée pour mapper un nœud XML dans le schéma XDR à une table de base de données. Un nom de table/vue est spécifiée en tant que valeur d'annotation sql:relation.

L'annotation sql:relation peut être ajoutée à un nœud <ElementType>, <element> ou <attribute> dans le schéma XDR. sql:relation spécifie le mappage entre <ElementType>, <element> ou <attribute> dans le schéma à une table/vue dans une base de données.

Lorsque sql:relation est spécifié sur <ElementType>, la portée de cette annotation s'applique à toutes les spécifications d'attributs et d'éléments enfants dans cet <ElementType>. Par conséquent, il fournit un raccourci pour l'écriture d'annotations. Lorsque sql:relation est spécifié directement sur l'<element>, la portée est également introduite aux attributs spécifiés dans un <ElementType>. L'annotation sql:relation est ignorée sur <AttributeType>.

L'annotation sql:relation est utile dans les situations dans lesquelles des identificateurs qui sont valides dans Microsoft SQL Server ne le sont pas en XML. Par exemple, « Détails des commandes » est un nom de table valide dans SQL Server, mais non valide en XML. Dans de tels cas, l'annotation sql:relation peut être utilisée pour spécifier le mappage, par exemple :

<ElementType name="OD" sql:relation="[Order Details]">

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:relation sur <ElementType> contenant des attributs

Dans cet exemple, le schéma XDR comprend un élément <Contacts> avec les attributs BusinessEntityID, FirstName et LastName. L'annotation sql:relation est spécifiée sur <ElementType>, mappant ainsi l'élément <Contacts> à la table Person.Person. La portée de ce mappage s'applique à tous les attributs dans l'<ElementType>. Par conséquent, tous les attributs sont mappés aux colonnes de la table Person.Person.

Le mappage par défaut a lieu pour les attributs ; par exemple, les attributs sont mappés aux colonnes du même nom dans 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="Contacts" sql:relation="Person.Person" >
    <AttributeType name="BusinessEntityID" />
    <AttributeType name="FirstName" />
    <AttributeType name="LastName" />

    <attribute type="BusinessEntityID" />
    <attribute type="FirstName" />
    <attribute type="LastName" />
  </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 le fichier sous le nom sqlRelationXdr.xml.

  2. Copiez le modèle suivant et collez-le dans un fichier texte. Enregistrez le fichier sous le nom sqlRelationXdrT.xml dans le répertoire où vous avez enregistré le fichier sqlRelationXdr.xml. La requête dans le modèle sélectionne un contact avec la valeur 1 comme BusinessEntityID.

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

    Le chemin d'accès au répertoire spécifié pour le schéma de mappage est relatif au répertoire associé où le modèle est enregistré. Vous pouvez également spécifier un chemin d'accès absolu, par exemple :

    mapping-schema="C:\MyDir\sqlRelationXdr.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" FirstName="Gustavo" 
              LastName="Achong" /> 
</ROOT>

B. Spécifier sql:relation sur <ElementType> contenant des sous-éléments et des attributs

Dans cet exemple, le schéma XDR comprend un élément <Contacts> avec l'attribut BusinessEntityID, et les éléments enfants <FirstName> et <LastName>. L'annotation sql:relation est spécifiée sur <ElementType>, mappant ainsi l'élément <Contacts> à la table Person.Person. La portée de ce mappage s'applique à tous les attributs dans l'<ElementType>. Par conséquent, tous les attributs sont mappés aux colonnes de la table Person.Person.

Le mappage par défaut a lieu pour les attributs. Les attributs sont mappés aux colonnes du même nom dans la table Person.Person.

Dans cet exemple, l'attribut content est spécifié sur les éléments enfants <FirstName> et <LastName>. Sans l'attribut content=textOnly, les éléments enfants ne seraient pas mappés aux colonnes FirstName et LastName respectives dans la table Person.Person puisque, par défaut, les éléments sont mappés à une table et non à un champ.

<?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="FirstName" content="textOnly"/>
  <ElementType name="LastName" content="textOnly"/>
  <ElementType name="Contacts" sql:relation="Person.Person" >
    <AttributeType name="BusinessEntityID" />

    <attribute type="BusinessEntityID" />
    <element type="FirstName" />
    <element type="LastName"  />
  </ElementType>
</Schema>

Au lieu de spécifier l'attribut content=textOnly, vous pouvez également spécifier l'annotation sql:field dans la définition element pour mapper les éléments enfants (FirstName, LastName) aux noms de colonne correspondants, comme dans les exemples suivants :

<element type="FirstName" sql:field="FirstName" />
<element type="LastName" sql:field="LastName" />

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 le fichier sous le nom UsingSqlRelationXdr.xml.

  2. Copiez le modèle suivant et collez-le dans un fichier texte. Enregistrez le fichier sous le nom UsingSqlRelationXdrT.xml dans le répertoire où vous avez enregistré le fichier UsingSqlRelationXdr.xml. La requête dans le modèle sélectionne un contact avec la valeur 1 comme BusinessEntityID.

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

    Le chemin d'accès au répertoire spécifié pour le schéma de mappage (UsingSqlRelationXdr.xml) est relatif au répertoire où le modèle est enregistré. Vous pouvez également spécifier un chemin d'accès absolu, par exemple :

    mapping-schema="C:\MyDir\UsingSqlRelationXdr.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"> 
    <FirstName>Gustavo</FirstName>
    <LastName>Achong</LastName>
  </Contacts>
</ROOT>