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.
Lorsqu’une requête XPath est spécifiée par rapport à un schéma XSD, les informations de clé sont requises dans la plupart des cas pour obtenir un imbrication approprié dans le résultat. La spécification de l’annotation sql:key-fields est un moyen de s’assurer que la hiérarchie appropriée est générée.
Remarque
Pour garantir l’imbrication appropriée, il est recommandé de spécifier sql:key-fields les éléments mappés aux tables. Le code XML produit est sensible au classement du jeu de résultats sous-jacent. S’il sql:key-fields n’est pas spécifié, le code XML généré peut ne pas être correctement formé.
Valeur d’identification des sql:key-fields colonnes qui identifient de manière unique les lignes de la relation. Si plusieurs colonnes sont requises pour identifier de manière unique une ligne, les valeurs de colonne sont délimitées par des espaces.
Vous devez utiliser l’annotation sql:key-fields lorsqu’un élément contient une <relation> sql :qui est définie entre l’élément et un élément enfant, mais ne fournit pas la clé primaire de la table spécifiée dans l’élément parent.
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. Production de l’imbrication appropriée lorsque <sql :relationship> ne fournit pas d’informations suffisantes
Cet exemple montre où sql:key-fields doit être spécifié.
Considérez le schéma suivant. Le schéma spécifie une hiérarchie entre les <éléments Order> et <Customer> dans lesquels l’élément <Order> est le parent et l’élément <Customer> est un enfant.
La <balise sql :relationship> est utilisée pour spécifier la relation parent-enfant. Il identifie CustomerID dans la table Sales.SalesOrderHeader comme clé parente qui fait référence à la clé enfant CustomerID dans la table Sales.Customer. Les informations fournies dans <sql :relationship> ne suffisent pas pour identifier de manière unique les lignes de la table parente (Sales.SalesOrderHeader). Par conséquent, sans l’annotation sql:key-fields , la hiérarchie générée est inexacte.
Une sql:key-fields fois spécifiée dans <Order>, l’annotation identifie de manière unique les lignes du parent (table Sales.SalesOrderHeader) et ses éléments enfants apparaissent sous son parent.
Il s’agit du schéma :
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="OrdCust"
parent="Sales.SalesOrderHeader"
parent-key="CustomerID"
child="Sales.Customer"
child-key="CustomerID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Order" sql:relation="Sales.SalesOrderHeader"
sql:key-fields="SalesOrderID">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Customer" sql:relation="Sales.Customer"
sql:relationship="OrdCust" >
<xsd:complexType>
<xsd:attribute name="CustID" sql:field="CustomerID" />
<xsd:attribute name="SoldBy" sql:field="SalesPersonID" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
<xsd:attribute name= "CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
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 KeyFields1.xml.
Copiez le modèle suivant et collez-le dans un fichier texte. Enregistrez le fichier en tant que KeyFields1T.xml dans le même répertoire que celui où vous avez enregistré KeyFields1.xml. La requête XPath dans le modèle retourne tous les <éléments Order> avec un CustomerID de moins de 3.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="KeyFields1.xml"> /Order[@CustomerID < 3] </sql:xpath-query> </ROOT>Le chemin d’accès au répertoire spécifié pour le schéma de mappage (KeyFields1.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\KeyFields1.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.
Il s’agit du jeu de résultats partiel :
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Order SalesOrderID="43860" CustomerID="1">
<Customer CustID="1" SoldBy="280"/>
</Order>
<Order SalesOrderID="44501" CustomerID="1">
<Customer CustID="1" SoldBy="280"/>
</Order>
<Order SalesOrderID="45283" CustomerID="1">
<Customer CustID="1" SoldBy="280"/>
</Order>
.....
</ROOT>
B. Spécification de sql :key-fields pour produire un imbrication approprié dans le résultat
Dans le schéma suivant, aucune hiérarchie n’est spécifiée à l’aide de <sql :relationship>. Le schéma nécessite toujours de spécifier l’annotation sql:key-fields pour identifier de manière unique les employés dans la table HumanResources.Employee.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="HumanResources.Employee" sql:key-fields="EmployeeID" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Title">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="EmployeeID" type="xsd:integer" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
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 KeyFields2.xml.
Copiez le modèle suivant et collez-le dans un fichier texte. Enregistrez le fichier en tant que KeyFields2T.xml dans le même répertoire que celui où vous avez enregistré KeyFields2.xml. La requête XPath dans le modèle retourne tous les <éléments HumanResources.Employee> :
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="KeyFields2.xml"> /HumanResources.Employee </sql:xpath-query> </ROOT>Le chemin d’accès au répertoire spécifié pour le schéma de mappage (KeyFields2.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\KeyFields2.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.
Voici le résultat obtenu :
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<HumanResources.Employee>
<Title EmployeeID="1">Production Technician - WC60</Title>
</HumanResources.Employee>
<HumanResources.Employee>
<Title EmployeeID="2">Marketing Assistant</Title>
</HumanResources.Employee>
<HumanResources.Employee>
<Title EmployeeID="3">Engineering Manager</Title>
</HumanResources.Employee>
...
</ROOT>