Ausblenden von Elementen und Attributen mit sql:hide
Wenn eine XQuery-Abfrage mit einem XSD-Schema ausgeführt wird, verfügt das resultierende XML-Dokument über Elemente und Attribute, die im Schema angegeben sind. Sie können mit der sql:hide-Anmerkung angeben, dass Elemente und Attribute im Schema ausgeblendet werden sollen. Dies ist hilfreich, wenn das Auswahlkriterium der Abfrage bestimmte Elemente oder Attribute im Schema erfordert, diese jedoch nicht im generierten XML-Dokument zurückgegeben werden sollen.
Die sql:hide-Anmerkung akzeptiert einen booleschen Wert (0 = false, 1 = true). Zulässig sind die Werte 0, 1, true und false.
Beispiele
Damit mithilfe der folgenden Beispiele funktionierende Beispiele erstellt werden, müssen bestimmte Anforderungen erfüllt sein. Weitere Informationen finden Sie unter Anforderungen zum Ausführen von SQLXML-Beispielen.
A. Angeben von sql:hide für ein Attribut
Das XSD-Schema in diesem Beispiel besteht aus einem <Person.Contact>-Element mit den Attributen ContactID, FirstName und LastName.
Das <Person.Contact>-Element ist von einem komplexen Typ und wird daher der gleichnamigen Tabelle zugeordnet (Standardzuordnung). Alle Attribute des <Person.Contact>-Elements sind von einem einfachen Typ und werden den gleichnamigen Spalten in der Person.Contact-Tabelle der Datenbank AdventureWorks zugeordnet. Im Schema wird die sql:hide-Anmerkung für das ContactID-Attribut angegeben. Wenn eine XQuery-Abfrage mit diesem Schema ausgeführt wird, wird das ContactID-Attribut nicht im XML-Dokument ausgegeben.
<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>
So testen Sie eine XPath-Beispielabfrage mit dem Schema
Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen Hide.xml.
Kopieren Sie die folgende Vorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Namen HideT.xml in dem Verzeichnis, in dem Sie zuvor Hide.xml gespeichert haben.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="Hide.xml"> /Person.Contact[@ContactID="1"] </sql:xpath-query> </ROOT>
Der für das Zuordnungschema (Hide.xml) angegebene Verzeichnispfad bezieht sich auf das Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:
mapping-schema="C:\MyDir\Hide.xml"
Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um die Vorlage auszuführen.
Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML 4.0-Abfragen.
Im Folgenden wird das Resultset aufgeführt:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Person.Contact FirstName="Gustavo" LastName="Achong" />
</ROOT>
Wenn sql:hide für ein Element angegeben wird, werden das betreffende Element und dessen Attribute oder untergeordneten Elemente nicht im generierten XML-Dokument ausgegeben. Es folgt ein anderes XSD-Schema, in dem sql:hide für das <OD>-Element angegeben wird:
<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>
Wenn eine XQuery-Abfrage (beispielsweise /Customers[@CID="1"]) mit diesem Schema ausgeführt wird, sind das <OD>-Element und dessen untergeordnete Elemente nicht im resultierenden XML-Dokument enthalten, wie aus dem folgenden Teilergebnis ersichtlich ist:
<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>