Anpassade XSD-mappningar till tabeller/kolumner (SQLXML)

gäller för:SQL ServerAzure SQL Database

När man använder ett XSD-schema för att tillhandahålla en XML-vy av relationsdatabasen måste elementen och attributen i schemat mappas till tabeller och kolumner i databasen. Raderna i databastabellen/vyn kommer att mappas till element i XML-dokumentet. Kolumnvärdena i databasen mappas till attribut eller element.

När XPath-frågor specificeras mot det annoterade XSD-schemat hämtas data för elementen och attributen i schemat från tabellerna och kolumnerna som de mappas till. För att erhålla ett enda värde från databasen måste den mappning som specificeras i XSD-schemat ha både relations- och fältspecifikation. Om namnet på ett element/attribut inte är samma namn som tabellen/vyn eller kolumnnamnet som det mappas till, används sql:relation - och sql:field-annotationerna för att specificera mappningen mellan ett element eller attribut i ett XML-dokument och tabellen (vyn) eller kolumnen i en databas.

SQL-relation

sql:relationsannotationen läggs till för att mappa en XML-nod i XSD-schemat till en databastabell. Namnet på en tabell (vy) anges som värdet på sql:relation-annotationen .

När sql:relation specificeras på ett element gäller omfattningen av denna annotation för alla attribut och barnelement som beskrivs i den komplexa typdefinitionen av det elementet, vilket ger en genväg för att skriva annotationer.

sql:relationsannotationen är också användbar när identifierare som är giltiga i Microsoft SQL Server inte är giltiga i XML. Till exempel är "Order Details" ett giltigt tabellnamn i SQL Server men inte i XML. I sådana fall kan sql:relation-annotationen användas för att specificera mappningen, till exempel:

<xsd:element name="OD" sql:relation="[Order Details]">  

sql-field

SQL-fältannotationen mappar ett element eller attribut till en databaskolumn. sql:field-annotationen läggs till för att mappa en XML-nod i schemat till en databaskolumn. Du kan inte ange sql:field på ett tomt innehållselement.

Examples

För att skapa arbetsprover med hjälp av följande exempel måste du uppfylla vissa krav. För mer information, se Krav för att köra SQLXML-exempel.

A. Specificering av sql:relation- och sql:field-annotationerna

I detta exempel består XSD-schemat av ett <Kontaktelement> av komplex typ med <FName-> och <LName-barnelement> samt attributet ContactID .

sql:relation-annoteringen mappar Kontakt-elementet <> till Person.Contact-tabellen i AdventureWorks-databasen. sql:field-annotationen mappar FName-elementet<> till FirstName-kolumnen och LName-elementet<> till LastName-kolumnen.

Ingen anteckning specificeras för attributet ContactID . Detta resulterar i en standardmappning av attributet till kolumnen med samma namn.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
  <xsd:element name="Contact" sql:relation="Person.Contact" >  
   <xsd:complexType>  
     <xsd:sequence>  
        <xsd:element name="FName"  
                     sql:field="FirstName"   
                     type="xsd:string" />   
        <xsd:element name="LName"    
                     sql:field="LastName"    
                     type="xsd:string" />  
     </xsd:sequence>  
        <xsd:attribute name="ContactID"   
                       type="xsd:integer" />  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  
För att testa en exempel-XPath-fråga mot schemat
  1. Kopiera schemakoden ovan och klistra in den i en textfil. Spara filen som MySchema-annotated.xml.

  2. Kopiera följande mall nedan och klistra in den i en textfil. Spara filen som MySchema-annotatedT.xml i samma katalog där du sparade MySchema-annotated.xml.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="MySchema-annotated.xml">  
        /Contact  
      </sql:xpath-query>  
    </ROOT>  
    

    Den katalogväg som anges för mappningsschemat (MySchema-annotated.xml) är relativ till katalogen där mallen sparas. En absolut väg kan också specificeras, till exempel:

    mapping-schema="C:\SqlXmlTest\MySchema-annotated.xml"  
    
  3. Skapa och använd SQLXML 4.0 Test Script (Sqlxml4test.vbs) för att köra mallen.

    För mer information, se Användning av ADO för att köra SQLXML-frågor.

Här är det delvisa resultatet:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">   
 <Contact ContactID="1">   
    <FName>Gustavo</FName>   
    <LName>Achong</LName>   
 </Contact>   
  .....  
</ROOT>