Bagikan melalui


Koleksi skema XML (SQL Server)

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance

Seperti yang dijelaskan dalam artikel xml (Transact-SQL), SQL Server menyediakan penyimpanan asli data XML melalui jenis data xml . Anda dapat secara opsional mengaitkan skema XSD dengan variabel atau kolom jenis xml melalui koleksi skema XML. Koleksi skema XML menyimpan skema XML yang diimpor dan kemudian digunakan untuk melakukan hal berikut:

  • Memvalidasi instans XML

  • Ketik data XML saat disimpan dalam database

Kumpulan skema XML adalah entitas metadata seperti tabel dalam database. Anda dapat membuat, memodifikasi, dan menghilangkannya. Skema yang ditentukan dalam pernyataan CREATE XML SCHEMA COLLECTION (Transact-SQL) secara otomatis diimpor ke dalam objek koleksi skema XML yang baru dibuat. Anda dapat mengimpor skema atau komponen skema tambahan ke dalam objek koleksi yang ada dalam database dengan menggunakan pernyataan ALTER XML SCHEMA COLLECTION (Transact-SQL).

Seperti yang dijelaskan dalam artikel, Xml yang Diketik vs. Tidak Diketik, XML yang disimpan dalam kolom atau variabel yang terkait dengan skema disebut sebagai XML yang diketik , karena skema menyediakan informasi jenis data yang diperlukan untuk data instans. SQL Server menggunakan informasi jenis ini untuk mengoptimalkan penyimpanan data.

Mesin pemrosesan kueri juga menggunakan skema untuk pemeriksaan jenis dan untuk mengoptimalkan kueri dan modifikasi data.

Selain itu, SQL Server menggunakan koleksi skema XML terkait, dengan xml yang diketik, untuk memvalidasi instans XML. Jika instans XML mematuhi skema, database memungkinkan instans disimpan dalam sistem dengan informasi jenisnya. Jika tidak, instans akan ditolak.

Anda dapat menggunakan fungsi intrinsik XML_SCHEMA_NAMESPACE untuk mengambil koleksi skema yang disimpan dalam database. Untuk informasi selengkapnya, lihat Menampilkan Koleksi Skema XML tersimpan.

Anda juga dapat menggunakan koleksi skema XML untuk mengetik variabel, parameter, dan kolom XML.

DDL untuk mengelola koleksi skema

Anda dapat membuat koleksi skema XML di database dan mengaitkannya dengan variabel dan kolom jenis xml . Untuk mengelola kumpulan skema dalam database, SQL Server menyediakan pernyataan DDL berikut:

Untuk menggunakan koleksi skema XML dan skema yang ada di dalamnya, Anda harus terlebih dahulu membuat koleksi dan skema dengan menggunakan pernyataan CREATE XML SCHEMA COLLECTION. Setelah koleksi skema dibuat, Anda kemudian dapat membuat variabel dan kolom jenis xml dan mengaitkan koleksi skema dengannya. Setelah koleksi skema dibuat, berbagai komponen skema disimpan dalam metadata. Anda juga dapat menggunakan ALTER XML SCHEMA COLLECTION untuk menambahkan lebih banyak komponen ke skema yang ada atau menambahkan skema baru ke koleksi yang sudah ada.

Untuk menghilangkan koleksi skema, gunakan pernyataan DROP XML SCHEMA COLLECTION. Ini menghilangkan semua skema yang terkandung dalam koleksi dan menghapus objek koleksi. Sebelum Anda dapat menghilangkan koleksi skema, kondisi yang dijelaskan dalam DROP XML SCHEMA COLLECTION (Transact-SQL) harus dipenuhi.

Memahami komponen skema

Saat Anda menggunakan pernyataan CREATE XML SCHEMA COLLECTION, berbagai komponen skema diimpor ke dalam database. Komponen skema mencakup elemen skema, atribut, dan definisi jenis. Saat Anda menggunakan pernyataan DROP XML SCHEMA COLLECTION, Anda menghapus koleksi lengkap.

CREATE XML SCHEMA COLLECTION menyimpan komponen skema ke dalam berbagai tabel sistem.

Misalnya, pertimbangkan skema berikut:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="uri:Cust_Orders2"
            xmlns="uri:Cust_Orders2" >
  <xsd:attribute name="SomeAttribute" type="xsd:int" />
  <xsd:complexType name="SomeType" />
  <xsd:complexType name="OrderType" >
    <xsd:sequence>
      <xsd:element name="OrderDate" type="xsd:date" />
      <xsd:element name="RequiredDate" type="xsd:date" />
      <xsd:element name="ShippedDate" type="xsd:date" />
    </xsd:sequence>
    <xsd:attribute name="OrderID" type="xsd:ID" />
    <xsd:attribute name="CustomerID"  />
    <xsd:attribute name="EmployeeID"  />
  </xsd:complexType>
  <xsd:complexType name="CustomerType" >
     <xsd:sequence>
        <xsd:element name="Order" type="OrderType"
                     maxOccurs="unbounded" />
       </xsd:sequence>
      <xsd:attribute name="CustomerID" type="xsd:string" />
      <xsd:attribute name="OrderIDList" type="xsd:IDREFS" />
  </xsd:complexType>
  <xsd:element name="Customer" type="CustomerType" />
</xsd:schema>

Skema sebelumnya menunjukkan berbagai jenis komponen yang dapat disimpan dalam database. Ini termasuk SomeAttribute, , SomeType, CustomerTypeOrderType, Customer, Order, CustomerID, , OrderID, OrderDate, RequiredDate, dan ShippedDate.

Kategori komponen

Komponen Skema yang disimpan dalam database termasuk dalam kategori berikut:

  • ELEMEN

  • ATRIBUT

  • TYPE (untuk jenis sederhana atau kompleks)

  • ATTRIBUTEGROUP

  • MODELGROUP

Contohnya:

  • SomeAttribute adalah komponen ATRIBUT.

  • SomeType, OrderType, dan CustomerType merupakan komponen TYPE.

  • Customer adalah komponen ELEMENT.

Saat Anda mengimpor skema ke database, SQL Server tidak menyimpan skema itu sendiri. Sebagai gantinya, SQL Server menyimpan berbagai komponen individual. Artinya, <tag Skema> tidak disimpan, hanya komponen yang ditentukan di dalamnya yang dipertahankan. Semua elemen skema tidak dipertahankan. <Jika tag Skema> berisi atribut yang menentukan perilaku default komponennya, atribut ini dipindahkan ke komponen skema di dalamnya selama proses impor, seperti yang ditunjukkan dalam tabel berikut.

Nama atribut Perilaku
attributeFormDefault Atribut formulir diterapkan ke semua deklarasi atribut dalam skema di mana belum ada dan nilai diatur ke nilai atributFormDefault .
elementFormDefault Atribut formulir diterapkan ke semua deklarasi elemen dalam skema di mana belum ada dan nilai diatur ke nilai atribut elementFormDefault .
blockDefault Atribut blok diterapkan ke semua deklarasi elemen dan definisi jenis di mana belum ada dan nilai diatur ke nilai atribut blockDefault .
finalDefault Atribut akhir diterapkan ke semua deklarasi elemen dan definisi jenis di mana belum ada dan nilai diatur ke nilai atribut finalDefault .
targetNamespace Informasi tentang komponen milik namespace layanan target disimpan dalam metadata.

Izin pada kumpulan skema XML

Anda harus memiliki izin yang diperlukan untuk melakukan hal berikut:

  • Membuat/memuat koleksi skema XML

  • Mengubah kumpulan skema XML

  • Menghilangkan koleksi skema XML

  • Gunakan kumpulan skema XML untuk mengetik kolom, variabel, dan parameter jenis xml , atau menggunakannya dalam batasan tabel atau kolom

Model keamanan SQL Server memungkinkan izin CONTROL pada setiap objek. Penerima izin ini memperoleh semua izin lain pada objek. Pemilik objek juga memiliki semua izin pada objek.

Pemilik dan penerima izin CONTROL pada objek dapat memberikan izin apa pun pada objek. Pengguna yang bukan pemilik dan tidak memiliki izin CONTROL masih dapat memberikan izin pada objek ketika WITH GRANT OPTION ditentukan. Misalnya, asumsikan Pengguna A memiliki izin REFERENSI pada koleksi skema XML S, melalui WITH GRANT OPTION, tetapi tidak ada izin lain pada S. Pengguna A dapat memberikan izin REFERENSI Pengguna B pada kumpulan skema S.

Model keamanan juga memungkinkan izin untuk membuat dan menggunakan koleksi skema XML atau mentransfer kepemilikan dari satu pengguna ke pengguna lain. Artikel berikut ini menjelaskan izin pengumpulan skema XML.

Mendapatkan informasi tentang skema XML dan koleksi skema

Koleksi skema XML dijumlahkan dalam tampilan katalog, sys.xml_schema_collections. Koleksi sys skema XML ditentukan oleh sistem. Ini berisi namespace yang telah ditentukan sebelumnya yang dapat digunakan di semua koleksi skema XML yang ditentukan pengguna tanpa harus memuatnya secara eksplisit. Daftar ini berisi namespace untuk xml, , xs, xsifn, dan xdt. Dua tampilan katalog lainnya adalah sys.xml_schema_namespaces, yang menghitung semua namespace dalam setiap koleksi skema XML, dan sys.xml_components, yang menghitung semua komponen skema XML dalam setiap skema XML.

Fungsi XML_SCHEMA_NAMESPACEbawaan , schemaName, XmlSchemacollectionName, namespace-uri, menghasilkan instans jenis data xml . Instans ini berisi fragmen skema XML untuk skema yang terkandung dalam koleksi skema XML, kecuali skema XML yang telah ditentukan sebelumnya.

Anda dapat menghitung konten kumpulan skema XML dengan cara berikut:

  • Tulis kueri Transact-SQL pada tampilan katalog yang sesuai untuk koleksi skema XML.

  • Gunakan fungsi XML_SCHEMA_NAMESPACE()bawaan . Anda dapat menerapkan metode tipe data xml pada output fungsi ini. Namun, Anda tidak dapat mengubah skema XML yang mendasar.

Ini diilustrasikan dalam contoh berikut.

Contoh

Menghitung namespace XML dalam kumpulan skema XML

Gunakan kueri berikut untuk kumpulan myCollectionskema XML :

SELECT XSN.name
FROM    sys.xml_schema_collections XSC JOIN sys.xml_schema_namespaces XSN
    ON (XSC.xml_collection_id = XSN.xml_collection_id)
WHERE    XSC.name = 'myCollection';

Menghitung konten kumpulan skema XML

Pernyataan berikut menghitung konten kumpulan myCollection skema XML dalam skema relasional, dbo.

SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection');

Skema XML individual dalam koleksi dapat diperoleh sebagai instans jenis data xml dengan menentukan namespace layanan target sebagai argumen ketiga untuk XML_SCHEMA_NAMESPACE(). Hal ini ditunjukkan di contoh berikut.

Mengeluarkan skema tertentu dari koleksi skema XML

Pernyataan berikut menghasilkan skema XML dengan namespace target pura-pura https://www.microsoft.com/was-books dari kumpulan myCollection skema XML dalam skema relasional, dbo.

SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection',
N'https://www.microsoft.com/was-books')

Skema XML kueri

Anda bisa mengkueri skema XML yang telah Anda muat ke dalam koleksi skema XML dengan cara berikut:

  • Tulis kueri Transact-SQL pada tampilan katalog untuk namespace skema XML.

  • Buat tabel yang berisi kolom tipe data xml untuk menyimpan skema XML Anda dan juga memuatnya ke dalam sistem jenis XML. Anda bisa mengkueri kolom XML dengan menggunakan metode tipe data xml . Selain itu, Anda dapat membangun indeks XML pada kolom ini. Namun, dengan pendekatan ini, aplikasi harus mempertahankan konsistensi antara skema XML yang disimpan di kolom XML dan sistem jenis XML. Misalnya, jika Anda menghilangkan namespace skema XML dari sistem jenis XML, Anda juga harus menghilangkannya dari tabel untuk mempertahankan konsistensi.

Lihat juga