Användning av annoterade XSD-scheman i frågor (SQLXML 4.0)

gäller för:SQL ServerAzure 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-attributetsql: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.