Komponen kartubebas dan validasi konten

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Komponen kartubebas digunakan untuk meningkatkan fleksibilitas dalam apa yang diizinkan untuk muncul dalam model konten. Komponen-komponen ini didukung dalam bahasa XSD dengan cara berikut:

  • Komponen kartubebas elemen. Ini diwakili oleh <xsd:any> elemen .

  • Atribut komponen kartubebas. Ini diwakili oleh <xsd:anyAttribute> elemen .

Kedua elemen karakter kartubebas, <xsd:any> dan <xsd:anyAttribute>, mendukung penggunaan processContents atribut. Ini memungkinkan Anda menentukan nilai yang menunjukkan bagaimana aplikasi XML menangani validasi konten dokumen yang terkait dengan elemen karakter kartubebas ini. Ini adalah nilai yang berbeda dan efeknya:

  • Nilai ketat menentukan bahwa konten sepenuhnya divalidasi.

  • Nilai lewati menentukan bahwa konten tidak divalidasi.

  • Nilai lax menentukan bahwa hanya elemen dan atribut yang definisi skemanya tersedia yang divalidasi.

Validasi laks dan elemen xs:anyType

Spesifikasi Skema XML menggunakan validasi laks untuk elemen jenis anyType . Karena SQL Server 2005 (9.x) tidak mendukung validasi laks, validasi ketat diterapkan untuk elemen anyType. Dimulai dengan SQL Server 2008 (10.0.x), validasi laks didukung. Konten elemen jenis anyType akan divalidasi menggunakan validasi lax.

Contoh berikut mengilustrasikan validasi laks. Elemen e skema adalah dari jenis anyType . Contoh membuat variabel xml yang diketik dan mengilustrasikan validasi lax elemen dari jenis anyType.

CREATE XML SCHEMA COLLECTION SC AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://ns">
   <element name="e" type="anyType"/>
   <element name="a" type="byte"/>
   <element name="b" type="string"/>
</schema>';
GO

Contoh berikut berhasil, karena validasi <e> berhasil:

DECLARE @var XML(SC);
SET @var = '<e xmlns="http://ns"><a>1</a><b>data</b></e>';
GO

Contoh berikut berhasil. Instans diterima, meskipun tidak ada elemen <c> yang didefinisikan dalam skema:

DECLARE @var XML(SC);
SET @var = '<e xmlns="http://ns"><a>1</a><c>Wrong</c><b>data</b></e>';
GO

Instans XML dalam contoh berikut ditolak, karena definisi <a> elemen tidak mengizinkan nilai string.

DECLARE @var XML(SC);
SET @var = '<e xmlns="http://ns"><a>Wrong</a><b>data</b></e>';
SELECT @var;
GO

Baca juga