Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Je kunt queries specificeren tegen een geannoteerd schema om data uit de database op te halen door XPath-queries in een sjabloon te specificeren tegen het XSD-schema.
Het <sql:xpath-query-element> stelt je in staat een XPath-query te specificeren tegen de XML-weergave die door het geannoteerde schema wordt gedefinieerd. Het geannoteerde schema waarop de XPath-query wordt uitgevoerd, wordt geïdentificeerd door gebruik te maken van het mapping-schema-attribuut van het <sql:xpath-query-element> .
Sjablonen zijn geldige XML-documenten die één of meer queries bevatten. De FOR XML- en XPath-queries geven een documentfragment terug. Sjablonen fungeren als containers voor de documentfragmenten; Sjablonen bieden dus een manier om één enkel, topniveau element te specificeren.
De voorbeelden in dit onderwerp gebruiken sjablonen om een XPath-query te specificeren tegen een geannoteerd schema om data uit de database op te halen.
Beschouw bijvoorbeeld dit geannoteerde schema:
<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>
Ter illustratie wordt dit XSD-schema opgeslagen in een bestand genaamd Schema2.xml. Je zou dan een XPath-query kunnen uitvoeren tegen het geannoteerde schema dat in het volgende sjabloonbestand is gespecificeerd (Schema2T.xml):
<sql:xpath-query
xmlns:sql="urn:schemas-microsoft-com:xmlsql"
>
Person.Contact[@ContactID="1"]
</sql:xpath-query>
Je kunt vervolgens het SQLXML 4.0 Test Script (Sqlxml4test.vbs) aanmaken en gebruiken om de query uit te voeren als onderdeel van een sjabloonbestand. Voor meer informatie, zie Annotated XDR Schemas (verouderd in SQLXML 4.0).
Gebruik van inline mappingschema's
Een geannoteerd schema kan direct in een sjabloon worden opgenomen, waarna een XPath-query in het sjabloon kan worden gespecificeerd tegen het inline schema. Het sjabloon kan ook een updategram zijn.
Een sjabloon kan meerdere inline schema's bevatten. Om een inline schema te gebruiken dat in een sjabloon is opgenomen, specificeer je het id-attribuut met een unieke waarde op het <xsd:schema-element> en gebruik je #idvalue vervolgens om het inline schema te refereren. Het id-attribuut is identiek in gedrag aan het sql:id ({urn:schemas-microsoft-com:xml-sql}id) dat in XDR-schema's wordt gebruikt.
Bijvoorbeeld, het volgende sjabloon specificeert twee inline-annotated schema'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>
Het sjabloon specificeert ook twee XPath-zoekopdrachten. Elk van de <xpath-query-elementen> identificeert het mapping-schema uniek door het mapping-schema-attribuut te specificeren.
Wanneer je een inline schema in het sjabloon specificeert, moet de sql:is-mapping-schema annotatie ook worden gespecificeerd op het <xsd:schema-element> . Het sql:is-mapping-schema neemt een Booleaanse waarde aan (0=false, 1=true). Een inline schema met sql:is-mapping-schema="1" wordt behandeld als een inline geannoteerd schema en wordt niet teruggegeven in het XML-document.
De sql:is-mapping-schema annotatie behoort tot de sjabloonnaamruimte urn:schemas-microsoft-com:xml-sql.
Om dit voorbeeld te testen, sla je het sjabloon (InlineSchemaTemplate.xml) op in een lokale map en maak je vervolgens het SQLXML 4.0 Test Script (Sqlxml4test.vbs) aan en gebruik je het sjabloon om het sjabloon uit te voeren. Zie ADO gebruiken om SQLXML 4.0-query's uit te voeren voor meer informatie.
Naast het specificeren van het mapping-schema-attribuut op het <sql:xpath-query-element> in een sjabloon (wanneer er een XPath-query is), of op <updg:sync-element> in een updategram, kun je het volgende doen:
Specificeer het mapping-schema-attribuut op het <ROOT-element> (globale declaratie) in het sjabloon. Dit mappingschema wordt dan het standaardschema dat door alle XPath- en updategram-nodes zonder expliciete mapping-schema-annotatie wordt gebruikt.
Specificeer het mapping schema-attribuut door gebruik te maken van het ADO Command-object .
Het mapping-schema-attribuut dat wordt gespecificeerd op het <xpath-query> of <updg:sync-element> heeft de hoogste prioriteit; het ADO Command-object heeft de laagste prioriteit.
Let op: als je een XPath-query in een template specificeert en geen mapping schema waartegen de XPath-query wordt uitgevoerd, wordt de XPath-query behandeld als een dbobject-type query. Overweeg bijvoorbeeld deze template:
<sql:xpath-query
xmlns:sql="urn:schemas-microsoft-com:xmlsql">
Production.ProductPhoto[@ProductPhotoID='100']/@LargePhoto
</sql:xpath-query>
Het sjabloon specificeert een XPath-query, maar geeft geen mappingschema op. Daarom wordt deze query behandeld als een dbobject-type query waarbij Production.ProductPhoto de tabelnaam is en @ProductPhotoID='100' een predicaat is dat een productfoto met de ID-waarde 100 vindt. @LargePhoto is de kolom waaruit de waarde wordt opgehaald.