Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.