Megosztás a következőn keresztül:


Az XML-dokumentum sémaelemeinek kizárása az sql:mapped használatával

A következőkre vonatkozik:SQL ServerAzure SQL Database

Az XSD séma minden eleme és attribútuma egy adatbázis táblához/nézethez és oszlophoz kapcsolódik az alapértelmezett leképezés miatt. Ha olyan elemet szeretnél létrehozni az XSD sémában, amely nem egyezik le semmilyen adatbázis táblára (nézetre) vagy oszlopra, és nem jelenik meg az XML-ben, akkor megadhatod a sql:mapped annotációt.

A sql:mapped annotáció különösen hasznos, ha a séma nem módosítható, vagy ha a sémát más forrásokból származó XML validálására használják, mégis tartalmaz olyan adatokat, amelyek nem tárolódnak az adatbázisban. A sql:mapped annotáció abban különbözik a sql:is-constant szintjétől, hogy a leképezetlen elemek és attribútumok nem jelennek meg az XML dokumentumban.

A sql:mapped annotáció egy Boole-értéket vesz fel (0 = hamis, 1 = igaz). Az elfogadható értékek 0, 1, igaz és hamis.

Példák

A következő példák alapján működő minták létrehozásához bizonyos követelményeknek kell megfelelned. További információért lásd: Az SQLXML futtatási követelmények példái.

A. A sql:mapped annotáció megadása

Tegyük fel, hogy van egy XSD sémád valami más forrásból. Ez az XSD séma egy <Person.Contact> elemből áll, amely ContactID, Keresztnév, Vezetéknév és HomeAddress attribútumokat tartalmaz.

Az XSD séma leképezésekor az AdventureWorks adatbázis Person.Contact táblájára a sql:mapped a HomeAddress attribútumban van megadva, mert az Employees tábla nem tárolja az alkalmazottak otthoni címeit. Ennek eredményeként ez az attribútum nem kerül az adatbázishoz leképezve, és nem tér vissza az XML dokumentumban, amikor XPath lekérdezést megadnak a leképezési séma ellen.

Az alapértelmezett leképezés a séma többi részében zajlik. A< Person.Contact> elem a Person.Contact táblára van leképezve, és az összes attribútum ugyanazzal a nevű oszlopokkal egyezik a Person.Contact táblában.

<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:attribute name="HomeAddress" type="xsd:string"   
                     sql:mapped="false" />  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  
Egy minta-XPath lekérdezés tesztelése a sémához
  1. Másold le a fenti sémakódot, és illesztsd be egy szövegfájlba. Mentse el a fájlt sql-mapped.xml.

  2. Másold le a következő sablont, és illesztsd be egy szövegfájlba. Mentsd a fájlt sql-mappedT.xml-ként ugyanabba a könyvtárba, ahol sql-mapped.xmlmentetted.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
        <sql:xpath-query mapping-schema="sql-mapped.xml">  
            /Person.Contact[@ContactID < 10]  
        </sql:xpath-query>  
    </ROOT>  
    

    A leképezési sémához (MySchema.xml) megadott könyvtári út viszonyítja azt a könyvtárat, ahol a sablon mentő. Abszolút út is meghatározható, például:

    mapping-schema="C:\MyDir\sql-mapped.xml"  
    
  3. Hozd létre és használd az SQLXML 4.0 Test Scriptet (Sqlxml4test.vbs) a sablon végrehajtásához.

    További információért lásd: Using ADO to execute SQLXML Queries.

Ez az eredményhalmaz:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <Person.Contact ContactID="1" FirstName="Gustavo" LastName="Achong" />   
  <Person.Contact ContactID="2" FirstName="Catherine" LastName="Abel" />   
  <Person.Contact ContactID="3" FirstName="Kim" LastName="Abercrombie" />   
  <Person.Contact ContactID="4" FirstName="Humberto" LastName="Acevedo" />   
  <Person.Contact ContactID="5" FirstName="Pilar" LastName="Ackerman" />   
  <Person.Contact ContactID="6" FirstName="Frances" LastName="Adams" />   
  <Person.Contact ContactID="7" FirstName="Margaret" LastName="Smith" />   
  <Person.Contact ContactID="8" FirstName="Carla" LastName="Adams" />   
  <Person.Contact ContactID="9" FirstName="Jay" LastName="Adams" />   
</ROOT>  

Fontos megjegyezni, hogy a ContactID, Keresztnév és Vezetéknév megtalálhatók, de a Házi cím nem azért van, mert a leképezési séma 0-t jelölt meg a sql:mapped attribútumhoz.

Lásd még:

Az XSD elemek és attribútum alapértelmezett leképezése táblákhoz és oszlopokhoz (SQLXML 4.0)