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


Annotált XSD sémák használata lekérdezésekben (SQLXML 4.0)

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

Megadhatod a lekérdezéseket egy annotált sémához az adatok lekérdezéséhez az adatbázisból, ha egy sablonban megadod az XPath lekérdezéseket az XSD séma ellen.

A< sql:xpath-query> elem lehetővé teszi, hogy egy XPath lekérdezést megadj az XML nézet ellen, amelyet az annotált séma definiál. Az annotált sémát, amelyhez az XPath lekérdezést kell végrehajtani, a sql:xpath-query> elem mapping-séma attribútumával< azonosítjuk.

A sablonok érvényes XML dokumentumok, amelyek egy vagy több lekérdezést tartalmaznak. Az FOR XML és XPath lekérdezések egy dokumentumtöredéket adnak vissza. A sablonok a dokumentumtöredékek tárolójaként működnek; így sablonok lehetővé teszik, hogy egyetlen, felső szintű elemet határozzunk meg.

A témában szereplő példák sablonokat használnak arra, hogy egy XPath lekérdezést megadjanak egy annotált sémához képest, hogy adatokat nyerjenek az adatbázisból.

Például vegyük ezt a jegyzetelt sémát:

<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>  

Illusztráció céljából ez az XSD séma a Schema2.xmlnevű fájlban van tárolva. Ezután lehet XPath lekérdezést a következő sablonfájlban (Schema2T.xmlmegadott annotált sémához képest :

<sql:xpath-query   
     xmlns:sql="urn:schemas-microsoft-com:xmlsql"  
     >  
          Person.Contact[@ContactID="1"]  
</sql:xpath-query>  

Ezután létrehozhatod és használhatod az SQLXML 4.0 Test Scriptet (Sqlxml4test.vbs) a lekérdezés végrehajtásához sablonfájl részeként. További információért lásd: Annotált XDR sémák (az SQLXML 4.0-ban elavult) című részben.

Inline leképezési sémák használata

Egy annotált séma közvetlenül beilleszthető egy sablonba, majd egy XPath lekérdezés is megadható a sablonban az inline séma ellen. A sablon lehet updategram is.

Egy sablon több sorbeli sémát is tartalmazhat. Egy sablonban található besoros sémát használva megadjuk az id attribútumot az xsd:schema> elem egyedi értékével<, majd használd #idvalue az inline sémához hivatkozni. Az id attribútum viselkedése megegyezik az XDR sémáiban használt sql:id ({urn:schemas-microsoft-com:xml-sql}id)-vel.

Például a következő sablon két inline-annotált sémát ad meg:

<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>  

A sablon két XPath lekérdezést is megad. Minden <xpath-query> elem egyedileg azonosítja a leképezési sémát azáltal, hogy megadja a leképezési séma attribútumát.

Amikor bevonulsz egy besoros sémát a sablonban, a sql:is-mapping-séma annotációt is meg kell határozni az <xsd:schema> elemen. A sql:is-mapping-séma egy Boole-értéket vesz fel (0=hamis, 1=true). Egy inline sémát sql:is-mapping-schema="1" sorban jegyzetelt sémának kezelnek, és nem térnek vissza az XML dokumentumban.

A sql:is-mapping-schema annotáció az urn:schemas-microsoft-com:xml-sql sablonnévtérhez tartozik.

Ennek a példának a teszteléséhez mentse el a sablont (InlineSchemaTemplate.xml) egy helyi könyvtárba, majd hozza létre és használja az SQLXML 4.0 tesztszkriptet (Sqlxml4test.vbs) a sablon végrehajtásához. További információ: SqlXML 4.0-lekérdezések végrehajtása az ADO használatával.

A mapping-schema attribútumot a <sql:xpath-query> elemen (amikor XPath lekérdezés van), vagy <az updategram updg:sync> elemén megadva a következőket is megteheted:

  • Megadjuk a térkép-séma attribútumot a <sablon ROOT> elemén (globális deklaráció) a sablonban. Ez a leképezési séma lesz az alapértelmezett séma, amelyet minden XPath és updategram csomópont használ, amelyeknek nincs explicit leképezési séma annotációja.

  • A leképezési séma attribútumot az ADO Command objektum használatával határozd meg.

Az xpath-query> vagy updg:sync elemen megadott mapping-séma attribútumnak< van a legmagasabb preceden; az ADO Command objektumnak van a legalacsonyabb precedence.><

Fontos megjegyezni, hogy ha egy sablonban XPath lekérdezést jelölsz meg, és nem jelölsz meg olyan leképezési sémát, amelyen az XPath lekérdezést végrehajtják, akkor az XPath lekérdezést dbobject típusú lekérdezésként kezeljük. Például vegyük ezt a sablont:

<sql:xpath-query   
     xmlns:sql="urn:schemas-microsoft-com:xmlsql">  
          Production.ProductPhoto[@ProductPhotoID='100']/@LargePhoto  
</sql:xpath-query>  

A sablon XPath lekérdezést ad meg, de nem határoz meg leképezési sémát. Ezért ezt a lekérdezést dbobject típusú lekérdezésként kezelik, amelyben a Production.ProductPhoto a tábla neve, @ProductPhotoID=a '100' pedig egy predikátum, amely egy termékfotót talál, amelynek azonosítója 100. @LargePhoto az oszlop, amelyből az értéket lehet visszanyerni.