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:
CREATE XML SCHEMA COLLECTION (Transact-SQL) Mengimpor komponen skema ke dalam database.
ALTER XML SCHEMA COLLECTION (Transact-SQL) Memodifikasi komponen skema dalam koleksi skema XML yang ada.
DROP XML SCHEMA COLLECTION (Transact-SQL) Menghapus koleksi skema XML lengkap dan semua komponennya.
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
, CustomerType
OrderType
, 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
, danCustomerType
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.
Memberikan Izin pada Koleksi Skema XML
Artikel ini membahas cara memberikan izin untuk membuat kumpulan skema XML dan cara memberikan izin pada objek pengumpulan skema XML.
Mencabut Izin pada Koleksi Skema XML
Artikel ini membahas cara mencabut izin dapat digunakan untuk mencegah pembuatan kumpulan skema XML dan cara mencabut izin pada objek pengumpulan skema XML.
Tolak Izin pada Koleksi Skema XML
Artikel ini membahas cara menolak izin untuk membuat kumpulan skema XML dan menolak izin pada objek kumpulan 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
, xsi
fn
, 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_NAMESPACE
bawaan , 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 myCollection
skema 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.