Masquage d'éléments et d'attributs à l'aide de sql:hide
Lorsqu'une requête XPath est exécutée contre un schéma XSD, le document XML résultant possède des éléments et des attributs spécifiés dans le schéma. Vous pouvez spécifier que certains éléments et attributs soient masqués dans le schéma en utilisant l'annotation sql:hide
. Cela est utile lorsque les critères de sélection de la requête requièrent des éléments ou des attributs particuliers dans le schéma, mais que vous ne souhaitez pas les retourner dans le document XML généré.
L'annotation sql:hide
prend une valeur booléenne (0=faux, 1=vrai). Les valeurs acceptables sont 0, 1, true et false.
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 l’exécution d’exemples SQLXML.
R. Spécification de sql:hide sur un attribut
Le schéma XSD de cet exemple se compose d’un <élément Person.Contact> avec des attributs ContactID, FirstName et LastName .
L’élément< Person.Contact> est de type complexe et, par conséquent, mappe à la table du même nom (mappage par défaut). Tous les attributs de l’élément <Person.Contact> sont de type simple et mappés à des colonnes portant le même nom dans la table Person.Contacttable de la base de données AdventureWorks. Dans le schéma, l’annotation sql:hide
est spécifiée sur l’attribut ContactID . Lorsqu’une requête XPath est spécifiée par rapport à ce schéma, l’ID de contact n’est pas retourné dans le document XML.
<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" sql:hide="true" />
<xsd:attribute name="FirstName" type="xsd:string" />
<xsd:attribute name="LastName" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
Pour tester un exemple de requête XPath sur le schéma
Copiez le code de schéma ci-dessus et collez-le dans un fichier texte. Enregistrez le fichier sous le nom Hide.xml.
Copiez le modèle suivant et collez-le dans un fichier texte. Enregistrez le fichier sous le nom HideT.xml dans le répertoire où vous avez enregistré le fichier Hide.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="Hide.xml"> /Person.Contact[@ContactID="1"] </sql:xpath-query> </ROOT>
Le chemin d'accès au répertoire spécifié pour le schéma de mappage (Hide.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\Hide.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 4.0.
Voici l'ensemble de résultats obtenu :
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Person.Contact FirstName="Gustavo" LastName="Achong" />
</ROOT>
Lorsque sql:hide
est spécifié sur un élément, celui-ci et ses attributs ou éléments enfants n'apparaissent pas dans le document XML généré. Voici un autre schéma XSD dans lequel sql:hide
est spécifié sur l’élément <OD> :
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:documentation>
Sales.Customer-Sales.SalesOrderHeader-Sales.SalesOrderDetail Schema
Copyright 2004 Microsoft. All rights reserved.
</xsd:documentation>
<xsd:appinfo>
<sql:relationship name="CustomerOrder"
parent="Sales.Customer"
parent-key="CustomerID"
child-key="CustomerID"
child="Sales.SalesOrderHeader" />
<sql:relationship name="OrderOrderDetails"
parent="Sales.SalesOrderHeader"
parent-key="SalesOrderID"
child-key="SalesOrderID"
child="Sales.SalesOrderDetail"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Customers" sql:relation="Sales.Customer">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Order" sql:relation="Sales.SalesOrderHeader"
maxOccurs="unbounded"
sql:relationship="CustomerOrder">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="OD" sql:relation="Sales.SalesOrderDetail" maxOccurs="unbounded" sql:relationship="OrderOrderDetails" sql:hide="1">
<xsd:complexType>
<xsd:attribute name="SalesOrderID" type="xsd:string"/>
<xsd:attribute name="ProductID" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string"/>
<xsd:attribute name="OID" sql:field="SalesOrderID"
type="xsd:string"/>
<xsd:attribute name="OrderDate" type="xsd:date"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="CID" sql:field="CustomerID"
type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Lorsqu’une requête XPath (par exemple /Customers[@CID="1"]
) est spécifiée par rapport à ce schéma, le document XML généré n’inclut pas l’élément <OD> et ses enfants, comme indiqué dans ce résultat partiel :
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customers CID="1">
<Order CustomerID="1" OID="43860" OrderDate="2001-08-01" />
<Order CustomerID="1" OID="44501" OrderDate="2001-11-01" />
<Order CustomerID="1" OID="45283" OrderDate="2002-02-01" />
<Order CustomerID="1" OID="46042" OrderDate="2002-05-01" />
</Customers>
</ROOT>