Megosztás a következőn keresztül:


A beírt XML és a nem beírt XML összehasonlítása

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

Az típusú xml változókat, paramétereket és oszlopokat hozhat létre. Xml-sémák gyűjteményét társíthatja xml típusú változóhoz, paraméterhez vagy oszlophoz. Ebben az esetben az xml adattípuspéldány neve típusú. Ellenkező esetben az XML-példány neve nincs megadva a típusanélkül.

Jól formázott XML és az XML-adattípus

Az xml adattípus az ISO szabvány xml adattípust implementálja. Ezért képes jól formázott XML 1.0-s verziójú dokumentumokat és úgynevezett XML-tartalomtöredékeket tárolni szövegcsomópontokkal és tetszőleges számú legfelső szintű elemet egy be nem írt XML-oszlopban. A rendszer ellenőrzi, hogy az adatok jól formázottak-e, nem követeli meg, hogy az oszlop xml-sémákhoz legyen kötve, és elutasítja a kiterjesztett értelemben nem megfelelően formázott adatokat. Ez a nem beírt XML-változókra és paraméterekre is igaz.

XML-sémák

Az XML-sémák a következőket biztosítják:

  • Érvényesítési korlátozások. Amikor egy típusos XML-példányt hozzáadnak vagy módosítanak, az SQL Server ellenőrzi azt.

  • Adattípus-információk. A sémák információt nyújtanak az xml adattípus-példányban található attribútumok és elemek típusairól. A típusinformációk pontosabb működési szemantikát biztosítanak a példányban lévő értékekre, mint a típus nélküli xml. A decimális aritmetikai műveletek például decimális értéken végezhetők el, sztringértéken azonban nem. Emiatt a gépelt XML-tároló jelentősen tömörebbé tehető, mint a nem beírt XML.

Típussal rendelkező vagy típussal nem rendelkező XML kiválasztása

A következő helyzetekben használjon nem beírt xml adattípust:

  • Nem rendelkezik sémával az XML-adatokhoz.

  • Vannak sémái, de nem szeretné, hogy a kiszolgáló ellenőrizze az adatokat. Ez néha akkor fordul elő, ha egy alkalmazás ügyféloldali ellenőrzést végez az adatok kiszolgálón való tárolása előtt, vagy ideiglenesen tárolja a séma alapján érvénytelen XML-adatokat, vagy olyan sémaösszetevőket használ, amelyek nem támogatottak a kiszolgálón.

A következő helyzetekben használjon beírt xml adattípust:

  • Vannak sémái az XML-adatokhoz, és azt szeretné, hogy a kiszolgáló az XML-sémák szerint ellenőrizze az XML-adatokat.

  • A tárolási és lekérdezésoptimalizálási lehetőségeket a típusadatok alapján szeretné kihasználni.

  • A lekérdezések összeállítása során jobban szeretné kihasználni a típusadatok előnyeit.

A beírt XML-oszlopok, paraméterek és változók XML-dokumentumokat vagy tartalmakat tárolhatnak. A deklaráció időpontjában azonban meg kell adnia egy jelölővel, hogy dokumentumot vagy tartalmat tárol-e. Emellett meg kell adnia az XML-sémák gyűjteményét is. Adja meg a DOCUMENT értéket, ha minden XML-példánynak pontosan egy legfelső szintű eleme van. Ellenkező esetben használja a TARTALOM parancsot. A lekérdezésfordító a DOCUMENT jelölőt használja típusellenőrzések során a lekérdezés fordításakor, hogy egyedi felső szintű elemeket derítsen ki.

Beírt XML létrehozása

A beírt xml- változók, paraméterek vagy oszlopok létrehozása előtt először regisztrálnia kell az XML-sémagyűjteményt CREATE XML SCHEMA COLLECTION (Transact-SQL)használatával. Ezután társíthatja az XML-sémagyűjteményt a xml- adattípus változóival, paramétereivel vagy oszlopaival.

Az alábbi példákban egy kétrészes elnevezési konvenciót használunk az XML-sémacsoport nevének megadásához. Az első rész a séma neve, a második pedig az XML-sémagyűjtemény neve.

Példa: Sémagyűjtemény társítása XML-típusváltozóval

Az alábbi példa létrehoz egy xml- típusú változót, és egy sémagyűjteményt társít hozzá. A példában megadott sémagyűjtemény már importálva van az AdventureWorks adatbázisba.

DECLARE @x xml (Production.ProductDescriptionSchemaCollection);

Példa: Séma megadása xml típusú oszlophoz

Az alábbi példa egy xml típusú oszlopot tartalmazó táblát hoz létre, és megadja az oszlop sémáját:

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

Példa: XML-típusparaméter átadása tárolt eljárásnak

Az alábbi példa egy xml- típusparamétert ad át egy tárolt eljárásnak, és megadja a változó sémáját:

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

Jegyezze fel a következőket az XML-sémagyűjteményről:

  • Az XML-sémagyűjtemények csak abban az adatbázisban érhetők el, amelyben regisztrálták, XML-sémagyűjtemény létrehozásahasználatával.

  • Ha egy sztringet egy típusos xml adattípusra alakítasz, az elemzés a megadott gyűjtemény XML-sémanévterei alapján érvényesítést és típusellenőrzést is végrehajt.

  • A beírt xml- adattípusból egy nem beírt xml adattípusba helyezheti át, és fordítva.

További információ az XML SQL Serverben történő létrehozásának egyéb módjairól: XML-adatpéldányok létrehozása. Az XML létrehozása után hozzárendelhető egy xml adattípus változóhoz, vagy xml típusú oszlopokban tárolva további feldolgozás céljából.

Az adattípus-hierarchiában az xml adattípus a sql_variant és a felhasználó által definiált típusok alatt, de a beépített típusok bármelyike felett jelenik meg.

Példa: A beírt XML-oszlop korlátozására szolgáló aspektusok megadása

A beírt xml- oszlopok esetében korlátozhatja, hogy az oszlop csak egyetlen legfelső szintű elemeket engedélyezzen minden egyes benne tárolt példányhoz. Ezt úgy teheti meg, hogy megadja az opcionális DOCUMENT aspektust egy tábla létrehozásakor, ahogyan az az alábbi példában látható:

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

Alapértelmezés szerint a beírt xml oszlopban tárolt példányok XML-tartalomként és nem XML-dokumentumokként vannak tárolva. Ez lehetővé teszi a következőket:

  • Nulla vagy több legfelső szintű elem

  • Felső szintű elemek szövegcsomópontjai

Ezt a viselkedést explicit módon is megadhatja CONTENT aspektus hozzáadásával, ahogyan az alábbi példában látható:

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

Az opcionális DOCUMENT/CONTENT aspektusokat bárhol megadhatja, ahol megadhatja xml típust (beírt xml). Ha például egy beírt xml változót hoz létre, hozzáadhatja a DOCUMENT/CONTENT aspektust az alábbiak szerint:

declare @x xml (DOCUMENT Production.ProductDescriptionSchemaCollection);

Dokumentumtípus-definíció (DTD)

Az xml adattípus oszlopai, változói és paraméterei XML-sémával írhatók be, de DTD használatával nem. A beágyazott DTD azonban a típus nélküli és típusú XML esetében is használható az alapértelmezett értékek megadásához, valamint az entitáshivatkozások kibővített alakjukra való lecseréléséhez.

A DTD-ket xml-sémadokumentumokká alakíthatja külső eszközökkel, és betöltheti az XML-sémákat az adatbázisba.

Strukturált XML frissítése az SQL Server 2005 verzióról

Az SQL Server 2008 (10.0.x) számos kiterjesztést vezetett be az XML séma támogatásához, beleértve a laza érvényesítést, a xs:date, xs:time és xs:dateTime példányadatok jobb kezelését, és hozzáadta a lista- és egyesítéstípusok támogatását. A legtöbb esetben a módosítások nem befolyásolják a frissítési élményt. Ha azonban olyan XML-sémagyűjteményt használt az SQL Server 2005-ben (9.x), amely xs:date, xs:timevagy xs:dateTime (vagy bármely altípus) típusú értékeket engedélyezett, akkor az alábbi frissítési lépések történnek, amikor az SQL Server 2005 (9.x) adatbázist az SQL Server egy későbbi verziójához csatolja:

  1. Minden XML-oszlophoz, amely egy olyan XML-sémagyűjteménnyel van típusítva, amely olyan elemeket vagy attribútumokat tartalmaz, amelyeket xs:anyType, xs:anySimpleType, xs:date vagy bármelyik altípusa, xs:time vagy bármelyik altípusa, illetve xs:dateTime vagy bármelyik altípusa típusúra állítottak, vagy amelyek egyesítő vagy lista típusok, és ezek közül bármely típust tartalmaznak:

    1. Az oszlop összes XML-indexe le lesz tiltva.

    2. Az SQL Server 2005 (9.x) összes értéke továbbra is a Z időzónában jelenik meg, mivel a Z időzónára normalizálták őket.

    3. Minden xs:date vagy xs:dateTime értékek, amelyek az 1. év január 1-jeinél kisebbek, futásidejű hibához vezetnek az index újraépítésekor, vagy XQuery vagy XML-DML utasítások végrehajtása az értéket tartalmazó xml adattípuson.

  2. Az xs:date vagy xs:dateTime aspektusai vagy alapértelmezett értékei automatikusan frissülnek az xs:date vagy xs:dateTime típus által megengedett legkisebb értékre (mint például a 0001-01-01T00:00:00.0000000Z az xs:dateTimeesetén).

Továbbra is használhat Transact-SQL SELECT utasítást a teljes xml- adattípus lekéréséhez, még akkor is, ha negatív éveket tartalmaz. Javasoljuk, hogy a negatív éveket cserélje le egy évre az újonnan támogatott tartományon belül, vagy módosítsa az elem vagy attribútum típusát xs:stringértékre.

Lásd még: