Helyettesítő karakterek összetevői és tartalomérvényesítés

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

A helyettesítő karaktereket tartalmazó összetevőkkel nagyobb rugalmasságot lehet biztosítani a tartalommodellekben való megjelenéshez. Ezeket az összetevőket az XSD nyelv a következő módokon támogatja:

  • Elem helyettesítő karaktereinek összetevői. Ezeket az <xsd:any> elem jelöli.

  • Attribútum helyettesítő karakterek összetevői. Ezeket az <xsd:anyAttribute> elem jelöli.

Mindkét helyettesítő karakterelem, a <xsd:any> és a <xsd:anyAttribute>, támogatja a processContents attribútum használatát. Ez lehetővé teszi egy érték megadását, amely jelzi, hogy az XML-alkalmazások hogyan kezelik a helyettesítő karakterelemekhez társított dokumentumtartalom érvényesítését. Ezek a különböző értékek és azok hatása:

  • A szigorú érték azt határozza meg, hogy a tartalom teljes mértékben érvényes.

  • A átlépés értéke azt határozza meg, hogy a tartalom nem kerül érvényesítésre.

  • A hasábérték azt határozza meg, hogy csak azok az elemek és attribútumok legyenek érvényesítve, amelyekhez sémadefiníciók érhetők el.

Enyhe érvényesítés és xs:anyType elemek

Az XML-séma specifikációja lax érvényesítést használ az anyType típusú elemekhez. Mivel az SQL Server 2005 (9.x) nem támogatta a laza érvényesítést, a rendszer szigorú ellenőrzést alkalmazott az anyType elemeire. Az SQL Server 2008-tól kezdve (10.0.x) támogatott a laza érvényesítés. Az anyType típusú elemek tartalma lax-ellenőrzéssel lesz érvényesítve.

Az alábbi példa a laza érvényesítést szemlélteti. A sémaelem ebármilyenType típusú. A példa típusos XML-változókat hoz létre, és bemutatja az anyType típus elemének laza érvényesítését.

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

Az alábbi példa sikeres, mert az ellenőrzés <e> sikeres:

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

Az alábbi példa sikeres. A példányt akkor is elfogadja a rendszer, ha a sémában nincs <c> elem definiálva:

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

A következő példában szereplő XML-példányt a rendszer elutasítja, mert az elem definíciója nem engedélyezi a <a> sztringértékeket.

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

Lásd még