Membandingkan XML yang di ketik dengan XML yang tidak dititip

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Anda dapat membuat variabel, parameter, dan kolom jenis xml . Anda dapat secara opsional mengaitkan kumpulan skema XML dengan variabel, parameter, atau kolom jenis xml . Dalam hal ini, instans jenis data xml disebut ditik. Jika tidak, instans XML disebut tidak ditiru.

XML yang dibentuk dengan baik dan jenis data XML

Jenis data xml mengimplementasikan jenis data xml standar ISO. Oleh karena itu, ia dapat menyimpan dokumen XML versi 1.0 yang terbentuk dengan baik dan juga disebut fragmen konten XML dengan simpul teks dan jumlah elemen tingkat atas yang sepele di kolom XML yang tidak dititik. Sistem memeriksa bahwa data terbentuk dengan baik, tidak mengharuskan kolom terikat ke skema XML, dan menolak data yang tidak terbentuk dengan baik dalam arti yang diperluas. Ini benar juga dari variabel dan parameter XML yang tidak dititik.

Skema XML

Skema XML menyediakan hal berikut:

  • Batasan validasi. Setiap kali instans xml yang diketik ditetapkan atau dimodifikasi, SQL Server memvalidasi instans.

  • Informasi jenis data. Skema menyediakan informasi tentang jenis atribut dan elemen dalam instans jenis data xml . Informasi jenis menyediakan semantik operasional yang lebih tepat untuk nilai yang terkandung dalam instans daripada yang dimungkinkan dengan xml yang tidak dititik. Misalnya, operasi aritmatika desimal dapat dilakukan pada nilai desimal, tetapi tidak pada nilai string. Karena itu, penyimpanan XML yang di ketik dapat dibuat secara signifikan lebih ringkas daripada XML yang tidak dititip.

Memilih XML yang dititik atau tidak dititip

Gunakan tipe data xml yang tidak dititik dalam situasi berikut:

  • Anda tidak memiliki skema untuk data XML Anda.

  • Anda memiliki skema, tetapi Anda tidak ingin server memvalidasi data. Ini terkadang terjadi ketika aplikasi melakukan validasi sisi klien sebelum menyimpan data di server, atau untuk sementara menyimpan data XML yang tidak valid sesuai dengan skema, atau menggunakan komponen skema yang tidak didukung di server.

Gunakan tipe data xml yang dititik dalam situasi berikut:

  • Anda memiliki skema untuk data XML dan Anda ingin server memvalidasi data XML Anda sesuai dengan skema XML.

  • Anda ingin memanfaatkan pengoptimalan penyimpanan dan kueri berdasarkan informasi jenis.

  • Anda ingin memanfaatkan informasi jenis dengan lebih baik selama kompilasi kueri Anda.

Kolom, parameter, dan variabel XML yang ditik dapat menyimpan dokumen atau konten XML. Namun, Anda harus menentukan dengan bendera apakah Anda menyimpan dokumen atau konten pada saat deklarasi. Selain itu, Anda harus menyediakan kumpulan skema XML. Tentukan DOKUMEN jika setiap instans XML memiliki tepat satu elemen tingkat atas. Jika tidak, gunakan KONTEN. Pengkompilasi kueri menggunakan bendera DOKUMEN dalam pemeriksaan jenis selama kompilasi kueri untuk menyimpulkan elemen tingkat atas singleton.

Membuat XML yang dititik

Sebelum Anda dapat membuat variabel xml, parameter, atau kolom yang diketik, Anda harus terlebih dahulu mendaftarkan koleksi skema XML dengan menggunakan CREATE XML SCHEMA COLLECTION (Transact-SQL). Anda kemudian dapat mengaitkan koleksi skema XML dengan variabel, parameter, atau kolom tipe data xml .

Dalam contoh berikut, konvensi penamaan dua bagian digunakan untuk menentukan nama kumpulan skema XML. Bagian pertama adalah nama skema, dan bagian kedua adalah nama koleksi skema XML.

Contoh: Mengaitkan koleksi skema dengan variabel jenis XML

Contoh berikut membuat variabel jenis xml dan mengaitkan koleksi skema dengannya. Koleksi skema yang ditentukan dalam contoh sudah diimpor dalam database AdventureWorks .

DECLARE @x xml (Production.ProductDescriptionSchemaCollection);

Contoh: Menentukan Skema untuk kolom jenis xml

Contoh berikut membuat tabel dengan kolom jenis xml dan menentukan skema untuk kolom:

CREATE TABLE T1(
Col1 int,
Col2 xml (Production.ProductDescriptionSchemaCollection));

Contoh: Meneruskan parameter jenis XML ke prosedur tersimpan

Contoh berikut meneruskan parameter jenis xml ke prosedur tersimpan dan menentukan skema untuk variabel:

CREATE PROCEDURE SampleProc
  @ProdDescription xml (Production.ProductDescriptionSchemaCollection)
AS
...

Perhatikan hal berikut ini tentang kumpulan skema XML:

  • Kumpulan skema XML hanya tersedia dalam database tempatnya didaftarkan dengan menggunakan Membuat Koleksi Skema XML.

  • Jika Anda mentransmisikan dari string ke jenis data xml yang diketik, penguraian juga melakukan validasi dan pengetikan, berdasarkan namespace skema XML dalam koleksi yang ditentukan.

  • Anda dapat mentransmisikan dari jenis data xml yang diketik ke jenis data xml yang tidak diketik, dan sebaliknya.

Untuk informasi selengkapnya tentang cara lain untuk menghasilkan XML di SQL Server, lihat Membuat Instans Data XML. Setelah XML dihasilkan, xml dapat ditetapkan baik ke variabel jenis data xml atau disimpan dalam kolom jenis xml untuk pemrosesan tambahan.

Dalam hierarki tipe data, jenis data xml muncul di bawah sql_variant dan jenis yang ditentukan pengguna, tetapi di atas salah satu jenis bawaan.

Contoh: Menentukan faset untuk membatasi kolom XML yang diketik

Untuk kolom xml yang diketik, Anda dapat membatasi kolom untuk hanya mengizinkan elemen tingkat atas tunggal untuk setiap instans yang disimpan di dalamnya. Anda melakukan ini dengan menentukan faset opsional DOCUMENT saat tabel dibuat, seperti yang diperlihatkan dalam contoh berikut:

CREATE TABLE T(Col1 xml
   (DOCUMENT Production.ProductDescriptionSchemaCollection));
GO
DROP TABLE T;
GO

Secara default, instans yang disimpan dalam kolom xml yang di ketik disimpan sebagai konten XML dan bukan sebagai dokumen XML. Hal ini memungkinkan hal-hal berikut:

  • Nol atau banyak elemen tingkat atas

  • Simpul teks dalam elemen tingkat atas

Anda juga dapat secara eksplisit menentukan perilaku ini dengan menambahkan CONTENT faset, seperti yang ditunjukkan dalam contoh berikut:

CREATE TABLE T(Col1 xml(CONTENT Production.ProductDescriptionSchemaCollection));
GO -- Default

Anda dapat menentukan faset DOKUMEN/KONTEN opsional di mana saja Anda menentukan jenis xml (xml yang di ketik). Misalnya, saat Membuat variabel xml yang ditik, Anda dapat menambahkan faset DOKUMEN/KONTEN, seperti yang diperlihatkan dalam hal berikut:

declare @x xml (DOCUMENT Production.ProductDescriptionSchemaCollection);

Definisi Tipe Dokumen (DTD)

Kolom , variabel, dan parameter tipe data xml dapat diketik dengan menggunakan skema XML, tetapi tidak dengan menggunakan DTD. Namun, DTD sebaris dapat digunakan untuk XML yang tidak dijenis dan ditik untuk menyediakan nilai default dan untuk mengganti referensi entitas dengan formulir yang diperluas.

Anda dapat mengonversi DTD ke dokumen skema XML dengan menggunakan alat pihak ketiga, dan memuat skema XML ke dalam database.

Memutakhirkan XML yang diketik dari SQL Server 2005

SQL Server 2008 (10.0.x) membuat beberapa ekstensi untuk dukungan Skema XML, termasuk dukungan untuk validasi laks, peningkatan penanganan data instans xs:date, xs:time dan xs:dateTime , dan menambahkan dukungan untuk jenis daftar dan union. Dalam kebanyakan kasus, perubahan tidak memengaruhi pengalaman peningkatan. Namun jika Anda menggunakan koleksi Skema XML di SQL Server 2005 (9.x) yang mengizinkan nilai tipe xs:date, xs:time, atau xs:dateTime (atau subjenis apa pun) maka langkah-langkah peningkatan berikut terjadi saat Anda melampirkan database SQL Server 2005 (9.x) Anda ke versi SQL Server yang lebih baru:

  1. Untuk setiap kolom XML, yang diketik dengan Koleksi Skema XML yang berisi elemen atau atribut yang diketik sebagai xs:anyType, xs:anySimpleType, xs:date atau subjenisnya, xs:time atau subjenis apa pun, atau xs:dateTime atau subjenisnya, atau merupakan tipe gabungan atau daftar yang berisi salah satu jenis berikut ini:

    1. Semua indeks XML pada kolom akan dinonaktifkan.

    2. Semua nilai SQL Server 2005 (9.x) akan terus diwakili dalam zona waktu Z, karena nilai tersebut telah dinormalisasi ke zona waktu Z.

    3. Setiap nilai xs:date atau xs:dateTime yang lebih kecil dari 1 Januari tahun 1 akan menyebabkan kesalahan runtime saat indeks dibangun kembali atau pernyataan XQuery atau XML-DML dijalankan terhadap jenis data xml yang berisi nilai tersebut.

  2. Setiap tahun negatif dalam xs:date atau xs:dateTime faset atau nilai default dalam koleksi Skema XML akan secara otomatis diperbarui ke nilai terkecil yang diizinkan oleh jenis xs:date atau xs:dateTime dasar (misalnya, 0001-01-01T00:00:00.0000000Z untuk xs:dateTime).

Anda masih dapat menggunakan pernyataan T-SQL SELECT untuk mengambil seluruh jenis data xml , meskipun berisi tahun negatif. Disarankan agar Anda mengganti tahun negatif dengan tahun dalam rentang yang baru didukung atau mengubah jenis elemen atau atribut ke xs:string.

Baca juga