Elementen en kenmerken verbergen met behulp van sql:hide
van toepassing op:SQL ServerAzure SQL Database-
Wanneer een XPath-query wordt uitgevoerd op basis van een XSD-schema, bevat het resulterende XML-document elementen en kenmerken die zijn opgegeven in het schema. U kunt opgeven dat sommige elementen en kenmerken in het schema worden verborgen met behulp van de sql:hide annotatie. Dit is handig wanneer voor de selectiecriteria van de query bepaalde elementen of kenmerken in het schema zijn vereist, maar u niet wilt dat deze worden geretourneerd in het XML-document dat wordt gegenereerd.
De sql:hide annotatie gebruikt een Booleaanse waarde (0=false, 1=true). De acceptabele waarden zijn 0, 1, waar en onwaar.
Voorbeelden
Als u werkvoorbeelden wilt maken met behulp van de volgende voorbeelden, moet u aan bepaalde vereisten voldoen. Zie vereisten voor het uitvoeren van SQLXML-voorbeeldenvoor meer informatie.
Een. Sql:hide opgeven voor een kenmerk
Het XSD-schema in dit voorbeeld bestaat uit een element <Person.Contact> met ContactID, FirstNameen LastName kenmerken.
Het element <Person.Contact> is van complex type en wordt daarom toegewezen aan de tabel met dezelfde naam (standaardtoewijzing). Alle kenmerken van <Person.Contact> element zijn van eenvoudig type en worden toegewezen aan kolommen met dezelfde namen in de Person.Contactable in de AdventureWorks-database. In het schema wordt de aantekening sql:hide opgegeven op het kenmerk ContactID. Wanneer een XPath-query is opgegeven voor dit schema, wordt de ContactID- niet geretourneerd in het XML-document.
<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>
Een XPath-voorbeeldquery testen op basis van het schema
Kopieer de bovenstaande schemacode en plak deze in een tekstbestand. Sla het bestand op als Hide.xml.
Kopieer de volgende sjabloon en plak deze in een tekstbestand. Sla het bestand op als HideT.xml in dezelfde map waarin u Hide.xmlhebt opgeslagen.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="Hide.xml"> /Person.Contact[@ContactID="1"] </sql:xpath-query> </ROOT>
Het pad naar de map dat is opgegeven voor het toewijzingsschema (Hide.xml) is relatief ten opzichte van de map waarin de sjabloon wordt opgeslagen. Er kan ook een absoluut pad worden opgegeven, bijvoorbeeld:
mapping-schema="C:\MyDir\Hide.xml"
Maak en gebruik het SQLXML 4.0-testscript (Sqlxml4test.vbs) om de sjabloon uit te voeren.
Zie ADO gebruiken om SQLXML 4.0-query's uit te voerenvoor meer informatie.
Dit is de resultatenset:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Person.Contact FirstName="Gustavo" LastName="Achong" />
</ROOT>
Wanneer sql:hide is opgegeven voor een element, worden het element en de bijbehorende kenmerken of onderliggende elementen niet weergegeven in het XML-document dat wordt gegenereerd. Hier volgt een ander XSD-schema waarin sql:hide is opgegeven in het <OD->-element:
<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>
Wanneer een XPath-query (bijvoorbeeld /Customers[@CID="1"]
) is opgegeven voor dit schema, bevat het XML-document dat wordt gegenereerd niet het <OD->-element en de onderliggende elementen, zoals wordt weergegeven in dit gedeeltelijke resultaat:
<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>