Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
gäller för:SQL Server
Azure SQL Database
Du kan specificera frågor mot ett annoterat schema för att hämta data från databasen genom att ange XPath-frågor i en mall mot XSD-schemat.
Elementet< sql:xpath-query> låter dig specificera en XPath-fråga mot XML-vyn som definieras av det annoterade schemat. Det annoterade schemat mot vilket XPath-frågan ska utföras identifieras genom att använda mapping-schema-attributet för elementet< sql:xpath-query>.
Mallar är giltiga XML-dokument som innehåller en eller flera frågor. FOR XML- och XPath-frågorna returnerar ett dokumentfragment. Mallar fungerar som behållare för dokumentfragmenten; Mallar ger alltså ett sätt att specificera ett enda element på högsta nivå.
Exemplen i detta ämne använder mallar för att specificera en XPath-fråga mot ett annoterat schema för att hämta data från databasen.
Till exempel, betrakta detta annoterade 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>
För illustrationens skull lagras detta XSD-schema i en fil som heter Schema2.xml. Du kan då ha en XPath-fråga mot det annoterade schemat som anges i följande mallfil (Schema2T.xml):
<sql:xpath-query
xmlns:sql="urn:schemas-microsoft-com:xmlsql"
>
Person.Contact[@ContactID="1"]
</sql:xpath-query>
Du kan sedan skapa och använda SQLXML 4.0 Test Script (Sqlxml4test.vbs) för att köra frågan som en del av en mallfil. För mer information, se Annotated XDR Schemas (föråldrad i SQLXML 4.0).
Användning av inline-mappningsscheman
Ett annoterat schema kan inkluderas direkt i en mall, och sedan kan en XPath-fråga specificeras i mallen mot det inbyggda schemat. Mallen kan också vara ett updategram.
En mall kan innehålla flera inbyggda scheman. För att använda ett inline-schema som ingår i en mall, ange id-attributet med ett unikt värde på <xsd:schema-elementet> och använd sedan #idvalue för att referera till det inline-schemat. id-attributet är identiskt i beteende med sql:id ({urn:schemas-microsoft-com:xml-sql}id) som används i XDR-scheman.
Till exempel specificerar följande mall två inline-annoterade scheman:
<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>
Mallen specificerar också två XPath-frågor. Var och en av <xpath-query-elementen> identifierar entydigt mappningsschemat genom att specificera mappningsschema-attributet .
När du anger ett inline-schema i mallen måste sql:is-mapping-schema-annotationen också anges på xsd:schema-elementet<>. sql:is-mapping-schemat tar ett boolesk värde (0=falskt, 1=sant). Ett inline-schema med sql:is-mapping-schema="1" behandlas som ett inline-annoterat schema och returneras inte i XML-dokumentet.
annotationen sql:is-mapping-schema tillhör mallnamnrymden urn:schemas-microsoft-com:xml-sql.
För att testa detta exempel, spara mallen (InlineSchemaTemplate.xml) i en lokal katalog och skapa sedan och använd SQLXML 4.0 Test Script (Sqlxml4test.vbs) för att köra mallen. Mer information finns i Använda ADO för att köra SQLXML 4.0-frågor.
Förutom att specificera mapping-schema-attributet på sql:xpath-query-elementet<> i en mall (när det finns en XPath-fråga), eller på <updg:sync-elementet> i ett updategram, kan du göra följande:
Ange attributet mapping-schema på ROOT-elementet<> (global deklaration) i mallen. Detta mappningsschema blir då standardschemat som används av alla XPath- och updategram-noder som saknar explicit mappningsschema-annotation .
Ange attributet mapping schema genom att använda ADO Command-objektet .
Mapping-schema-attributet som anges på <xpath-query> eller <updg:sync-elementet> har högst prioritet; ADO Command-objektet har lägst prioritet.
Observera att om du specificerar en XPath-fråga i en mall och inte anger ett mappningsschema mot vilket XPath-frågan körs, behandlas XPath-frågan som en dbobjekttyp-fråga . Till exempel, betrakta denna mall:
<sql:xpath-query
xmlns:sql="urn:schemas-microsoft-com:xmlsql">
Production.ProductPhoto[@ProductPhotoID='100']/@LargePhoto
</sql:xpath-query>
Mallen specificerar en XPath-fråga men specificerar inte ett mappningsschema. Därför behandlas denna fråga som en dbobjekt-typ där Production.ProductPhoto är tabellnamnet och @ProductPhotoID='100' är ett predikat som hittar ett produktfoto med ID-värdet 100. @LargePhoto är kolumnen från vilken värdet ska hämtas.