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.
Vous pouvez spécifier des requêtes sur un schéma annoté pour récupérer des données de la base de données en spécifiant des requêtes XPath dans un modèle par rapport au schéma XSD.
L’élément <sql :xpath-query> vous permet de spécifier une requête XPath sur la vue XML définie par le schéma annoté. Le schéma annoté sur lequel la requête XPath doit être exécutée est identifié à l’aide de l’attribut mapping-schema de l’élément <sql :xpath-query> .
Les modèles sont des documents XML valides qui contiennent une ou plusieurs requêtes. Les requêtes FOR XML et XPath retournent un fragment de document. Les modèles agissent en tant que conteneurs pour les fragments de document ; les modèles fournissent ainsi un moyen de spécifier un élément de niveau supérieur unique.
Les exemples de cette rubrique utilisent des modèles pour spécifier une requête XPath sur un schéma annoté pour récupérer des données de la base de données.
Par exemple, considérez ce schéma annoté :
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Person.Contact" >
<xsd:complexType>
<xsd:attribute name="ContactID" type="xsd:string" />
<xsd:attribute name="FirstName" type="xsd:string" />
<xsd:attribute name="LastName" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
Dans le cadre de l’illustration, ce schéma XSD est stocké dans un fichier nommé Schema2.xml. Vous pouvez ensuite avoir une requête XPath sur le schéma annoté spécifié dans le fichier de modèle suivant (Schema2T.xml) :
<sql:xpath-query
xmlns:sql="urn:schemas-microsoft-com:xmlsql"
>
Person.Contact[@ContactID="1"]
</sql:xpath-query>
Vous pouvez ensuite créer et utiliser le script de test SQLXML 4.0 (Sqlxml4test.vbs) pour exécuter la requête dans le cadre d’un fichier de modèle. Pour plus d’informations, consultez Schémas XDR annotés (déconseillés dans SQLXML 4.0).
Utilisation de schémas de mappage inline
Un schéma annoté peut être inclus directement dans un modèle, puis une requête XPath peut être spécifiée dans le modèle par rapport au schéma inline. Le modèle peut également être un code de mise à jour.
Un modèle peut inclure plusieurs schémas inline. Pour utiliser un schéma inline inclus dans un modèle, spécifiez l’attribut ID avec une valeur unique sur l’élément <xsd :schema> , puis utilisez #idvalue pour référencer le schéma inline. L’attribut id est identique au comportement de sql :id ({urn :schemas-microsoft-com :xml-sql}id) utilisé dans les schémas XDR.
Par exemple, le modèle suivant spécifie deux schémas inline-annotés :
<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql'>
<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:ms='urn:schemas-microsoft-com:mapping-schema'
id='InLineSchema1' sql:is-mapping-schema='1'>
<xsd:element name='Employees' ms:relation='HumanResources.Employee'>
<xsd:complexType>
<xsd:attribute name='LoginID'
type='xsd:string'/>
<xsd:attribute name='Title'
type='xsd:string'/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:ms='urn:schemas-microsoft-com:mapping-schema'
id='InLineSchema2' sql:is-mapping-schema='1'>
<xsd:element name='Contacts' ms:relation='Person.Contact'>
<xsd:complexType>
<xsd:attribute name='ContactID'
type='xsd:string' />
<xsd:attribute name='FirstName'
type='xsd:string' />
<xsd:attribute name='LastName'
type='xsd:string' />
</xsd:complexType>
</xsd:element>
</xsd:schema>
<sql:xpath-query xmlns:sql='urn:schemas-microsoft-com:xml-sql'
mapping-schema='#InLineSchema1'>
/Employees[@LoginID='adventure-works\guy1']
</sql:xpath-query>
<sql:xpath-query xmlns:sql='urn:schemas-microsoft-com:xml-sql'
mapping-schema='#InLineSchema2'>
/Contacts[@ContactID='1']
</sql:xpath-query>
</ROOT>
Le modèle spécifie également deux requêtes XPath. Chacun des éléments xpath-query<> identifie de manière unique le schéma de mappage en spécifiant l’attributmapping-schema.
Lorsque vous spécifiez un schéma inline dans le modèle, l’annotation sql:is-mapping-schema doit également être spécifiée sur l’élément <xsd :schema> . Prend sql:is-mapping-schema une valeur booléenne (0=false, 1=true). Un schéma inline avec sql :is-mapping-schema="1 » est traité comme un schéma annoté inline et n’est pas retourné dans le document XML.
L’annotation sql:is-mapping-schema appartient à l’espace de noms urn:schemas-microsoft-com:xml-sqldu modèle .
Pour tester cet exemple, enregistrez le modèle (InlineSchemaTemplate.xml) dans un répertoire local, puis 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.
Outre la spécification de l’attribut mapping-schema sur l’élément <sql :xpath-query> dans un modèle (lorsqu’il existe une requête XPath) ou sur <l’élément updg :sync> dans un code de mise à jour, vous pouvez effectuer les opérations suivantes :
Spécifiez l’attribut
mapping-schemasur l’élément <ROOT> (déclaration globale) dans le modèle. Ce schéma de mappage devient ensuite le schéma par défaut qui sera utilisé par tous les nœuds XPath et updategram qui n’ont aucune annotation explicitemapping-schema.Spécifiez l’attribut
mapping schemaà l’aide de l’objet ADOCommand.
L’attribut mapping-schema spécifié sur l’élément <xpath-query> ou <updg :sync> a la priorité la plus élevée ; l’objet ADO Command a la priorité la plus basse.
Notez que si vous spécifiez une requête XPath dans un modèle et que vous ne spécifiez pas de schéma de mappage sur lequel la requête XPath est exécutée, la requête XPath est traitée comme une requête de type dbobject . Par exemple, considérez ce modèle :
<sql:xpath-query
xmlns:sql="urn:schemas-microsoft-com:xmlsql">
Production.ProductPhoto[@ProductPhotoID='100']/@LargePhoto
</sql:xpath-query>
Le modèle spécifie une requête XPath, mais il ne spécifie pas de schéma de mappage. Par conséquent, cette requête est traitée comme une requête de type dbobject dans laquelle Production.ProductPhoto est le nom de la table et @ProductPhotoID=« 100 » est un prédicat qui recherche une photo de produit avec la valeur d’ID 100. @LargePhoto est la colonne à partir de laquelle récupérer la valeur.