Bagikan melalui


Menggunakan Skema XSD Anotasi dalam Kueri (SQLXML 4.0)

Berlaku untuk: SQL ServerAzure SQL Database

Anda dapat menentukan kueri terhadap skema anotasi untuk mengambil data dari database dengan menentukan kueri XPath dalam templat terhadap skema XSD.

Elemen <sql:xpath-query> memungkinkan Anda menentukan kueri XPath terhadap tampilan XML yang ditentukan oleh skema yang diannotasi. Skema anotasi yang kueri XPath akan dijalankan diidentifikasi dengan menggunakan atribut mapping-schema dari <elemen sql:xpath-query> .

Templat adalah dokumen XML valid yang berisi satu atau beberapa kueri. Kueri FOR XML dan XPath mengembalikan fragmen dokumen. Templat bertindak sebagai kontainer untuk fragmen dokumen; dengan demikian, templat menyediakan cara untuk menentukan elemen tingkat atas tunggal.

Contoh dalam topik ini menggunakan templat untuk menentukan kueri XPath terhadap skema anotasi untuk mengambil data dari database.

Misalnya, pertimbangkan skema yang dianotasi ini:

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

Untuk tujuan ilustrasi, skema XSD ini disimpan dalam file bernama Schema2.xml. Anda kemudian dapat memiliki kueri XPath terhadap skema anotasi yang ditentukan dalam file templat berikut (Schema2T.xml):

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

Anda kemudian dapat membuat dan menggunakan Skrip Pengujian SQLXML 4.0 (Sqlxml4test.vbs) untuk menjalankan kueri sebagai bagian dari file templat. Untuk informasi selengkapnya, lihat Skema XDR Anotasi (Tidak digunakan lagi di SQLXML 4.0).

Menggunakan Skema Pemetaan Sebaris

Skema anotasi dapat disertakan langsung dalam templat, lalu kueri XPath dapat ditentukan dalam templat terhadap skema sebaris. Templat juga dapat berupa updategram.

Templat dapat menyertakan beberapa skema sebaris. Untuk menggunakan skema sebaris yang disertakan dalam templat, tentukan atribut id dengan nilai unik pada <elemen xsd:schema>, lalu gunakan #idvalue untuk mereferensikan skema sebaris. Atribut id identik dalam perilaku dengan sql:id ({urn:schemas-microsoft-com:xml-sql}id) yang digunakan dalam skema XDR.

Misalnya, templat berikut menentukan dua skema yang dianotasi sebaris:

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

Templat juga menentukan dua kueri XPath. Setiap elemen xpath-query> secara unik mengidentifikasi skema pemetaan dengan menentukan atribut mapping-schema.<

Saat Anda menentukan skema sebaris dalam templat, anotasi sql:is-mapping-schema juga harus ditentukan pada <elemen xsd:schema> . Sql:is-mapping-schema mengambil nilai Boolean (0=false, 1=true). Skema sebaris dengan sql:is-mapping-schema="1" diperlakukan sebagai skema anotasi sebaris dan tidak dikembalikan dalam dokumen XML.

Anotasi sql:is-mapping-schema milik namespace templat urn:schemas-microsoft-com:xml-sql.

Untuk menguji contoh ini, simpan templat (InlineSchemaTemplate.xml) di direktori lokal lalu buat dan gunakan Skrip Pengujian SQLXML 4.0 (Sqlxml4test.vbs) untuk menjalankan templat. Untuk informasi selengkapnya, lihat Menggunakan ADO untuk Menjalankan Kueri SQLXML 4.0.

Selain menentukan atribut mapping-schema pada< elemen sql:xpath-query> dalam templat (ketika ada kueri XPath), atau pada< elemen updg:sync> dalam updategram, Anda dapat melakukan hal berikut:

  • Tentukan atribut pemetaan-skema pada <elemen ROOT> (deklarasi global) dalam templat. Skema pemetaan ini kemudian menjadi skema default yang akan digunakan oleh semua simpul XPath dan updategram yang tidak memiliki anotasi skema pemetaan eksplisit.

  • Tentukan atribut skema pemetaan dengan menggunakan objek Perintah ADO.

Atribut mapping-schema yang ditentukan pada <elemen xpath-query> atau <updg:sync> memiliki prioritas tertinggi; objek Perintah ADO memiliki prioritas terendah.

Perhatikan bahwa jika Anda menentukan kueri XPath dalam templat dan tidak menentukan skema pemetaan tempat kueri XPath dijalankan, kueri XPath diperlakukan sebagai kueri jenis dbobject . Misalnya, pertimbangkan templat ini:

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

Templat menentukan kueri XPath tetapi tidak menentukan skema pemetaan. Oleh karena itu, kueri ini diperlakukan sebagai kueri jenis dbobject di mana Production.ProductPhoto adalah nama tabel dan @ProductPhotoID='100' adalah predikat yang menemukan foto produk dengan nilai ID 100. @LargePhoto adalah kolom tempat untuk mengambil nilai.